samba/ldapの覚え書き(暫定版)
マルチポスト元→http://exth.net/~tgbt/wordpress/2010/02/03/2879/
やろうと思う度にはまって時間を無駄にするので、一気に頑張った。オンラインで探すと、古すぎて事情が同じか疑問な資料が多かったり、一気にまとめて設定していたりで、とてもツライ。
この資料では0から順番を追って説明していくので、少なくとも現存するどのドキュメントよりもなんとかなる資料のつもり。ただし、LDAPにおけるdnやdcの説明とか、samba設定ファイルの基本的な書き方とか、そういうのは説明しないので、適当に付け焼き刃を持ってくること推奨。
以下、導入のための覚え書き。間違いが含まれていたらごめんね。
要求仕様
sambaとUNIXユーザー情報の一元化、要するにパスワードなどの共有をしたい。
共通ユーザの情報はLDAPに持たせて、ユーザの管理(追加やパスワード変更やシェル変更など)は(とりあえず)LDAPサーバ上でだけできればOKとする。
構成
ldapサーバ兼sambaサーバ兼ファイルサーバなサーバノードを1台、ldap情報を元にログインやらなんやらを行うクライアントノードが数台。という構成。
より大規模な環境だとldapを別の専用DBサーバするのかなぁ、と思いつつも、ここではそこまででかい話にはしない。
OSはとりあえず手堅く(?)CentOS5.4 x86_64。
手順
パッケージの準備
とりあえず使いそうなものは入れておく。
LDAPサーバの準備
テストに使ったldifファイルの例
dn: dc=test,dc=example,dc=net objectClass: dcObject objectClass: organization dc: test o: test dn: ou=People,dc=test,dc=example,dc=net objectClass: organizationalUnit ou: People dn: uid=testuser,ou=People,dc=test,dc=example,dc=net objectClass: account objectClass: posixAccount uid: testuser cn: testuser userPassword: testuser loginShell: /bin/bash uidNumber: 1000 gidNumber: 1000 homeDirectory: /exports/home/testuser
SAMBAと連携するための設定
ここまでの設定で、LDAPを使った複数PC間のログイン認証一元化はできている。さらにsambaの認証もまとめようというのがここでのお話。設定ファイルを書き換えたら適当にldapやsmbをrestartすること。
- samba.confにldap関連の設定を記述する
- [global]領域に以下のような情報を書く
security user passdb backend = ldapsam:ldap://localhost ldap suffix = dc=省略 ldap admin dn = cn=Manager,dc=省略 ldap user suffix = ou=Users ldap group suffix = ou=Groups ldap machine suffix = ou=Computers ldap passwd sync = yes
-
- ou=の項目はsmbldap.confのusersdn=,computersdn=,groupsdn=に対応していると考えられる
- と言いつつも、間違っていても問題なかったケースと問題だったケースを経験しているので、やや理解が足りていないのが現状
- ou=の項目はsmbldap.confのusersdn=,computersdn=,groupsdn=に対応していると考えられる
- smbldap.confのSID,sambaDomain,masterLDAP,masterPort,ldapTLS,suffixあたりを適切に修正する
- smbldap_bind.confのmasterDNとmasterPwを記述する
- slapd.confにincludeを追加する
- include /path/to/samba.schema
- samba.schemaは/usr/share/doc/samba-3.0.33/LDAP/samba.schemaあたりから適当にコピーしておくこと
- smbldap-populateを実行する
- samba関係の色々なユーザ情報が追加される
- 怪しいエラーが出たら各種設定ファイルを見直すべし
- (最後にパスワードを聞かれるが、これが何に影響するのか良くわからない)
- sambaからLDAPにアクセスするためのパスワードを登録する
- smbpasswd -w LDAPの管理者パスワード で登録できる
- smbclientで動作確認
- smbclient -U ユーザ名 -L LDAPサーバアドレス でsambaの情報が見えるはず
- ユーザ名を入れなければ管理者扱い
- mount -t cifsでマウント
- smbmountは無くなったらしい
以上にて設定自体は完了。あとはユーザの追加や情報変更をどうするかの問題。
ユーザ管理
passwdやらchshやらが使えるのかというと、使えない。こいつらはldap向けじゃないから。PAMの設定を頑張れば良いのかも知れないけど、私はPAMのカスタマイズまで頑張る気はない。
どうすれば良いかというと、smbldap-toolsを入れればsmbldap-で始まるコマンドがいくつも使えるようになるので、これらを利用する。
- ユーザ追加
- smbldap-useradd
- smbldap-useraddを引数無しで実行すればオプションの概要がわかる。-a -mあたりは付けておくべき。ちなみに-mで作られるHOMEディレクトリは、-dで指定するか、前述のようにsmbldap.confを弄っておくと良い。
- smbldap-useradd
- ユーザ情報の変更
- パスワードやシェルをどうやって変えるか。パスワードはsmbldap-passwd、その他はsmbldap-usermod。usermodは引数無しで実行すると出力される使い方を見ればだいたいわかるはず。
- グループの追加・変更
- "Domain Users"みたいにスペースが入って気持ち悪い!とか、gidの値をもっとでかいエリアに持っていきたい!とか思った場合にどうするか
- smbldap-groupmodでグループ名の変更やグループの追加をすると良い
- しかし、単純にグループを smbldap-groupadd -g gid groupname で追加しただけではsmbldap-usermodでユーザのgidとして設定しようとしても弾かれる
- エラーメッセージにはSIDがどうのこうのと出るはず
- Domain Usersの情報を見るとsambaSIDが設定されている。gidに使うグループにはこいつが必要。「SIDとして指定した値にgidNumberが付加された値」が設定されているはずなので、これを適当にぱくってsmbldap-groupmod -s S-hogehoge groupnameの形式の指定をしてやれば、smbldap-usermodでgidとして指定可能になる.
- S-hogehogeの部分については、net getlocalsidで取得し設定した値に-503などの接尾辞が付いているはずである。この値はおそらくsmbldap.confで設定したSIDにdefaultUserGidが追加されているもののはずなので、末尾の値をそれらしく偽装すればOK!
その他
追記
- グループを追加してもSIDで蹴られる問題は、-aオプションで解決するかも。manを見るとそう見える。試してない。(20100208)