SAMBA with LDAP (SAMBA の構築)
〜 SAMBA と LDAP で PDC (NT ドメイン)を構築 〜
2005-05-10 作成 福島
TOP > tips > samba_ldap > build_samba
[ TIPS | TOYS | OTAKU | LINK | MOVIE | CGI | AvTitle | ConfuTerm | HIST | AnSt | Asob | Shell | GBC | LLM ]

SAMBA の rpm 作成とインストール

SAMBA で PDC を構築する場合 ldapsam が必須になります。

ldapsam の有無による動作の違い

RPM 版 SAMBA の作成

下記コンパイルオプション (A) のために cups と libacl をインストールしておきます
# rpm -i cups-devel-1.1.20-6.i386.rpm
# rpm -i libacl-devel-2.2.7-5.i386.rpm

ソースの展開 (samba.spec の取り出しと bz2 ファイル作成のため)
$ gunzip samba-3.0.14a.tar.gz
$ tar xf samba-3.0.14a.tar samba-3.0.14a/packaging/Fedora/samba.spec # samba.spec ファイルの取り出し
$ tar xf samba-3.0.14a.tar samba-3.0.14a/examples/LDAP/samba.schema # samba.schema ファイルの取り出し
$ bzip2 ./samba-3.0.14a.tar # bz2 ファイルの作成

$ vi ./samba-3.0.14a/packaging/Fedora/samba.spec
ldapsam オプションを追加する --- (A)
変更を最小限にするため、--with-ldapsam の追加だけを行います
CFLAGS="$RPM_OPT_FLAGS" ./configure \ --prefix=%{_prefix} \ --localstatedir=/var \ --sysconfdir=/etc \ --with-privatedir=%{_sysconfdir}/samba \ --with-fhs \ --with-quotas \ --with-smbmount \ --with-pam \ --with-pam_smbpass \ --with-syslog \ --with-utmp \ --with-sambabook=%{_datadir}/swat/using_samba \ --with-swatdir=%{_datadir}/swat \ --with-libsmbclient \ --with-acl-support \ --with-shared-modules=idmap_rid \ --enable-cups=yes \ --with-ldapsam
$ su
# mkdir -p /usr/src/redhat/SOURCES/
# cp -p ./samba-3.0.14a.tar.bz2 /usr/src/redhat/SOURCES/.
# cp -p ./samba-3.0.14a/packaging/Fedora/smb.init /usr/src/redhat/SOURCES/.
# cp -p ./samba-3.0.14a/packaging/Fedora/winbind.init /usr/src/redhat/SOURCES/.
# cp -p ./samba-3.0.14a/packaging/Fedora/samba.pamd /usr/src/redhat/SOURCES/.
# cp -p ./samba-3.0.14a/packaging/Fedora/smbprint /usr/src/redhat/SOURCES/.
# cp -p ./samba-3.0.14a/packaging/Fedora/smb.conf /usr/src/redhat/SOURCES/.
# cp -p ./samba-3.0.14a/packaging/Fedora/smbusers /usr/src/redhat/SOURCES/.
# cp -p ./samba-3.0.14a/packaging/Fedora/samba.log /usr/src/redhat/SOURCES/.
# cp -p ./samba-3.0.14a/packaging/Fedora/samba.xinetd /usr/src/redhat/SOURCES/.
# cp -p ./samba-3.0.14a/packaging/Fedora/samba.sysconfig /usr/src/redhat/SOURCES/.
# cp -p ./samba-3.0.14a/packaging/Fedora/filter-requires-samba.sh /usr/src/redhat/SOURCES/.
# rpmbuild -bb ./samba-3.0.14a/packaging/Fedora/samba.spec # rpm ファイルの作成 (5 個作成されます)

