CentOS5.0でユーザ認証をLDAP化し、仮想サーバ間のホームディレクトリをNFS4で共有した。次にこれをSambaを使って共有するし、Windows XP端末からアクセスできるようにする。SambaでLDAP認証をするために、ちょっと細かい設定が必要になる。
Sambaの設定はバージョンによって違いがあり、Webや書籍でいろいろ調べてもうまく行かなかった。結局smbldap-toolsというものが標準で用意されているという情報にたどり着いてから先に進んだ。まずマニュアルを読め!という教訓。
LDAPサーバ側の作業
①Samba用のLDAPスキーマをLDAPサーバのOpenLDAPのディレクトリにコピー[root@ns1 ~]# cp /usr/share/doc/samba-3.0.23c/LDAP/samba.schema /etc/openldap/schema/
※samba.schemaはSambaサーバからFTPなどで持ってきてもいいし、LDAPサーバにもともと入っていればそれを使ってもいい
②/etc/openldap/slapd.confを修正し、以下を追加
...
include /etc/openldap/schema/samba.schema
...
access to attrs=SambaLMPassword
by dn="cn=Manager,dc=grandarbre,dc=net" write
by self read
by anonymous auth
by * none
access to attrs=SambaNTPassword
by dn="cn=Manager,dc=grandarbre,dc=net" write
by self read
by anonymous auth
by * none
上記2つのアクセス制限設定はaccess to *の前に書くこと。
③LDAPサーバを再起動
[root@ns1 ~]# service ldap restart
Stopping slapd: [ OK ]
Checking configuration files for slapd: config file testing succeeded
[ OK ]
Starting slapd: [ OK ]
Sambaサーバ側の作業
※基本的に/usr/share/doc/samba-3.0.23c/LDAP/smbldap-tools-0.9.2/INSTALLの手順に従えばOK
①Sambaサーバでsambaのインストール(たぶんデフォルトで入っている)
[root@storage1 ~]# yum install samba [root@storage1 ~]# yum install samba-common
②/usr/share/doc/samba-3.0.23c/LDAP/smbldap-tools-0.9.2/にあるスクリプトを/usr/local/sbinにコピーして実行属性を付与する
[root@storage1 ~]# cp /usr/share/doc/samba-3.0.23c/LDAP/smbldap-tools-0.9.2/smbldap-* /usr/local/sbin [root@storage1 ~]# cp /usr/share/doc/samba-3.0.23c/LDAP/smbldap-tools-0.9.2/smbldap_tools.pm /usr/local/sbin [root@storage1 ~]# chmod 544 /usr/local/sbin/smbldap-* [root@storage1 ~]# chmod 544 /usr/local/sbin/smbldap_tools.pm
③/usr/share/doc/samba-3.0.23c/LDAP/smbldap-tools-0.9.2/にある設定ファイルを/etc/smbldap-tools/にコピーしてパーミッションを設定する
[root@storage1 ~]# mkdir /etc/smbldap-tools [root@storage1 ~]# cp /usr/share/doc/samba-3.0.23c/LDAP/smbldap-tools-0.9.2/smbldap.conf /etc/smbldap-tools/ [root@storage1 ~]# cp /usr/share/doc/samba-3.0.23c/LDAP/smbldap-tools-0.9.2/smbldap_bind.conf /etc/smbldap-tools/ [root@storage1 ~]# chmod 644 /etc/smbldap-tools/smbldap.conf [root@storage1 ~]# chmod 600 /etc/smbldap-tools/smbldap_bind.conf
④SIDを取得する
[root@storage1 ~]# net getlocalsid SID for domain STORAGE1 is: S-1-5-21-2279266102-347069318-3913411543
⑤/etc/smbldap-tools/smbldap.confを編集する。変更したのは以下の場所。
SID="S-1-5-21-2279266102-347069318-3913411543"
sambaDomain="GRANDARBRE"
masterLDAP="ns1"
masterPort="389"
ldapTLS="0"
suffix="dc=grandarbre,dc=net"
userdn="ou=People,${suffix}"
computersdn="ou=Computers,${suffix}"
groupsdn="ou=Groups,${suffix}"
idmapdn="ou=Idmap,${suffix}"
sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}"
⑥/etc/smbldap-tools/smbldap_bind.confを編集する。下記のPASSWORDはLDAPサーバの/etc/openldap/slapd.confでrootpwに設定してあるもの。
slaveDN="cn=Manager,dc=grandarbre,dc=net" slavePw="PASSWORD" masterDN="cn=Manager,dc=grandarbre,dc=net" masterPw="PASSWORD"
⑦設定スクリプトを実行する。この作業は⑧や⑨の後かも...。
[root@storage1 ~]# /usr/local/sbin/smbldap-populate
これの実行にはNet::LDAP、Crypt::SmbHash、Unicode::MapUTF8などがperlにインストールされている必要がある。ここでは詳述しないがCPANなどでインストールする。
[root@storage1 ~]# /usr/bin/perl -MCPAN -e shell ... install Net::LDAP
テストがうまくいかないときは無理やりインストール。
force install Net::LDAP
⑧sambaにLDAPの管理者パスワードを教える。こちらのPASSWORDも⑥と同様。smbpassword -Wと打つと対話式で設定できる。管理者パスワードはsecretsw.tdbというバイナリファイルに保存される。
[root@storage1 ~]# /usr/bin/smbpasswd -w PASSWORD
⑨Sambaの設定をする。/etc/samba/smb.confを編集してもいいが、LDAP用に用意されているものを編集したほうが早い。
[root@storage1 ~]# cp /usr/share/doc/samba-3.0.23c/LDAP/smbldap-tools-0.9.2/smb.conf /etc/samba/
[root@storage1 ~]# vi /etc/samba/smb.conf
[global]
dos charset = CP932
workgroup = GRANDARBRE
server string = Samba Server %v
map to guest = Bad User
obey pam restrictions = Yes
passdb backend = ldapsam:ldap://ns1/
passwd program = /usr/local/sbin/smbldap-passwd -u %u
passwd chat = "Changing password for*\nNew password*" %n\n "*Retype new password*" %n\n"
unix password sync = Yes
syslog = 0
log file = /var/log/samba/log.%m
max log size = 100000
time server = Yes
deadtime = 10
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
printcap name = cups
add user script = /usr/local/sbin/smbldap-useradd -m "%u"
delete user script = /usr/local/sbin/smbldap-userdel "%u"
add group script = /usr/local/sbin/smbldap-groupadd -p "%g"
add user to group script = /usr/local/sbin/smbldap-groupmod -m "%u" "%g"
delete user from group script = /usr/local/sbin/smbldap-groupmod -x "%u" "%g"
set primary group script = /usr/local/sbin/smbldap-usermod -g '%g' '%u'
add machine script = /usr/local/sbin/smbldap-useradd -t 0 -w "%u"
logon script = logon.bat
logon path =
logon drive = H:
logon home =
domain logons = Yes
os level = 65
preferred master = Yes
domain master = Yes
wins support = Yes
ldap admin dn = cn=Manager,dc=grandarbre,dc=net
ldap group suffix = ou=Groups
ldap machine suffix = ou=Computers
ldap suffix = dc=grandarbre,dc=net
ldap ssl = no
ldap user suffix = ou=People
printer admin = "@Print Operators"
create mask = 0640
directory mask = 0750
nt acl support = No
case sensitive = No
dont descend = /proc,/dev,/etc,/lib,/lost+found,/initrd
[homes]
browseable = No
path = /home/%U
read only = No
[share]
path = /home/share
read only = No
⑩Sambaデーモンを再起動
[root@storage1 ~]# service smb restart
⑪SELinuxでホームディレクトリの使用を許可
[root@storage1 ~]# setsebool -P samba_enable_home_dirs on
⑫iptablesでSambaの通信を許可
[root@storage1 ~]# vi /etc/sysconfig/iptables ... -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s 192.168.0.0/24 --dport 139 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp -s 192.168.0.0/24 --dport 138 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp -s 192.168.0.0/24 --dport 137 -j ACCEPT ... [root@storage1 ~]# service iptables reload
⑬ユーザの管理
LDAPサーバに登録済みのUnixユーザへのSambaアカウント情報の追加
[root@storage1 ~]# /usr/local/sbin/smbldap-usermod -a ishii
新しいSambaユーザの追加
[root@storage1 ~]# /usr/local/sbin/smbldap-useradd -m -a newuser
ユーザ情報の表示
[root@storage1 ~]# /usr/local/sbin/smbldap-usershow ishii
dn: uid=ishii,ou=People,dc=grandarbre,dc=net
objectClass: top,person,organizationalPerson,inetOrgPerson,posixAccount,shadowAccount,sambaSamAccount
uid: ishii
homeDirectory: /home/ishii
sambaLogonTime: 0
sambaLogoffTime: 2147483647
sambaKickoffTime: 2147483647
sambaPwdCanChange: 0
displayName: System User
sambaSID: S-1-5-21-2279266102-347069318-3913411543-2000
uidNumber: 500
gecos: Taiki Ishii,,,,
cn: Taiki Ishii
sn: Ishii
givenName: Taiki
loginShell: /bin/bash
userPassword: {SSHA}(削除)
sambaLMPassword: (削除)
sambaAcctFlags: [U]
sambaNTPassword: (削除)
sambaPwdLastSet: 1193874837
sambaPwdMustChange: 1197762837
gidNumber: 500
クライアントで動作確認
まずはLinuxから
[ishii@www1 ~]$ smbclient //storage1/ishii -U ishii
Password:
Domain=[GRANDARBRE] OS=[Unix] Server=[Samba 3.0.23c-2.el5.2.0.2]
smb: \> ls
. D 0 Thu Nov 1 18:50:45 2007
.. D 0 Thu Nov 1 08:59:46 2007
.bash_logout H 24 Wed Oct 31 07:02:07 2007
.ssh DH 0 Thu Nov 1 06:41:43 2007
.bashrc H 124 Wed Oct 31 07:02:15 2007
.lesshst H 72 Thu Nov 1 19:50:57 2007
.bash_profile H 176 Wed Oct 31 07:02:11 2007
.bash_history H 5223 Thu Nov 1 20:04:23 2007
64443 blocks of size 131072. 60000 blocks available
smb: \> pwd
Current directory is \\storage1\ishii\
Windows XPからもログインできた。
