Samba+OpenLDAPでファイルサーバ

Samba+OpenLDAPでのファイル共有サーバの作成方法です。

今回は、ドメインサーバとしての設定は行っていませんが、ドメインサーバとしての設定例(smb.conf)は、最後に記載致します。

なお、検証環境は、CentOS-5です。

 

 

Sambaとsmbldap-toolsのインストール

Samba用LDAPデータ編集支援ツールの、smbldap-toolsをインストールします。

smbldap-toolsは非常に依存パッケージが多い上に、CentOSでは標準での提供がされていないため、今回はDagリポジトリを利用します。

 

Dagリポジトリの追加

Dagリポジトリを追加は、以下のコマンド行います。

i386 ( 32bit )

rpm -Uvh http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm

x86_64 ( 64bit )

rpm -Uvh http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm

 

以下のコマンドで読み込みます。

yum update

 

インストール

次に、Samba本体とsmbldap-toolsをインストールします。

yum install samba smbldap-tools

 

sambaとsmblda-toolsの依存パッケージ

openldap-clients <---(CentOS-5)
samba-common <---(CentOS-5)
perl-libwww-perl <---(CentOS-5)
perl-LDAP <---(CentOS-5)
perl-Crypt-PasswdMD5 <---(dag)
perl-Digest-SHA1 <---(dag)
perl-Compress-Raw-Bzip2 <---(dag)
perl-Compress-Raw-Zlib <---(dag)
perl-Convert-ASN1 <---(dag)
perl-Crypt-SmbHash <---(dag)
perl-HTML-Parser <---(dag)
perl-HTML-Tagset <---(dag)
perl-IO-Compress <---(dag)
perl-IO-Socket-SSL <---(dag)
perl-Jcode <---(dag)
perl-Net-SSLeay <---(dag)
perl-URI <---(dag)
perl-Unicode-Map <---(dag)
perl-Unicode-Map8 <---(dag)
perl-Unicode-MapUTF8 <---(dag)
perl-Unicode-String <---(dag)
perl-XML-NamespaceSuppo <---(dag)
perl-XML-SAX <---(dag)

 

 

OpenLDAPの設定

OpenLDAPの導入や基本設定は完了している物として進みます。

まだの方は、こちらを参照ください。

 

samba.schemaを利用可能にする

samba.schemaは、/usr/share/doc/samba-3.0.33/LDAP/以下にあります。

smaba.schemaをOpenLDAPのschemaディレクトリにコピーします。

cp /usr/share/doc/samba-3.0.33/LDAP/samba.schema /etc/openldap/schema/

 

次に、OpenLDAPで利用出来るように、includeします。

/etc/openldap/slapd.conf

include	/etc/openldap/schema/samba.schema

 

アクセス制限の設定

OpenLDAPでSamba用のアクセス制限を行います。ここでは、以下のルールで設定します。

・LDAP管理者はパスワードの参照、変更が可能

・認証済みユーザは、自身のパスワードが参照可能

・認証済みユーザは、自身のデータが参照、変更可能

・その他ユーザは、パスワード以外のデータが参照可能

slapd.conf

access to attrs=SambaLMPassword
        by self write
        by anonymous auth
        by * none

access to attrs=SambaNTPassword
        by self write
        by anonymous auth
        by * none

access to attrs=userPassword
        by self write
        by anonymous auth
        by * none

access to *
	by self write
	by * read

 

アクセス制限の設定が終了したら、OpenLDAPを再起動します。

/etc/init.d/ldap restart

 

 

nscdの利用

nscdとは、ネームキャッシュデーモンで、/etc.nsswitch.confに記載してある物をキャッシュする事により効率化を測ります。

nscdは起動しておくだけで非常に大きな効果があります。

nscdはインストールされていると思いますので、起動設定だけご紹介します。

/etc/init.d/nscd start
chkconifg nscd on

nscdでキャッシュする内容を調整したい場合は、/etc/nscd.confで調整してください。

 

 

LinuxのPAM設定

LinuxのPAM認証をOpenLDAPに変更します。

authconfig-tuiコマンドを実行し、「Use LDAP」と「Use LDAP Authentication」を選択後、接続先サーバと接続dnを設定します。