作成された rpm ファイルを手元に持ってくる
# cp -p /usr/src/redhat/RPMS/i386/samba-3.0.14a-1.i386.rpm .
# cp -p /usr/src/redhat/RPMS/i386/samba-client-3.0.14a-1.i386.rpm .
# cp -p /usr/src/redhat/RPMS/i386/samba-common-3.0.14a-1.i386.rpm .
# cp -p /usr/src/redhat/RPMS/i386/samba-swat-3.0.14a-1.i386.rpm .
# cp -p /usr/src/redhat/RPMS/i386/samba-debuginfo-3.0.14a-1.i386.rpm .

作成した rpm で SAMBA をインストール
(既に SAMBA がインストール済みの場合、-i だとエラーが出ます。そのときは -U を試しましょう)
# rpm -i cups-devel-1.1.20-6.i386.rpm 他の機械にインストールするならこれも
# rpm -i libacl-devel-2.2.7-5.i386.rpm 他の機械にインストールするならこれも
# rpm -i ./samba-common-3.0.14a-1.i386.rpm
# rpm -i ./samba-3.0.14a-1.i386.rpm
# rpm -i ./samba-swat-3.0.14a-1.i386.rpm
# rpm -i ./samba-client-3.0.14a-1.i386.rpm # net コマンドは samba-client に入っています

samba-debuginfo はお好みで。(ふつー、要らない)
# rpm -i ./samba-debuginfo-3.0.14a-1.i386.rpm


SAMBA 用 LDAP スキーマの用意

sambaProfilePath 等のルールは samba.schema の中に定義されています

# vi /etc/openldap/slapd.conf

#... include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/nis.schema include /etc/openldap/schema/redhat/autofs.schema include /etc/openldap/schema/samba.schema ./samba-3.0.14a/examples/LDAP/ からコピーしてくる #...
# /etc/rc.d/init.d/ldap restart # slapd.conf を変更したので slapd を再起動


smbldap-tools (SAMBA 向け LDAP エントリ登録用ツール) をインストール
# rpm -i perl-Crypt-SmbHash-0.02-1.1.fc2.dag.noarch.rpm
# rpm -i perl-Convert-ASN1-0.18-0.1.fc2.dag.noarch.rpm
# rpm -i perl-XML-SAX-Base-1.04-0.1.fc2.dag.noarch.rpm
# rpm -i perl-ldap-0.31-1.1.fc2.dag.i386.rpm
# rpm -i perl-Net-SSLeay-1.25-2.1.fc2.rf.i386.rpm
# rpm -i perl-IO-Socket-SSL-0.96-1.1.fc2.rf.noarch.rpm
# rpm -i perl-Authen-PAM-0.15-1.1.fc2.rf.i386.rpm
# rpm -i smbldap-tools-0.9.1-1.1.fc2.rf.noarch.rpm

smbldap-tools の設定ファイルを変更する

ここでは、下記の条件にしています。

NT ドメイン名: "SambaDomain"
ファイルサーバ名: "SambaServer"
LDAP サフィックス: "dc=solar"
LDAP サーバと SAMBA サーバは同一コンピュータ
LDAP <---> SAMBA 間の通信は暗号化しない
SAMBA ユーザは shell を使わない
SAMBA ユーザのホームディレクトリは /home/sambauser/who とする
# vi /etc/smbldap-tools/smbldap.conf
ファイル属性: root:root 644
sambaDomain="SambaDomain" slaveLDAP="127.0.0.1" slavePort="389" masterLDAP="127.0.0.1" masterPort="389" ldapTLS="0" suffix="dc=solar" sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}" userLoginShell="/sbin/nologin" userHome="/home/sambauser/%U" userGecos="Samba User" userSmbHome="\\SambaServer\%U" userProfile="\\SambaServer\profiles\%U" mailDomain="example.com"
# vi /etc/smbldap-tools/smbldap_bind.conf
ファイル属性: root:root 600
slaveDN="cn=manager,dc=solar" slavePw="secret" masterDN="cn=manager,dc=solar" masterPw="secret"
LDAP に SAMBA 用初期エントリ (ou=Users / ou=Groups / ou=Computers / sambaDomainName) を作成
# /usr/sbin/smbldap-populate -a Administrator -b guest
Populating LDAP directory for domain SambaDomain (S-1-5-21-4205727931-4131263253-1851132061) (using builtin directory structure) entry dc=solar already exist. adding new entry: ou=Users,dc=solar adding new entry: ou=Groups,dc=solar adding new entry: ou=Computers,dc=solar adding new entry: ou=Idmap,dc=solar adding new entry: uid=Administrator,ou=Users,dc=solar adding new entry: uid=guest,ou=Users,dc=solar adding new entry: cn=Domain Admins,ou=Groups,dc=solar adding new entry: cn=Domain Users,ou=Groups,dc=solar adding new entry: cn=Domain Guests,ou=Groups,dc=solar adding new entry: cn=Domain Computers,ou=Groups,dc=solar adding new entry: cn=Administrators,ou=Groups,dc=solar adding new entry: cn=Account Operators,ou=Groups,dc=solar adding new entry: cn=Print Operators,ou=Groups,dc=solar adding new entry: cn=Backup Operators,ou=Groups,dc=solar adding new entry: cn=Replicators,ou=Groups,dc=solar adding new entry: sambaDomainName=SambaDomain,dc=solar Please provide a password for the domain Administrator: Changing password for Administrator New password : ******** --- (B) Retype new password : ********
ユーザの追加
# mkdir -p /home/sambauser # ユーザディレクトリの親ディレクトリを作成しておく
# /usr/sbin/smbldap-useradd -a -m UserID

