[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 メーリングリストの案内