[netatalk-ja:0329] Re: Netatalk運用に関する質問

Oichinokata oichinokata @ oichinote.com
2014年 1月 13日 (月) 21:07:45 JST


パッチ、できたかもしれません。Ubuntu 12.04でビルドしました。

*** libatalk/util/netatalk_conf.c.org	2013-10-29 00:46:51.000000000 +0900
--- libatalk/util/netatalk_conf.c	2014-01-13 20:57:57.368870991 +0900
***************
*** 1415,1421 ****
--- 1415,1423 ----
      if (obj->iniconfig)
          atalk_iniparser_freedict(obj->iniconfig);
      LOG(log_debug, logtype_afpd, "load_volumes: loading: %s", obj->options.configfile);
+     become_root();
      obj->iniconfig = atalk_iniparser_load(obj->options.configfile);
+     unbecome_root();
  
      EC_ZERO_LOG( readvolfile(obj, pwresult) );
  
***************
*** 1743,1749 ****
  #endif
      options->flags       = OPTION_UUID | AFPObj->cmdlineflags;
      
!     if ((config = atalk_iniparser_load(AFPObj->options.configfile)) == NULL)
          return -1;
      AFPObj->iniconfig = config;
  
--- 1745,1754 ----
  #endif
      options->flags       = OPTION_UUID | AFPObj->cmdlineflags;
      
!     become_root();
!     config = atalk_iniparser_load(AFPObj->options.configfile);
!     unbecome_root();
!     if (config == NULL)
          return -1;
      AFPObj->iniconfig = config;

このパッチを適用してビルドする事で、
afp.confが600でも、
一般ユーザがAFPのボリュームにアクセスできます。

インストーラ(Makefile)のどこを変更してよいのかわからないので、afp.confを600にする方法がわかりません。

お市

2014/01/13 18:59、HAT <hat @ fa2.so-net.ne.jp> のメール:

> Mon, 13 Jan 2014 17:14:26 +0900, Oichinokata <oichinokata @ oichinote.com>:
>> 回答が返ってきましたが、"やりたいんだったら、パッチ作ってね!"
>> 
>>> you could write a patch using become_root() and unbecome_root() in libatalk/util/netatalk_config.c
>> 
>> でした。
>> 
>> どうしよう...。
>> 
>> libatalk/util/netatalk_conf.c(libatalk/util/netatalk_config.cは間違いと思われます)を見たところ、
>> afp.confを読む部分は、次の2カ所でしょうか?
>> 
>>   1418     obj->iniconfig = atalk_iniparser_load(obj->options.configfile);
> 
> この部分はnetatalk 2の頃のAppleVolumesファイルに相当します。
> つまりボリューム設定を読み込みます。
> クライアントから接続があって、ユーザ認証が通った後に実行されます。
> ユーザが誰であるか判明した後でなければ、見せるべきボリュームが判明しない
> からです。
> 
>>   1746     if ((config = atalk_iniparser_load(AFPObj->options.configfile)) == NULL)
> 
> この部分はnetatalk 2の頃のafpd.confに相当します。
> つまりafpサーバとしての設定を読み込みます。
> たしかafpd起動時にしか読み込まなかったような気がします。(自信なし)
> 
>> この前後を、become_root()とunbecome_root()でくくれば良いのかな?
> 
> 1746が起動時だけだとしたら、、become_root()は必要ないかもしれないです。
> 
>> 1746のif文の方は、configに代入している所を、外に出さなければならないと思いますが。
> 
> if文まるごとでもいいようにみえます。
> 
> あと、make installのときにafp.confをchmod 600する処理が必要かも。
> 更にdaemon起動時にafp.confのownerとpermissionを調べて問題があったら
> 即時終了する処理も...
> 少なくとも現状はセキュリティーホールがあるように思えますね。
> 
> bin/misc/uuidtest.cにもatalk_iniparser_load()がありますが、
> これはテスト用であって運用と無関係なので無視していかと。
> 
> -- 
> HAT



netatalk-ja メーリングリストの案内