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 なんてパラメータもあるんですね。どのバージョンからかは不明ですが。