Samba & winbindd での valid users の指定方法
ads & winbind なセッティングで,HOGE ドメインの Domain Users にのみアクセスを許可したい共有フォルダを作る方法。
私の環境では,全体設定として
[global] security = ads workgroup = HOGE idmap domains = HOGE idmap config HOGE:default = yes idmap config HOGE:backend = rid idmap config HOGE:range = 10000-19999 idmap config HOGE:base_rid = 0 # winbind nss info = sfu:HOGE winbind separator = ! winbind use default domain = true
のようになっています*1。
winbind separator
は,デフォルトでは「\
」なのですが,「!
」に変えてあります。ここがはまりどころの原因だったわけですが。
この環境下での,Domain Users のみにアクセスを許す共有フォルダの設定例は下記の通り。
[ourshare] comment = Our Share Directories path = /ourshare read only = No valid users = +"HOGE!domain users" force group = "HOGE!domain users"
当初 valid users = +"domain users"
とかやってもうまくいきませんでした。ソースを浅追いしていたら,passdb/lookup_sid.c
の lookup_name_smbconf()
で winbind separator
を使用しているのを発見して,上記のような設定になった次第。
domain users
のように,トークンの間に空白をはさむものについては,「"
」(ダブルクォーテーション)でエスケープしてやるとよしなにしてくれます。"+HOGE!domain users"
のように「+
」ごと「"
」の中にいれてやっても OK です。このへんは lib/util_str.c
の next_token_internal
に書いてあります。
あと undocumented feature ですが,HOGE の Domain Users の SID がわかるのであれば,
valid users = S-1-5-21-XXXXXXXXX-XXXXXXXXX-XXXXXXXXXX-513
のように SID を表記してもうまくいきます(この場合「+
」はつけない)。探索中に発見した feature です。
追記
このままの設定だとユーザでなくても Guest として接続できてしてしまうかも。invalid users
に指定する必要ありかなぁ。
さらに追記
winbind normalize names
なんてパラメータもあるんですね。どのバージョンからかは不明ですが。