Samba PDC (squeeze)の構築手順
ドメイン編
Windowsマシンのドメイン参加
Windows 7(レジストリ変更済)Professional や Windows XP Professional などのWindowsマシンがドメインに参加できることを確認する。
関連パラメータなど
- workgroup = SAMBADOM
- domain logons = yes
- LDAP関連パラメータ
確認手順
- ドメインに参加させるWindowsマシンがWindows 7もしくはWindows Server 2008 R2以降の場合は、Windows 7からSambaドメインにログオンできない に従い、レジストリを変更する
- ドメインに参加させるWindowsマシンがWindows Server 2008の場合は、……
- SambaサーバとWindowsマシンが同一IPサブネットに存在していない場合は、WINSやLMHOSTSファイルを設定してNetBIOS名の名前解決を適切に行う
- NTドメインへの参加と同様にして、Sambaドメインに参加する。ドメイン参加の際のユーザ名とパスワードは、おのおのadministratorとsambaを用いる。
- 再起動後、以下のユーザでSAMBADOMドメインにログオン可能なことを確認する
- administratorユーザ、パスワードは「samba」
- ldap01ユーザ、パスワードは「ldap01」
- 注意:ldap01ユーザは一般ユーザのため、サーバOSの場合は、事前に該当ユーザにローカルログオン権限を付与しておく必要がある
GUIツールからのアクセス
WindowsマシンからGUI管理ツールでアクセスできることを確認する。
関連パラメータなど
- LDAP関連パラメータ
確認手順
- NT Workstation 4.0 用の Windows NT サーバー ツール より、あらかじめ管理ツール(srvtools.exe)を入手の上、適宜展開しておく。MS-DOS 形式の自己展開ファイルとなっているが、ファイルの拡張子を zip に変更することで、普通の zip 形式の圧縮ファイルとして扱うことも可能。
- 管理ツールは Windows XP もしくは Windows Server 2003 R2 以前のプラットフォームでしか起動しないので、当該プラットフォームの Windows マシンを用意し、ドメインに参加させる。
- administrator など、ドメインの管理者権限のあるユーザで用意した Windows マシンからログオンし、展開した管理ツール内にある usrmgr.exe を起動する。
- administrator をクリックし、各画面で詳細情報が表示されることを確認する。
ユーザの追加、削除
WindowsマシンからGUI管理ツールからユーザの追加、削除を行えることを確認する。
関連パラメータなど
- LDAP関連パラメータ
確認手順
- usrmgr.exe から「User」-「New User」とたどり、表示された画面でUsername欄に任意のユーザ名を指定する。
- 「Add」を押す。
- 「Close」を押し、改めて usrmgr.exe の画面を確認し、追加したユーザが一覧に表示されていることを確認する。
- 該当ユーザを選択し、DEL キーを押す。
- 警告画面で「OK」を押す。最終確認画面でも「はい」を押す。
- 改めて usrmgr.exe の画面を確認し、削除したユーザが一覧に表示されていないことを確認する。
ファイルサーバ編
ユーザ名のマッピング
任意のユーザ名と Samba ユーザとのマッピングができることを確認する。
関連パラメータなど
- username map = /etc/samba/smbusers
- /etc/samba/smbusers ファイル
確認手順
- Windows マシンから、以下のユーザ名でログオンする(パスワードはldap01)
- LDAP01 user
- 00000001
- LDAPユーザー 01
- いずれの場合も ldap01 としてログオンしていることを確認する
- たとえば、コマンドプロンプトから net use コマンドを実行すると、ホームディレクトリが \\sambapdc\ldap01 になっていることがわかる。
応用
/etc/samba/smbusers ファイルを編集することで、上記以外のマッピングも行えることを確認する。
ホームディレクトリの自動作成
新規ユーザーのログオン時にホームディレクトリが自動的に作成されることを確認する。
関連パラメータなど
- root preexec = /usr/local/sbin/createhomedir %D %S
- 本来であれば、上記設定を行わずとも、PAM の設定によりホームディレクトリが自動作成されるはずだが、今回の環境で検証した限り、自動作成がうまくいかなかったため、暫定的に root preexec パラメータを用いて自動作成を行っている。
- logon home =
- (logon drive)
確認手順
- たとえば以下のようにして、 testuser という名前で、新規ユーザを作成する
# pdbedit -a testuser
GUIから作成しても構わない。
- たとえば以下のようにして、ホームディレクトリは /home/SAMBADOM/testuser に設定し、H: ドライブにマウントするように設定する
# pdbedit -h \\\\sambapdc\\testuser -D h: testuser
GUIから設定しても構わない。
- ls -l /home/SAMBADOM を実行し、以下のように testuser ディレクトリが存在しないことを確認する
root@sambapdc:/home/SAMBADOM# ls -l total 8 drwx------ 2 ldap01 domusers 4096 Jul 8 21:21 ldap01 drwx------ 2 ldap02 domusers 4096 Jul 8 21:24 ldap02
- Windows マシンから testuser でログオンする
- 再び ls -l /home/SAMBADOM を実行し、以下のように testuser ディレクトリが作成されていることを確認する
root@sambapdc:/home/SAMBADOM# ls -l total 12 drwx------ 2 ldap01 domusers 4096 Jul 8 21:21 ldap01 drwx------ 2 ldap02 domusers 4096 Jul 8 21:24 ldap02 drwx------ 2 testuser domusers 4096 Aug 6 19:31 testuser
基本的な設定
- eth1 用の設定を追加(オプション)
- 仮想マシンのイメージを他で転用すると、仮想マシン起動時に「Create new identity」といったメッセージが表示される。ここで Yes を選択した場合は MAC アドレスが変更されるため、 OS から認識されるインタフェース名も eth0 ではなく eth1 や eth2 などになる。そのための設定
- /etc/network/interfaces に以下を追加(eth1の場合)
allow-hotplug eth1 iface eth1 inet dhcp
- APT コマンドの設定とパッケージの更新
- /etc/apt/sources.list の内容を以下に変更
deb http://ftp.jp.debian.org/debian etch main deb http://security.debian.org/ etch/updates main
- ディスク容量節約のため、main しか設定していないので注意。必要に応じて contrib や non-free も設定すること。
- /tmp を tmpfs にする(オプション→設定済)
- /etc/fstab に以下の設定を追加
/dev/shm /tmp tmpfs defaults 0 0
- これは、今後のインストール作業に際して、可能な限りディスク領域を消費しないためのもので、必須ではない。
- /var/cache/apt を tmpfs にする(オプション→設定済)
- /etc/fstab に以下の設定を追加
/dev/shm /var/cache/apt tmpfs defaults 0 0
- これは、今後のインストール作業に際して、可能な限りディスク領域を消費しないためのもので、必須ではない。
- 設定を行った場合は、一度再起動するか、以下のように mount コマンドで上記設定を有効にする
# mount /tmp # mount /var/cache/apt
- ftp のインストール(オプション→設定済)
- ファイルの受渡し用であり、動作上は不要
# apt-get install ftp # apt-get clean
- ssh のインストール(オプション)
# apt-get install ssh # apt-get clean
- SSH クライアントも併せてインストールされる。
- lv(ページャ)のインストール(オプション)
# apt-get install lv
- ACLおよび拡張属性関連のパッケージインストール
# apt-get install attr acl
- /etc/fstab で acl,user_xattr をマウントオプションに追加
- errors=remount-ro を defaults,acl,user_xattr,errors=remount-ro
に変更する。
Samba + LDAP 環境の設定
パッケージのインストールと基本設定
libnss-ldap / libpam-ldap のインストールと設定
apt-get install libnss-ldap libpam-ldap
- libnss-ldap の設定
- URL は ldapi:///
- DN は、dc=sambadom,dc=local
- LDAPのバージョンは3
- LDAP account for root は cn=admin,dc=sambadom,dc=local
- パスワードは ldap
- libpam-ldap の設定
- Allow LDAP admin account ... は <Yes>
:Does the LDAP database require login? は <No>
- LDAP account for root は cn=admin,dc=sambadom,dc=local
- パスワードは ldap
- /etc/nsswitch.conf ファイルに LDAP キーワードを追加
--- nsswitch.conf.org 2009-09-10 03:02:29.000000000 +0900 +++ nsswitch.conf 2009-09-07 22:10:09.000000000 +0900 @@ -4,9 +4,9 @@ # If you have the `glibc-doc-reference' and `info' packages installed, try: # `info libc "Name Service Switch"' for information about this file. -passwd: compat -group: compat +passwd: compat ldap +group: compat ldap shadow: compat hosts: files dns networks: files
Samba / OpenLDAP のインストール
- slapd パッケージのインストール
# apt-get install slapd ldap-utils
- Admin password には ldap を指定する。
ldap-utils パッケージは管理用。動作上は不要だが、以降の説明ではインス トールされていることを前提とする。
- Samba 関連パッケージのインストール
# apt-get install samba winbind smbclient
- workgroup/domain name に SAMBADOM を指定
smbclient パッケージは管理およびテスト用。動作上は不要。
- pam_smbpass パッケージのインストール
# apt-get install libpam-smbpass
- nscd を削除
- nscd が動作していると、ユーザやグループの追加、削除が(少なくとも即時には)反映されないというトラブルが発生することがあり、動作検証を行う上では面倒なため、ここでは削除している。
# apt-get remove nscd
PAM の手動設定
Squeeze において、PAM関連ファイルは、pam-auth-update コマンドが内部 的に実行されて自動で設定されるため、基本的に修正は不要。
ただし、残念ながら、以下の設定を手動で設定を行う必要がある
- /etc/pam.d/common-password
pam_winbind.so 行をコメントアウト
- /etc/pam.d/common-session
pam_winbind.so 行に mkhomedir オプションを追加
crackcheck コマンドのインストール
- cracklib パッケージのインストール
- apt-get install libcrack2
- crackcheck コマンドが使用する。
開発環境のあるマシン上で以下を実施
# apt-get install cracklib2-dev
# apt-get install samba-doc # cd /usr/share/doc/samba-doc/examples/auth/crackcheck # make # strip crackcheck
生成された crackcheck バイナリを、今回構築するマシンの /usr/local/sbin/crackcheck にインストール。
mgrshare スクリプトを作成の上、以下を実施( mgrshare は sambapdc4.tar.gz 内にあります)
# mv mgrshare /usr/local/sbin/mgrshare # chmod +x /usr/local/sbin/mgrshare
smbchsh のインストール
一般ユーザがシェルを変更できるように以下のスクリプトを /usr/local/bin/smbchsh としてインストール
#!/bin/sh SHELL=$1 echo "dn: uid=${USER},ou=users,dc=samba,dc=local changetype: modify replace: loginShell loginShell: $1 " | ldapmodify -x -D "uid=${USER},ou=users,dc=samba,dc=local" -W
=== remove-old-files-in-recycle-bin
ごみ箱内の古いファイルを削除するスクリプト例 /usr/local/sbin/remove-old-files-in-recycle-bin としてインストール
#!/bin/sh trashdir=.recycle rootdir=/var/lib/samba/shares olddays=14 cd ${rootdir} for targetdir in *; do if [ -d ${targetdir}/${trashdir} ]; then cd ${targetdir}/${trashdir} find . -atime +${olddays} -exec rm {} \; fi done
ホームディレクトリの作成
# mkdir /home/SAMBADOM
smbusers ファイルの作成
# touch /etc/samba/smbusers
リモートログイン用アカウントの作成(オプション)
# groupadd -g 999 local # useradd -u 999 -g 999 -m local # passwd local
- パスワードは「local」に設定。
Samba + LDAP 環境の設定
LDAP の設定
Squeeze からは、設定を LDAP 中に保持する設定となっているため、注意が必要。
- Samba スキーマファイルをインストール
- ここでは、スキーマファイルの抽出後に不要となった samba-doc パッケージを削除している
# apt-get install samba-doc # apt-get clean
# zcat /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz > /etc/ldap/schema/samba.schema
# apt-get remove samba-doc # apt-get clean
- Samba 用スキーマの LDIF ファイル作成
# cd /tmp # ln -s /etc/ldap/schema . # mkdir dummy_slapd.d
- 以下の内容で /tmp/dummy_slapd.conf ファイルを作成
include schema/core.schema" include schema/cosine.schema" include schema/inetorgperson.schema" include schema/nis.schema" include schema/samba.schema
# slaptest -f dummy_slapd.conf -F dummy_slapd.d config file testing succeeded
- 上記の例では、dummy_slapd.d/cn=config/cn=schema 以下にある cn={4}samba.ldif を samba.ldif にリネームの上、以下の修正を行い、LDIF ファイルを作成する
- 変更前: samba.ldifの先頭3行
dn: cn={4}samba objectClass: olcSchemaConfig cn: {4}samba
- 変更後: samba.ldifの先頭3行
dn: cn=samba,cn=schema,cn=config objectClass: olcSchemaConfig cn: samba
変更前: samba.ldifの最後7行
structuralObjectClass: olcSchemaConfig entryUUID: a671adca-3aa0-1030-8ae6-516ef773ec5f creatorsName: cn=config createTimestamp: 20110704154721Z entryCSN: 20110704154721.872107Z#000000#000#000000 modifiersName: cn=config modifyTimestamp: 20110704154721Z
変更後: (削除)
- 最後に、samba.ldif を登録する
# ldapadd -Y EXTERNAL -H ldapi:/// -f samba.ldif adding new entry "cn=samba,cn=schema,cn=config"
- 初期設定
- 以下の LDIF ファイルを sambadom.ldif というファイル名で作成
dn: olcDatabase={1}hdb,cn=config changetype:modify add: olcDbIndex olcDbIndex: uidNumber,gidNumber,uid,sambaSID,cn,memberuid eq - add: olcAccess olcAccess: to attrs=loginShell by dn="cn=admin,dc=samba,dc=local" write by self write by * read olcAccess: to attrs=sambaNTPassword,sambaLMPassword,sambaPwdLastSet,sambaPwdMustChange by dn="cn=admin,dc=samba,dc=local" write by self write by * none
# ldapadd -Y EXTERNAL -H ldapi:/// -f sambadom.ldif adding new entry "olcDatabase={1}hdb,cn=config"
初期スキーマの作成
- sambadom.local.ldif ファイルの作成
dn: ou=users,dc=sambadom,dc=local objectClass: top objectClass: organizationalUnit ou: users dn: ou=groups,dc=sambadom,dc=local objectClass: top objectClass: organizationalUnit ou: groups dn: ou=idmap,dc=sambadom,dc=local objectClass: top objectClass: organizationalUnit ou: idmap dn: ou=computers,dc=sambadom,dc=local objectClass: top objectClass: organizationalUnit ou: computers
- ldapadd コマンドで上記 LDIF ファイルの内容を登録
# cat sambadom.local.ldif | ldapadd -D cn=admin,dc=sambadom,dc=local -W -x -H ldapi:/// Enter LDAP Password: adding new entry "ou=users,dc=samba,dc=local" adding new entry "ou=groups,dc=samba,dc=local" ...
Samba の設定
- Samba の停止
# /etc/init.d/samba stop # /etc/init.d/winbind stop
- smb.conf のインストール
smb.conf ファイルを /etc/samba/smb.conf に作成( smb.conf は sambapdc4.tar.gz 内にあります)の上、以下を実施
# mv /etc/samba/smb.conf /etc/samba/smb.conf.org # mv smb.conf /etc/samba/smb.conf
- smbusers ファイルのインストール
smbusers ファイルを /etc/samba/smbusers として作成 ldap01 =
- LDAP パスワードの格納
# smbpasswd -w ldap Setting stored password for "cn=admin,dc=sambadom,dc=local" in secrets.tdb
- Samba の基本ユーザ情報を LDAP に格納
net sam provision コマンドを実行する前に、あらかじめ winbindd (のみ) を起動しておく必要がある。
# /etc/init.d/winbind start Starting the Winbind daemon: winbind. # net sam provision Checking for Domain Users group. Adding the Domain Users group. Checking for Domain Admins group. Adding the Domain Admins group. Check for Administrator account. Adding the Administrator user. Checking for Guest user. Adding the Guest user. Checking Guest's group. Adding the Domain Guests group.
- Administrator アカウントの初期設定
- パスワードを「samba」に設定
# smbpasswd Administrator New SMB password: Retype new SMB password:
- Samba の起動
ホームディレクトリ自動作成の設定
- /usr/local/sbin/createhomedir として以下の内容のファイルを作成
- なぜか PAM によるホームディレクトリ自動作成が Samba 経由だとうまく動作しないため
#!/bin/bash homedir=/home/$1/$2 if [ ! -d $homedir ]; then mkdir $homedir chmod 700 $homedir chown $2:domusers $homedir fi exit 0
syslog の設定
- 以下の内容で /etc/rsyslog.d/samba.conf ファイルを作成
local1.* -/var/log/samba/log.audit
- さらに
# touch /var/log/samba/log.audit # /etc/init.d/rsyslog restart
- /etc/logrotate.d/samba-syslog として以下の内容のファイルを作成
/var/log/samba/log.audit { rotate 4 weekly missingok notifempty compress delaycompress sharedscripts postrotate invoke-rc.d rsyslog reload > /dev/null endscript }
Samba ドメインで使用する共有の作成
# mkdir /var/lib/samba/shares # cd /var/lib/samba/shares
- NETLOGON 共有
# mkdir /var/lib/samba/shares/netlogon
# mkdir /var/lib/samba/shares/printers # chmod 775 domadmins # chgrp domadmins printers
- profiles 共有
# mkdir /var/lib/samba/shares/profiles # chmod 1777 /var/lib/samba/shares/profiles
- shared 共有
- Domain Usersグループに所属するユーザであれば、誰でも読み書き可能な共有ディレクトリ
# mkdir /var/lib/samba/shares/shared # chgrp domusers shared # chmod g+ws shared
- aclshare1 共有
- あらかじめ aclshare1ro および aclshare1rw グループを作成の上、GID を確認しておく
# net sam createlocalgroup aclshare1ro Created local group aclshare1ro with RID 1001 # net sam createlocalgroup aclshare1rw Created local group aclshare1rw with RID 1002
# net groupmap list ntgroup=aclshare1ro aclshare1ro (S-1-5-21-3643489711-3443204727-2039806625-1001) -> 10011 # net groupmap list ntgroup=aclshare1rw aclshare1rw (S-1-5-21-3643489711-3443204727-2039806625-1002) -> 10012
# mkdir /var/lib/samba/shared/aclshare1 # chown root:root aclshare1 # chmod 770 aclshare1 # setfacl -m group:10011:r-x aclshare1 # setfacl -m group:10012:rwx aclshare1 # setfacl -d -m group:10011:r-x aclshare1 # setfacl -d -m group:10012:rwx aclshare1
- aclshare2 共有
- あらかじめ aclshare2ro および aclshare2rw グループを作成の上、GID を確認しておく
# net sam createlocalgroup aclshare2ro Created local group aclshare1ro with RID 1003 # net sam createlocalgroup aclshare2rw Created local group aclshare1rw with RID 1004
# net groupmap list ntgroup=aclshare1ro aclshare1ro (S-1-5-21-3643489711-3443204727-2039806625-1003) -> 10013 # net groupmap list ntgroup=aclshare1rw aclshare1rw (S-1-5-21-3643489711-3443204727-2039806625-1004) -> 10014
# mkdir /var/lib/samba/shared/aclshare1 # chown root:root aclshare1 # chmod 770 aclshare1 # setfacl -m group:10014:rwx aclshare2 # setfacl -m group:10013:r-x aclshare2 # setfacl -d -m group:10014:rwx aclshare2 # setfacl -d -m group:10013:r-x aclshare2
- share_test 共有
# mkdir /var/lib/samba/shares/share_test # chmod 1777 share_test
# mkdir share_test/hide_unreadable # cd share_test/hide_unreadable # touch normal.txt # touch secure.txt # chmod 600 secure.txt
# mkdir share_test/veto_files # cd share_test/veto_files # touch dummy.exe # mkdir GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}
- var-check スクリプトのインストール
- share_test 共有の root preexec 行と連動して動作し、現在設定されている
Samba 変数の内容を表示させるためのスクリプト。 /usr/local/sbin/var-check としてインストール。
#!/bin/sh VARLIST='%U %G %h %L %m %M %R %d %a %I %i %T %D %w %v %V %S %P %u %g %H %N %p e1 e2' rm /tmp/var.txt for var in $VARLIST; do echo "$var : $1" >> /tmp/var.txt shift done
試験用ユーザを作成
- ldap01 / ldap02 / ldap03 ユーザを作成
- ldap01 / ldap02 ユーザは aclshare1rw および aclshare2rw グループに所属
- ldap03 ユーザは aclshare1ro および aclshare2ro グループに所属
- ホームディレクトリ \\sambapdc\ユーザ名 を H: にマウント
- ユーザ名「LDAP User nn」
- パスワードを無期限にする
- 以下 ldap01 ユーザーの場合の実行例
# smbpasswd -a ldap01 # pdbedit -c "[X]" -f "LDAP01 user" -h '\\sambapdc\ldap01' -D h: ldap01
# net sam addmem aclshare1rw ldap01 Added SAMBADOM\ldap01 to SAMBADOM\aclshare1rw # net sam addmem aclshare2rw ldap01 Added SAMBADOM\ldap01 to SAMBADOM\aclshare2rw
SWAT のインストール(オプション)
- SWAT のインストール
# apt-get install swat
- /etc/hosts.allow ファイルに以下を設定
- アクセスをローカルサブネットに制限する
ALL: LOCAL
最後に
- WINS データベースの初期化
/var/lib/samba 以下の wins.dat と wins.tdb を削除する
- VMware ログファイルの削除
動作確認
Windows XP Professional SP3 から Samba ドメインに参加
- ドメインに参加
- Administrator としてログオン
動作確認
- 初期状態で
- ssh をインストールした上で、ldap01 として ssh でリモートマシンからログインが成功する。その際、ホームディレクトリが自動で作成される
- smbchsh コマンドによりシェルを変更できる
ldap01@sambapdc:~$ /usr/local/bin/smbchsh /bin/sh Enter LDAP Password: modifying entry "uid=ldap01,ou=users,dc=samba,dc=local" ldap01@sambapdc:~$ getent passwd ldap01 ldap01:*:10002:10000:ldap01:/home/SAMBADOM/ldap01:/bin/sh
- ldap01 として Windows XP Professional にログオンできる (パスワード ldap01)
- smbpasswd コマンドによりパスワードを変更できる
- その際、crackcheck コマンドにより、簡単なパスワードは設定できない
- ldap01 として NTWS40 にログオンできる (パスワードは変更後)
- ldap01 として ログインが成功する(パスワードは変更後)
- passwd コマンドによりパスワードを変更できる
- 変更後のパスワードでコンソールログインと smbclient によるアクセスが成功する
- ldap01 として Windows XP Professinal にログオンできる (パスワードは変更後)
- ldap01 として変更後のログインが成功する(パスワードは変更後)
- Windows XP Professional 以降で Ctrl+Alt+Del した画面のパスワードの変更、からパスワードが変更できる
- その際、crackcheck コマンドにより、簡単なパスワードは設定できない
- ldap01 として NTWS40 にログオンできる (パスワードは変更後)
- ldap01 として ssh でリモートマシンからログインが成功する(パスワードは変更後)
- Windows 2000 に Administrator としてログオンして、「コンピュータ管理」ツールから
- ファイル共有が作成できる
- 作成したファイル共有にアクセスできる
- ファイル共有が削除できる