SAMBA with LDAP (SAMBA の構築)
〜 SAMBA と LDAP で PDC (NT ドメイン)を構築 〜
2005-05-10 作成 福島


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