LDAPを用いたSambaファイルサーバを同一サーバ内に構築したときの備忘録。
- dc=example,dc=comの下にPeopleとGroupを作成
- Groupは/home/shareのみアクセス可能なものと、/home/adminと/home/shareにアクセス可能なものの2種類を作成
- PeopleはそれぞれのGroupに1人ずつ作成
OS: CentOS7.3
Samba: 4.4.4
OpenLDAP: 2.4.40
必要なパッケージのインストール
$ yum -y install samba samba-client samba-common openldap-servers openldap-clients openldap smbldap-tools nss-pam-ldapd pam_ldap
LDAPサーバにexample.comのドメイン情報を登録する
$ slappasswd
New password:
Re-enter new password:
{SSHA}AKtmxfiwIz1Efj5SCLq4ERop8hAnTc70
# 暗号化パスワードを作成(hogehogeとします)
init.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW:{SSHA}AKtmxfiwIz1Efj5SCLq4ERop8hAnTc70
# 暗号化したパスワードを記述
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW:{SSHA}AKtmxfiwIz1Efj5SCLq4ERop8hAnTc70
replace: olcRootDN
olcRootDN: cn=Manager,dc=example,dc=com
replace: olcSuffix
olcSuffix: dc=example,dc=com
$ ldapmodify -a -Y EXTERNAL -H ldapi:/// -f init.ldif
データベースチューニング設定ファイルを配置
$ cp -p /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
ベースエントリの登録
base.ldif
dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
dc: example
o: Example Inc.
dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=example,dc=com
objectClass: organizationalUnit
ou: Group
$ ldapadd -x -D "cn=Manager,dc=example,dc=com" -w hogehoge -f base.ldif
$ ldapsearch -x -LLL -H ldap:/// -b dc=example,dc=com
dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
dc: example
o: Example Inc.
dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=example,dc=com
objectClass: organizationalUnit
ou: Group
必要なスキーマの追加
$ ldapadd -x -W -D cn=config -f /etc/openldap/schema/cosine.ldif
Enter LDAP Password:
adding new entry "cn=cosine,cn=schema,cn=config"
$ ldapadd -x -W -D cn=config -f /etc/openldap/schema/inetorgperson.ldif
Enter LDAP Password:
adding new entry "cn=inetorgperson,cn=schema,cn=config"
$ ldapadd -x -W -D cn=config -f /etc/openldap/schema/nis.ldif
$ cp /usr/share/doc/samba-4.4.4/LDAP/samba.ldif /etc/openldap/schema/samba.ldif
$ ldapadd -x -W -D cn=config -f /etc/openldap/schema/samba.ldif
$ ldapsearch -x -LLL -W -D cn=config -b cn=config "(objectClass=olcSchemaConfig)" dn
Enter LDAP Password:
dn: cn=schema,cn=config
dn: cn={0}core,cn=schema,cn=config
dn: cn={1}cosine,cn=schema,cn=config
dn: cn={2}inetorgperson,cn=schema,cn=config
dn: cn={3}nis,cn=schema,cn=config
dn: cn={4}samba,cn=schema,cn=config
sambaの設定を記述
/etc/samba/smb.conf
# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.
[global]
unix charset = UTF-8
dos charset = CP932
workgroup = WORKGROUP
passdb backend = ldapsam:ldap://127.0.0.1
load printers = no
dns proxy = No
ldap admin dn = cn=Manager,dc=example,dc=com
ldap suffix = dc=example,dc=com
ldap user suffix = ou=People
ldap group suffix = ou=Group
ldap ssl = no
ldap passwd sync = Yes
unix password sync = Yes
guest only = no
[admin]
path = /home/admin
browsable = yes
read only = no
create mask = 0777
directory mask = 0777
valid users = @admin
writable = yes
vfs objects = full_audit
full_audit:success = open pwrite unlink
full_audit:failure = open pwrite unlink
[public]
path = /home/share
public = yes
writable = yes
only guest = yes
正しく記述されているかはtestparmコマンドで確認できる
smb.confを元にLDAPとの連携設定をする
$ smbldap-config
# 対話形式で必要な内容を記述する
$ net getlocalsid
# SambaのSIDを取得し、/etc/smbldap-tools/smbldap.confに書き込む
$ vi /etc/smbldap-tools/smbldap.conf
# SID=""となっている部分にSIDを記述
共有用ディレクトリ作成
$ mkdir /home/share
$ mkdir /home/admin
$ chmod 777 /home/share
$ chmod 777 /home/admin
</pre>
chmod 777 /home/adminとすればsmb.confのvalid userが全員読み書きできるけど、
chgrp admin /home/adminとし、 chmod 770 /home/adminが正しい気もします。
### nsswicthを設定しLDAPからパスワード等を読み込むようにする
/etc/nsswitch.conf
#
# /etc/nsswitch.conf
#
# An example Name Service Switch config file. This file should be
# sorted with the most-used services at the beginning.
#
# The entry '[NOTFOUND=return]' means that the search for an
# entry should stop if the search in the previous entry turned
# up nothing. Note that if the search failed due to some other reason
# (like no NIS server responding) then the search continues with the
# next entry.
#
# Valid entries include:
#
# nisplus Use NIS+ (NIS version 3)
# nis Use NIS (NIS version 2), also called YP
# dns Use DNS (Domain Name Service)
# files Use the local files
# db Use the local database (.db) files
# compat Use NIS on compat mode
# hesiod Use Hesiod for user lookups
# [NOTFOUND=return] Stop searching if not found so far
#
# To use db, put the "db" in front of "files" for entries you want to be
# looked up first in the databases
#
# Example:
#passwd: db files nisplus nis
#shadow: db files nisplus nis
#group: db files nisplus nis
passwd: files sss ldap
shadow: files sss ldap
group: files sss ldap
#initgroups: files
#hosts: db files nisplus nis dns
hosts: files dns myhostname
# Example - obey only what nisplus tells us...
#services: nisplus [NOTFOUND=return] files
#networks: nisplus [NOTFOUND=return] files
#protocols: nisplus [NOTFOUND=return] files
#rpc: nisplus [NOTFOUND=return] files
#ethers: nisplus [NOTFOUND=return] files
#netmasks: nisplus [NOTFOUND=return] files
bootparams: nisplus [NOTFOUND=return] files
ethers: files
netmasks: files
networks: files
protocols: files
rpc: files
services: files sss
netgroup: files sss
publickey: nisplus
automount: files
aliases: files nisplus
LDAPクライアントの設定
$ authconfig-tui
# ユーザー情報: LDAPを使用にチェック
# 認証: LDAP認証を使用にチェック
# 次を押す
# サーバー: ldap://127.0.0.1/
# ベースDN: dc=example,dc=com
# OKを押す
Samba関連のLDAPエントリを追加する
$ smbldap-populate
ここがうまくいかない場合、/etc/smbldap-tools/smbldap.confか/etc/smbldap-tools/smbldap_bind.confを確認する
グループとユーザーを追加する
$ smbldap-groupadd -a admin
$ smbldap-useradd -a admin_user
$ smbldap-groupmod -m admin_user admin
$ smbldap-groupadd -a share
$ smbldap-useradd -a share_user
$ smbldap-groupmod -m share_user share
$ smbldap-passwd admin_user
Changing UNIX and samba passwords for admin_user
New password:
Retype new password:
$ smbldap-passwd share_user
Changing UNIX and samba passwords for share_user
New password:
Retype new password:
以上で作成したユーザーが共有ディレクトリにアクセスできるようになっているかと思います。