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.clookup_name_smbconf()winbind separator を使用しているのを発見して,上記のような設定になった次第。

domain users のように,トークンの間に空白をはさむものについては,「"」(ダブルクォーテーション)でエスケープしてやるとよしなにしてくれます。"+HOGE!domain users" のように「+」ごと「"」の中にいれてやっても OK です。このへんは lib/util_str.cnext_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 なんてパラメータもあるんですね。どのバージョンからかは不明ですが。

*1:つまり前回の話の続きです