# getent passwd UserID
UserID:x:1001:513:Samba User:/home/sambauser/UserID:/sbin/nologin
グループの追加と追加したグループへのユーザ追加
# smbldap-groupadd GroupID
# smbldap-groupmod -m UserID GroupID
# getent group GroupID
GroupID:x:1000:UserID
グループからユーザを削除
# smbldap-groupmod -x UserID GroupID
# getent group GroupID
GroupID:x:1000:
グループを削除
# smbldap-groupdel GroupID


smb.conf の変更

# vi /etc/samba/smb.conf

[global] dos charset = CP932 unix charset = EUCJP-MS display charset = EUCJP-MS workgroup = SambaDomain netbios name = SambaServer server string = Samba Server interfaces = eth0 passdb backend = ldapsam:ldap://localhost guest account = guest max log size = 500 domain logons = Yes os level = 33 preferred master = Yes domain master = Yes dns proxy = No wins support = Yes ldap admin dn = cn=manager,dc=solar ldap group suffix = ou=Groups ldap machine suffix = ou=Computers ldap passwd sync = Yes ldap suffix = dc=solar ldap ssl = no ldap user suffix = ou=Users admin users = Administrator [homes] comment = Home Directories read only = No browseable = No [Profiles] path = /home/profiles writeable = Yes browseable = No create mode = 0600 directory mode = 0700 guest ok = yes
PDC で動作するときの移動プロファイル格納ディレクトリを作成
各々のプロファイルディレクトリは勝手に随時作成されます。
# mkdir -p /home/profiles
# chmod 1777 /home/profiles

SAMBA が LDAP サーバに管理者 (cn=manager,dc=solar) として
アクセスするためのパスワード "secret" を /etc/samba/secrets.tdb に設定
smbpasswd は /etc/samba/smb.conf の ldap admin dn = cn=manager,dc=solar を
参照するので、smb.conf を変更したら smbpasswd -w secret を実行する
# /usr/bin/smbpasswd -w secret

SAMBA の起動条件の変更
# vi /etc/rc.d/init.d/smb
# chkconfig: 345 91 35
# chkconfig --add smb

SAMBA の起動
# /etc/rc.d/init.d/smb start


SWAT の起動 (xinetd の設定を変更)

# vi /etc/xinetd.d/swat

# default: off # description: SWAT is the Samba Web Admin Tool. Use swat \ # to configure your Samba server. To use SWAT, \ # connect to port 901 with your favorite web browser. service swat { port = 901 socket_type = stream wait = no only_from = 127.0.0.1 user = root server = /usr/sbin/swat log_on_failure += USERID disable = no }
# /etc/rc.d/init.d/xinetd restart