ただ、authconfig-tuiコマンドで編集された/etc/pam.d/system-authには欠点があるため、追加の変更を行います。

これは、そのままの設定では、認証実行時にOpenLDAPが何らかの障害で応答しない場合、応答を待ち続け全ての認証作業が行われないための処置です。

以下の行に、authinfo_unavail=ignoreを追加し、応答が無い時は/etc/shadowによるローカル認証をするようにしてします。

/etc/pam.d/system-auth

account	[default=bad success=ok user_unknown=ignore authinfo_unavail=ignore] pam_ldap.so

 

また、参照先のLDAPサーバは2台ある場合は、/etc/ldap.conf/etc/openldap/ldap.confでの指定は、それぞれ以下のようになります。

/etc/ldap.conf

uri ldap://192.168.1.1/ ldap://192.168.1.2/

/etc/openldap/ldap.conf

URI ldap://192.168.1.1/ ldap://192.168.1.2/

 

 

smbldap-toolsの設定

smbldap-toolsの設定ファイルは、/etc/smbldap-tools/以下にあります。

この中の、smbldap_bind.confsmbldap.confを設定していきます。

 

smbldap_bind.confでOpenLDAPへの接続設定

smbldap_bind.conf

slaveDN="cn=Manager,dc=unixlife,dc=local"
slavePw="secret"
masterDN="cn=Manager,dc=unixlife,dc=local"
masterPw="secret"

 

smbldap.confの設定でsmbldap-toolsの動作を設定

smbldap.confでOpenLDAPへのデータ作成などの定義を設定しますが、SID値が必要になりますので、先に求めておきます。

SID値を求めるには、一旦Sambaを起動してから以下のコマンドで取得します。

net getlocalsid

ここで求められた値は後ほど利用します。

 

ここでは、OpenLDAPに作成するSamba用データは、dc=unixlife,dc=local以下とします。

また、パスワードのハッシュ形式には、MD5を利用します。

smbldap.conf

# General Configuration
SID="S-1-5-21-2252255531-4061614174-2474224977"
sambaDomain="UNIXLIFE"

# LDAP Configuration

# Slave LDAP server
slaveLDAP="192.168.1.2"
# Slave LDAP port
slavePort="389"

# Master LDAP server: needed for write operations
masterLDAP="192.168.1.1"
# Master LDAP port
masterPort="389"

# Use TLS for LDAP
ldapTLS="0"

# LDAP Suffix
suffix="dc=unixlife,dc=local"

# Unix password encryption
hash_encrypt="MD5"

 

 

Sambaの設定

ここでは、Sambaに必要最低限の設定をし、OpenLDAPをバックエンドDBとする為の設定をします。

smb.conf

[global]
	unix charset =	UTF-8
	display charset = UTF-8
	dos charset = CP932
	unix extensions = no

	netbios name = FILE
	workgroup = UNIXLIFE

	#LDAP Setting
	LDAPサーバが1台の場合
	passdb backend = ldapsam:ldap://192.168.1.1
	LDAPサーバが2台の場合
	passdb backend = ldapsam:"ldap://192.168.1.1 ldap://192.168.1.2"
	ldap suffix = dc=unixlife,dc=local
	ldap user suffix = ou=Users
	ldap group suffix = ou=Groups
	ldap machine suffix = ou=Computers
	ldap admin dn = cn=Manager,dc=unixlife,dc=local
	ldap passwd sync = yes
	ldap ssl = no

	admin users = Administrator
	guest account = guest

	#Access Setting
	hosts allow = 127.0.0.1 192.168.1.0/24

[homes]
	comment = %U's Home Directoris
	read only = no
	browseable = no

 

Sambaの準備ができたら起動します。

/etc/init.d/smb start

 

次に、SambaからOpenLDAPに接続出来るようにLDAP管理者のパスワードをsecrets.dbに以下のコマンドで保存します。

smbpasswd -w [rootdnのパスワード]

 

 

Samba用初期データの登録

smbldap-populateコマンドでOpenLDAPにSamba用の初期エントリを作成します。

smbldap-populate -a Administrator -b guest

 

以下が、smbldap-populateの実行結果です。

Populating LDAP directory for domain UNIXLIFE (S-1-5-21-2252255531-4061614174-2474224977)
(using builtin directory structure)

