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

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


ファイルとしても添付します。

1746行のif文全体を括ってしまうと、root権限を持ったまま、"return -1"で抜けちゃうので、
if文の外に出してafp.confを読み込んでいます。

それと、

>> 更にdaemon起動時にafp.confのownerとpermissionを調べて問題があったら
>> 即時終了する処理も...

も、どこに組み込んでいいのか、さっぱりわかりません。

お市

-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: netatalk_conf.patch
型:         application/octet-stream
サイズ:     1081 バイト
説明:       無し
URL:        </mailman/archives/netatalk-ja/attachments/20140113/8fe94f59/attachment.obj>
-------------- next part --------------


2014/01/13 21:07、Oichinokata <oichinokata @ oichinote.com> のメール:

> パッチ、できたかもしれません。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 メーリングリストの案内