entry dc=unixlife,dc=local already exist.
adding new entry: ou=Users,dc=unixlife,dc=local
adding new entry: ou=Groups,dc=unixlife,dc=local
adding new entry: ou=Computers,dc=unixlife,dc=local
adding new entry: ou=Idmap,dc=unixlife,dc=local
adding new entry: uid=Administrator,ou=Users,dc=unixlife,dc=local
adding new entry: uid=guest,ou=Users,dc=unixlife,dc=local
adding new entry: cn=Domain Admins,ou=Groups,dc=unixlife,dc=local
adding new entry: cn=Domain Users,ou=Groups,dc=unixlife,dc=local
adding new entry: cn=Domain Guests,ou=Groups,dc=unixlife,dc=local
adding new entry: cn=Domain Computers,ou=Groups,dc=unixlife,dc=local
adding new entry: cn=Administrators,ou=Groups,dc=unixlife,dc=local
adding new entry: cn=Account Operators,ou=Groups,dc=unixlife,dc=local
adding new entry: cn=Print Operators,ou=Groups,dc=unixlife,dc=local
adding new entry: cn=Backup Operators,ou=Gropps,dc=unixlife,dc=local
adding new entry: cn=Replicators,ou=Groups,dc=unixlife,dc=local
adding new entry: sambaDomainName=UNIXLIFE,dc=unixlife,dc=local

 

 

smbldap-toolsでのユーザとグループ管理

ここでは、smbldap-toolsで提供されているコマンド一覧と、使用例について記載します。

 

コマンド一覧

smbldap-groupadd <---グループの追加
smbldap-groupmod <---グループ情報の変更
smbldap-groupdel <---グループの削除
smbldap-groupshow <---グループ情報の表示

smbldap-useradd <---ユーザの追加
smbldap-usermod <---ユーザ情報の変更
smbldap-userdel <---ユーザの削除
smbldap-passwd <---ユーザパスワードの設定/変更
smbldap-userinfo <---ユーザ情報の対話的な変更
smbldap-usershow <---ユーザ情報の表示
smbldap-userlist <---ユーザリストの表示

 

smbldap-toolsコマンドでのデータ操作例

ユーザ追加

[ファイルサーバのみを利用するユーザ]

smbldap-useradd -a -m -d /home/UserName -s /sbin/nologin UserName

[ファイルサーバとシェルログインを利用するユーザ]

smbldap-useradd -a -m -d /home/UserName -s /bin/bash UserName

 

ユーザパスワードの設定/変更

smaldap-passwd UserName

 

ユーザ削除

ユーザのファイルは残す

smbldap-userdel UserName

ユーザのファイルも削除する

smbldap-userdel -R UserName

 

グループの追加

smbldap-gorupadd GroupName

 

グループの削除

smldap-gorupdel GroupName

 

 

ドメインサーバとしての設定例

smb.conf

[global]
	unix charset =	UTF-8
	display charset = UTF-8
	dos charset = CP932

	netbios name = FILE
	workgroup = UNIXLIFE

	#PDC Setting
	security = user
	domain logons = yes
	domain master = yes
	preferred master = yes
	local master = yes
	os level = 64
	logon path =
	logon home =

	# Winbind Settingd
	idmap uid = 10000-20000
	idmap gid = 10000-20000
	template homedir = /home/%U
	template shell = /sbin/nologin
	winbind cache time = 300
	winbind use default domain = yes
	winbind enable local accounts = yes
	winbind nested groups = no

	#LDAP Setting
	LDAPサーバが1台の場合
	passdb backend = ldapsam:ldap://192.168.1.1
	LDAPサーバが2台の場合
	passdb backend = ldapsam:"ldap://192.168.1.1 ldap://192.168.1.2"
	ldap suffix = dc=unixlife,dc=local
	ldap user suffix = ou=Users
	ldap group suffix = ou=Groups
	ldap machine suffix = ou=Computers
	ldap admin dn = cn=Manager,dc=unixlife,dc=local
	ldap passwd sync = yes
	ldap ssl = no

	admin users = Administrator
	guest account = guest

	# Access Setting
	hosts allow = 127.0.0.1 192.168.1.0/24

[homes]
	comment = %U's Home Directoris
	read only = no
	browseable = no

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img localsrc="" alt="">