「Samba PDC (squeeze)の構築手順」の版間の差分

提供:Samba-JP
ナビゲーションに移動検索に移動
(必要なパッケージのインストール中)
 
(同じ利用者による、間の41版が非表示)
1行目: 1行目:
=Debian GNU/Linux リリース媒体の入手=
=Debian GNU/Linux リリース媒体の入手=
[http://www.debian.org/distrib/netinst#smallcd 小さなCD] にある 180MB 以下のイメージを入手。
[http://www.debian.org/distrib/netinst#smallcd 小さなCD] にある 180MB
以下のイメージを入手。


* debian-6.0.0-i386-netinst.iso を使用
* debian-6.0.0-i386-netinst.iso を使用
8行目: 9行目:
== 仮想マシン作成の手順 ==
== 仮想マシン作成の手順 ==


仮想マシン作成ウィザードで以下を指定 (VMware Workstation 7.1.1 日本語版環境で構築)
仮想マシン作成ウィザードで以下を指定 (VMware Workstation 7.1.1 日本語
版環境で構築)


* ''カスタム'' を選択
* ''カスタム'' を選択
15行目: 17行目:
* ゲストOSとして ''Linux''を選択
* ゲストOSとして ''Linux''を選択
* バージョンとして ''Debian 5'' を選択
* バージョンとして ''Debian 5'' を選択
* 仮想マシン名として ''sambapdc4'' を指定
* 仮想マシン名として ''sambapdc'' を指定
* プロセッサ数として ''1'' を指定
* プロセッサ数として ''1'' を指定
* メモリ容量を ''256MB'' に変更
* メモリ容量を ''256MB'' に変更
36行目: 38行目:
* 「Configure network」で以下を指定
* 「Configure network」で以下を指定
** ホスト名「sambapdc」
** ホスト名「sambapdc」
** ドメイン名「samba.local」
** ドメイン名「sambadom.local」
* 「Set up users and passwords」で以下を指定
* 「Set up users and passwords」で以下を指定
** 「Root password」に「samba」を指定
** 「Root password」に「samba」を指定
** ''「Set up users and passwords」の「Full name for new user」で「Debian installer main menu」になるまで、何度か「<Go back>」を選択''
** ''「Set up users and passwords」の「Full name for new user」で
* 「Debian installer main menu」になるまで、何度か「<Go back>」を選択''
: これを行わずに普通にインストールを続行すると、無用なパッケージがインストールされるので注意。
: これを行わずに普通にインストールを続行すると、無用なパッケージがイン
* ストールされるので注意。
* 「Partition disks」で以下を指定
* 「Partition disks」で以下を指定
** 「Guided - use entire disk(デフォルト)」を選択
** 「Guided - use entire disk(デフォルト)」を選択
** パーティション構成で「All files in one partition(デフォルト)」を選択
** パーティション構成で「All files in one partition(デフォルト)」を
* 選択
** 「Finish partitioning and write changes to disk」を押す
** 「Finish partitioning and write changes to disk」を押す
** 「Write changes to disks?」に <Yes>を選択
** 「Write changes to disks?」に <Yes>を選択
* ここで「Installing the base system」画面になり、基本的なパッケージがインストールされる
* ここで「Installing the base system」画面になり、基本的なパッケージが
* インストールされる
* 「Install the GRUB boot loader on a hard disk」を選択
* 「Install the GRUB boot loader on a hard disk」を選択
** Install the GRUB boot loader to the master boot record? に <yes> を選択
** Install the GRUB boot loader to the master boot record? に <yes> を
* 選択
* Installation complete で <Continue>
* Installation complete で <Continue>
: ここで再起動が行われる
: ここで再起動が行われる
62行目: 69行目:
* eth1 用の設定を追加(オプション)
* eth1 用の設定を追加(オプション)


: 仮想マシンのイメージを他で転用すると、仮想マシン起動時に「Create new identity」といったメッセージが表示される。ここで Yes を選択した場合は MACアドレスが変更されるため、 OS から認識されるインタフェース名も eth0 ではなく eth1 や eth2 などになる。そのための設定
: 仮想マシンのイメージを他で転用すると、仮想マシン起動時に「Create new identity」といったメッセージが表示される。ここで Yes を選択した場合は MAC アドレスが変更されるため、 OS から認識されるインタフェース名も eth0 ではなく eth1 や eth2 などになる。そのための設定


: /etc/network/interfaces に以下を追加(eth1の場合)
: /etc/network/interfaces に以下を追加(eth1の場合)

allow-hotplug eth1
allow-hotplug eth1
iface eth1 inet dhcp
iface eth1 inet dhcp
71行目: 77行目:
* APT コマンドの設定とパッケージの更新
* APT コマンドの設定とパッケージの更新


/etc/apt/sources.list の内容を以下に変更
: /etc/apt/sources.list の内容を以下に変更

<pre>
<pre>
deb http://ftp.jp.debian.org/debian etch main contrib
deb http://ftp.jp.debian.org/debian etch main
deb http://security.debian.org/ etch/updates main contrib
deb http://security.debian.org/ etch/updates main
</pre>
</pre>


: ディスク容量節約のため、'''main''' しか設定していないので注意。必要に応じて '''contrib''' や '''non-free''' も設定すること。
* NFS クライアントのインストール


* /tmp を tmpfs にする(オプション→設定済)
以下のコマンドを実行してNFSクライアントをインストールする
: /etc/fstab に以下の設定を追加
/dev/shm /tmp tmpfs defaults 0 0


: これは、今後のインストール作業に際して、可能な限りディスク領域を消費しないためのもので、必須ではない。
# apt-get update
# apt-get install nfs-common portmap
# apt-get clean


* /var/cache/apt を tmpfs にする(オプション→設定済)
これは、今後のインストール作業に際して、可能な限りリモートのディスクを利用するためのもので、インストール自体に必須ではない。
: /etc/fstab に以下の設定を追加
/dev/shm /var/cache/apt tmpfs defaults 0 0


: これは、今後のインストール作業に際して、可能な限りディスク領域を消費しないためのもので、必須ではない。
カーネルがバージョンアップされた場合は、一度再起動する


: 設定を行った場合は、一度再起動するか、以下のように mount コマンドで上記設定を有効にする
* リモートマシンの作業用ディスク領域のマウント
# mount /tmp
# mount 192.168.135.1:/export/var/cache/apt/archives /var/cache/apt/archives
# mount /var/cache/apt


* ftp のインストール(オプション→設定済)
ダウンロードしたdebファイルが置かれるディレクトリをマウントしておく
: ファイルの受渡し用であり、動作上は不要
# apt-get install ftp
# apt-get clean


* ssh のインストール(オプション)
* ssh のインストール(オプション)
# apt-get install ssh
# apt-get clean


: SSH クライアントも併せてインストールされる。
apt-get install ssh

SSH クライアントも併せてインストールされる。


* lv(ページャ)のインストール(オプション)
* lv(ページャ)のインストール(オプション)
# apt-get install lv


* ACLおよび拡張属性関連のパッケージインストール
apt-get install lv
# apt-get install attr acl

* ACLおよび拡張属性関連のパッケージインストールと設定

apt-get install attr acl


* /etc/fstab で acl,user_xattr をマウントオプションに追加
* /etc/fstab で acl,user_xattr をマウントオプションに追加


''errors=remount-ro'' を ''defaults,acl,user_xattr,errors=remount-ro'' に変更する。
: ''errors=remount-ro'' を ''defaults,acl,user_xattr,errors=remount-ro''
に変更する。

変更後再起動するか、remount オプションにより動的にマウントオプションを変更する。


=Debian GNU/Linux リリース媒体の入手=
[http://www.debian.org/distrib/netinst#smallcd 小さなCD] にある 180MB 以下のイメージを入手。

* debian-6.0.0-i386-netinst.iso を使用

= VMware 仮想マシンの作成 =

== 仮想マシン作成の手順 ==

仮想マシン作成ウィザードで以下を指定 (VMware Workstation 7.1.1 日本語版環境で構築)

* ''カスタム'' を選択
* ハードウェア互換性として ''Workstation 5'' を選択(なるべく多くのバージョンで動作するように)
** ''ESX Server'' はチェックしない
* ゲストOSとして ''Linux''を選択
* バージョンとして ''Debian 5'' を選択
* 仮想マシン名として ''sambapdc4'' を指定
* プロセッサ数として ''1'' を指定
* メモリ容量を ''256MB'' に変更
* ネットワーク接続を ''NAT を使用'' のまま
* I/O コントローラタイプは''LSI Logic'' のまま
* ''仮想ディスクの新規作成''を選択
* 仮想ディスクタイプとして ''SCSI'' を選択
* ディスクサイズほかは規定値のまま(8.0 GB / あらかじめ割り当てない / 仮想ディスクを単一ファイル)

== Squeeze インストール ==

=== インストーラでの設定 ===
インストーラで以下を指定

* 初期画面で「Install」を選択(Graphical Installではなく)
* 「Choose language」で「English」を選択
* 「Choose country」で「Japan」を選択
* 「Default locale」で「United States」を選択
* 「Keymap to use」で「American English」を選択
* 「Configure network」で以下を指定
** ホスト名「sambapdc」
** ドメイン名「samba.local」
* 「Set up users and passwords」で以下を指定
** 「Root password」に「samba」を指定
** ''「Set up users and passwords」の「Full name for new user」で「Debian installer main menu」になるまで、何度か「<Go back>」を選択''
: これを行わずに普通にインストールを続行すると、無用なパッケージがインストールされるので注意。
* 「Partition disks」で以下を指定
** 「Guided - use entire disk(デフォルト)」を選択
** パーティション構成で「All files in one partition(デフォルト)」を選択
** 「Finish partitioning and write changes to disk」を押す
** 「Write changes to disks?」に <Yes>を選択
* ここで「Installing the base system」画面になり、基本的なパッケージがインストールされる
* 「Configure the package manager」で「Debian installer main menu」になるまで、何度か「<Go back>」を選択''
: これを行わずに普通にインストールを続行すると、無用なパッケージがインストールされるので注意。
* Use a network mirror を聞かれた場合は <No> を回答

* 「Install the GRUB boot loader on a hard disk」を選択
** Install the GRUB boot loader to the master boot record? に <yes> を選択
* Installation complete で <Continue>
: ここで再起動が行われる

=== 基本的な設定 ===

root でログインして設定を継続する。

* eth1 用の設定を追加(オプション)

: 仮想マシンのイメージを他で転用すると、仮想マシン起動時に「Create new identity」といったメッセージが表示される。ここで Yes を選択した場合は MACアドレスが変更されるため、 OS から認識されるインタフェース名も eth0 ではなく eth1 や eth2 などになる。そのための設定

: /etc/network/interfaces に以下を追加(eth1の場合)

allow-hotplug eth1
iface eth1 inet dhcp

* APT コマンドの設定とパッケージの更新







* リモートログイン用アカウントの作成

# useradd -m local
# passwd local
パスワードは「local」に設定。


# mkdir /tmp/a
# mount -t tmpfs /dev/shm /tmp/a
# cd /tmp/a
# wget ftp://ftp.jp.debian.org/debian/pool/main/n/nfs-utils/nfs-common_1.2.3-2_i386.deb
# dpkg -i --force-depends nfs-common_1.2.3-2_i386.deb


apt-get clean



: 変更後再起動するか、例えば以下のように remount オプションにより動的にマウントオプションを変更する。
mount -o remount,rw,acl,user_xattr,errors=remoun-ro /dev/sda1 /


= Samba + LDAP 環境の設定 =
= Samba + LDAP 環境の設定 =
222行目: 135行目:


* libnss-ldap の設定
* libnss-ldap の設定
: URL は ldap://localhost/
: URL は ldapi:///
: DN は、dc=samba,dc=local
: DN は、dc=sambadom,dc=local
: LDAPのバージョンは3
: LDAPのバージョンは3
: LDAP account for root は cn=admin,dc=samba,dc=local
: LDAP account for root は cn=admin,dc=sambadom,dc=local
: パスワードは ldap
: パスワードは ldap


* libpam-ldap の設定
* libpam-ldap の設定
: Make local database admin... はデフォルトのまま
: Allow LDAP admin account ... は <Yes>
: Does the LDAP database require login はデフォルトのまま(No)
:Does the LDAP database require login? <No>
: LDAP account for root は cn=admin,dc=samba,dc=local
: LDAP account for root は cn=admin,dc=sambadom,dc=local
: パスワードは ldap
: パスワードは ldap

* nscd をアンインストール

'''nscd が動作していると(なぜか)LDAP 上のユーザ情報が Linux から認識されないため、ここでは削除する。'''

# apt-get remove nscd
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
nscd
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 274kB disk space will be freed.
Do you want to continue [Y/n]? y
(Reading database ... 14825 files and directories currently installed.)
Removing nscd ...
Stopping Name Service Cache Daemon: nscd.
Processing triggers for man-db ...


* /etc/nsswitch.conf ファイルに LDAP キーワードを追加
* /etc/nsswitch.conf ファイルに LDAP キーワードを追加
257行目: 152行目:
+++ nsswitch.conf 2009-09-07 22:10:09.000000000 +0900
+++ nsswitch.conf 2009-09-07 22:10:09.000000000 +0900
@@ -4,9 +4,9 @@
@@ -4,9 +4,9 @@
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# If you have the `glibc-doc-reference' and `info' packages
installed, try:
# `info libc "Name Service Switch"' for information about this file.
# `info libc "Name Service Switch"' for information about this file.
-passwd: compat
-passwd: compat
-group: compat
-group: compat
-shadow: compat
+passwd: compat ldap
+passwd: compat ldap
+group: compat ldap
+group: compat ldap
+shadow: compat ldap
shadow: compat
hosts: files dns
hosts: files dns
networks: files
networks: files


* /etc/pam.d/common-account
: (-は行削除、+は行追加)

+account sufficient pam_ldap.so
account required pam_unix.so

* /etc/pam.d/common-auth
: (-は行削除、+は行追加)

-auth required pam_unix.so nullok_secure
+auth sufficient pam_ldap.so
+auth required pam_unix.so nullok_secure use_first_pass

* /etc/pam.d/common-session
: (-は行削除、+は行追加)

session required pam_unix.so
+session optional pam_ldap.so
+session optional pam_mkhomedir.so skel=/etc/skel

* /etc/pam.d/common-password
: (-は行削除、+は行追加)

-password required pam_unix.so nullok obscure
+password sufficient pam_unix.so nullok obscure min=4 max=8 md5
+password required pam_ldap.so try_first_pass
+password required pam_smbpass.so use_authtok try_first_pass

pam_smbpass 行は、次でインストールする pam_smbpass モジュールのための設定


=== Samba / OpenLDAP のインストール ===
=== Samba / OpenLDAP のインストール ===
304行目: 170行目:
* slapd パッケージのインストール
* slapd パッケージのインストール


apt-get install slapd ldap-utils
# apt-get install slapd ldap-utils
apt-get clean


: Admin password には ldap を指定する。
: Admin password には ldap を指定する。


ldap-utils パッケージは管理用。動作上は不要
ldap-utils パッケージは管理用。動作上は不要だが、以降の説明ではインス
トールされていることを前提とする。


* Samba 関連パッケージのインストール
* Samba 関連パッケージのインストール


# apt-get install samba winbind smbclient
# apt-get install samba winbind smbclient
# apt-get clean


: workgroup/domain name に ''SAMBADOM'' を指定
: workgroup/domain name に ''SAMBADOM'' を指定
: WINS settings from DHCP? に No(デフォルト)を指定


smbclient パッケージは管理用。動作上は不要。
smbclient パッケージは管理およびテスト用。動作上は不要。


* pam_smbpass パッケージのインストール
* pam_smbpass パッケージのインストール
325行目: 189行目:
# apt-get install libpam-smbpass
# apt-get install libpam-smbpass


* nscd を削除
* cracklib パッケージのインストール
: nscd が動作していると、ユーザやグループの追加、削除が(少なくとも即時には)反映されないというトラブルが発生することがあり、動作検証を行う上では面倒なため、ここでは削除している。
# apt-get remove nscd


=== PAM の手動設定 ===
# apt-get install libcrack2


'''Squeeze において、PAM関連ファイルは、pam-auth-update コマンドが内部
※crackcheck コマンドが使用する。
的に実行されて自動で設定されるため、基本的に修正は不要。'''


ただし、残念ながら、以下の設定を手動で設定を行う必要がある
* Samba スキーマファイルをインストール


* /etc/pam.d/common-password
# apt-get install samba-doc
# apt-get clean


pam_winbind.so 行をコメントアウト
# zcat /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz > /etc/ldap/schema/samba-3.2.5.schema


* /etc/pam.d/common-session
# apt-get remove samba-doc


pam_winbind.so 行に mkhomedir オプションを追加
* /etc/ldap/slapd.conf を設定


=== crackcheck コマンドのインストール ===
--- slapd.conf.org 2009-09-12 19:26:34.000000000 +0900
+++ slapd.conf 2009-09-12 19:50:27.000000000 +0900
@@ -12,6 +12,7 @@
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
+include /etc/ldap/schema/samba-3.2.5.schema
# Where the pid file is put. The init.d script
# will not stop the server if you change this.
@@ -57,7 +58,8 @@
# rootdn directive for specifying a superuser on the database. This is needed
# for syncrepl.
-# rootdn "cn=admin,dc=samba,dc=local"
+rootdn "cn=admin,dc=samba,dc=local"
+rootpw "ldap"
# Where the database file are physically stored for database #1
directory "/var/lib/ldap"
@@ -83,7 +85,7 @@
dbconfig set_lk_max_lockers 1500
# Indexing options for database #1
-index objectClass eq
+index objectClass,uidNumber,gidNumber,uid,sambaSID,cn,memberuid eq
# Save the time that the entry gets modified, for database #1
lastmod on
@@ -106,6 +108,16 @@
by self write
by * none
+access to attrs=loginShell
+ by dn="cn=admin,dc=samba,dc=local" write
+ by self write
+ by * read
+
+access to attrs=sambaNTPassword,sambaLMPassword,sambaPwdLastSet,sambaPwdMustChange
+ by dn="cn=admin,dc=samba,dc=local" write
+# by self write
+ by * none
+
# Ensure read access to the base for things like
# supportedSASLMechanisms. Without this you may
# have problems with SASL not knowing what


=== crackcheck コマンドのインストール ===
* cracklib パッケージのインストール

# apt-get install libcrack2

: crackcheck コマンドが使用する。


開発環境のあるマシン上で以下を実施
開発環境のあるマシン上で以下を実施
400行目: 225行目:
# strip crackcheck
# strip crackcheck


生成された crackcheck バイナリを、今回構築するマシンの /usr/local/sbin/crackcheck にインストール。
生成された crackcheck バイナリを、今回構築するマシンの
/usr/local/sbin/crackcheck にインストール。


=== mgrshare スクリプトのインストール ===
=== mgrshare スクリプトのインストール ===


mgrshare スクリプトを作成の上、以下を実施( mgrshare は [[http://wiki.samba.gr.jp/mediawiki/images/8/80/Sambapdc-3.0-conf.tar.gz | sambapdc-3.0.tar.gz]] 内にあります)
mgrshare スクリプトを作成の上、以下を実施( mgrshare は [http://wiki.samba.gr.jp/mediawiki/images/1/10/Sambapdc4.tar.gz sambapdc4.tar.gz] 内にあります)


# mv mgrshare /usr/local/sbin/mgrshare
# mv mgrshare /usr/local/sbin/mgrshare
411行目: 237行目:
=== smbchsh のインストール ===
=== smbchsh のインストール ===


一般ユーザがシェルを変更できるように以下のスクリプトを /usr/local/bin/smbchsh としてインストール
一般ユーザがシェルを変更できるように以下のスクリプトを
/usr/local/bin/smbchsh としてインストール


#!/bin/sh
#!/bin/sh
423行目: 250行目:
" | ldapmodify -x -D "uid=${USER},ou=users,dc=samba,dc=local" -W
" | ldapmodify -x -D "uid=${USER},ou=users,dc=samba,dc=local" -W


=== remove-old-files-in-recycle-bin
=== ホームディレクトリの作成 ===


ごみ箱内の古いファイルを削除するスクリプト例
pam_mkhomedir を用いる関係上、パーミッションの設定が必須
/usr/local/sbin/remove-old-files-in-recycle-bin としてインストール


#!/bin/sh
# mkdir /home/SAMBADOM
# chmod 1777 /home/SAMBADOM
trashdir=.recycle
rootdir=/var/lib/samba/shares
olddays=14
cd ${rootdir}
=== Samba ドメインで使用するディレクトリの作成 ===
for targetdir in *; do
if [ -d ${targetdir}/${trashdir} ]; then
cd ${targetdir}/${trashdir}
find . -atime +${olddays} -exec rm {} \;
fi
done


=== ホームディレクトリの作成 ===
# mkdir /var/lib/samba/shares
# mkdir /var/lib/samba/shares/netlogon
# mkdir /var/lib/samba/shares/profiles
# chmod 1777 /var/lib/samba/shares/profiles


# mkdir /home/SAMBADOM
=== ダミーの printcap ファイルの作成 ===


=== smbusers ファイルの作成 ===
printing = bsd を指定し、/etc/printcap ファイルを作成することで、CUPS サーバに接続できないというエラー表示を抑止する。
# touch /etc/samba/smbusers


=== リモートログイン用アカウントの作成(オプション) ===
# touch /etc/printcap
# groupadd -g 999 local
# useradd -u 999 -g 999 -m local
# passwd local
:パスワードは「local」に設定。


== Samba + LDAP 環境の設定 ==
== 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"


=== 初期スキーマの作成 ===
=== 初期スキーマの作成 ===


* samba.local.ldif ファイルの作成
* sambadom.local.ldif ファイルの作成


dn: ou=users,dc=samba,dc=local
dn: ou=users,dc=sambadom,dc=local
objectClass: top
objectClass: top
objectClass: organizationalUnit
objectClass: organizationalUnit
ou: users
ou: users
dn: ou=groups,dc=samba,dc=local
dn: ou=groups,dc=sambadom,dc=local
objectClass: top
objectClass: top
objectClass: organizationalUnit
objectClass: organizationalUnit
ou: groups
ou: groups
dn: ou=idmap,dc=samba,dc=local
dn: ou=idmap,dc=sambadom,dc=local
objectClass: top
objectClass: top
objectClass: organizationalUnit
objectClass: organizationalUnit
ou: idmap
ou: idmap
dn: ou=computers,dc=samba,dc=local
dn: ou=computers,dc=sambadom,dc=local
objectClass: top
objectClass: top
objectClass: organizationalUnit
objectClass: organizationalUnit
471行目: 389行目:
* ldapadd コマンドで上記 LDIF ファイルの内容を登録
* ldapadd コマンドで上記 LDIF ファイルの内容を登録


# cat samba.local.ldif | ldapadd -h localhost -D cn=admin,dc=samba,dc=local -W -x
# cat sambadom.local.ldif | ldapadd -D
cn=admin,dc=sambadom,dc=local -W -x -H ldapi:///
Enter LDAP Password:
Enter LDAP Password:
adding new entry "ou=users,dc=samba,dc=local"
adding new entry "ou=users,dc=samba,dc=local"
479行目: 397行目:
...
...


=== Samba の設定 ===
=== Samba の設定 ===


489行目: 406行目:
* smb.conf のインストール
* smb.conf のインストール


smb.conf ファイルを作成( smb.conf は [[http://wiki.samba.gr.jp/mediawiki/images/8/80/Sambapdc-3.0-conf.tar.gz | sambapdc-3.0.tar.gz]] 内にあります)の上、以下を実施
smb.conf ファイルを /etc/samba/smb.conf に作成( smb.conf は [http://wiki.samba.gr.jp/mediawiki/images/1/10/Sambapdc4.tar.gz sambapdc4.tar.gz] 内にあります)の上、以下を実施


# mv /etc/samba/smb.conf /etc/samba/smb.conf.org
# mv /etc/samba/smb.conf /etc/samba/smb.conf.org
# mv smb.conf /etc/samba/smb.conf
# mv smb.conf /etc/samba/smb.conf

* smbusers ファイルのインストール

smbusers ファイルを /etc/samba/smbusers として作成
ldap01 =


* LDAP パスワードの格納
* LDAP パスワードの格納


# smbpasswd -w ldap
# smbpasswd -w ldap
Setting stored password for "cn=admin,dc=samba,dc=local" in secrets.tdb
Setting stored password for "cn=admin,dc=sambadom,dc=local" in secrets.tdb


* Samba の基本ユーザ情報を LDAP に格納
* Samba の基本ユーザ情報を LDAP に格納


net sam provision コマンドを実行する前に、あらかじめ winbindd (のみ)を起動しておく必要がある。
net sam provision コマンドを実行する前に、あらかじめ winbindd (のみ)
を起動しておく必要がある。


# /etc/init.d/winbind start
# /etc/init.d/winbind start
525行目: 448行目:
Retype new SMB password:
Retype new SMB password:


* Samba の起動
: ユーザ権利を付与
# net sam rights grant administrator SeMachineAccountPrivilege
Granted SeMachineAccountPrivilege to SAMBADOM\administrator
# net sam rights grant administrator SeTakeOwnershipPrivilege
Granted SeTakeOwnershipPrivilege to SAMBADOM\administrator
# net sam rights grant administrator SeBackupPrivilege
Granted SeBackupPrivilege to SAMBADOM\administrator
# net sam rights grant administrator SeRestorePrivilege
Granted SeRestorePrivilege to SAMBADOM\administrator
# net sam rights grant administrator SeRemoteShutdownPrivilege
Granted SeRemoteShutdownPrivilege to SAMBADOM\administrator
# net sam rights grant administrator SePrintOperatorPrivilege
Granted SePrintOperatorPrivilege to SAMBADOM\administrator
# net sam rights grant administrator SeAddUsersPrivilege
Granted SeAddUsersPrivilege to SAMBADOM\administrator
# net sam rights grant administrator SeDiskOperatorPrivilege
Granted SeDiskOperatorPrivilege to SAMBADOM\administrator


=== 共有ディレクトリ作成 ===
=== ホームディレクトリ自動作成の設定 ===


* /usr/local/sbin/createhomedir として以下の内容のファイルを作成
Domain Usersグループに所属するユーザであれば、誰でも読み書き可能な共有ディレクトリを作成しておく。


: なぜか PAM によるホームディレクトリ自動作成が Samba 経由だとうまく動作しないため
# mkdir /home/shared
# chgrp domusers /home/shared
# chmod g+ws /home/shared


#!/bin/bash
共有内に、あらかじめ URL ファイルをいくつか設置しておく。

== 動作確認 ==




: 以下のコマンドを実行

# apt-get update
homedir=/home/$1/$2
apt-get clean
apt-get upgrade security
apt-get clean

: カーネルがバージョンアップされた場合は、一度再起動する
if [ ! -d $homedir ]; then
* ssh パッケージのインストール
mkdir $homedir
chmod 700 $homedir
chown $2:domusers $homedir
fi
exit 0


=== syslog の設定 ===
apt-get install openssh-server
apt-get clean


* 以下の内容で /etc/rsyslog.d/samba.conf ファイルを作成
クライアントも併せてインストールされる。


local1.* -/var/log/samba/log.audit
* lv(ページャ)をインストール


* さらに
apt-get install lv
apt-get clean

* リモートログイン用アカウントの作成

# useradd -m local
# passwd local

パスワードは「local」に設定。

* ACLおよび拡張属性関連のパッケージインストールと設定

apt-get install attr acl
apt-get clean

: /etc/fstab で acl,user_xattr をマウントオプションに追加
: ''errors=remount-ro'' を ''defaults,acl,user_xattr,errors=remount-ro'' に変更
: 再起動せずに、マウントオプションを変更

mount -o remount,defaults,acl,user_xattr,errors=remount-ro /dev/sda1 /

= Samba + LDAP 環境の設定 =

== パッケージのインストールと基本設定 ==

=== libnss-ldap / libpam-ldap のインストールと設定 ===

apt-get install libnss-ldap libpam-ldap

* libnss-ldap の設定
: URL は ldap://localhost/
: DN は、dc=samba,dc=local
: LDAPのバージョンは3
: LDAP account for root は cn=admin,dc=samba,dc=local
: パスワードは ldap

* libpam-ldap の設定
: Make local database admin... はデフォルトのまま
: Does the LDAP database require login はデフォルトのまま(No)
: LDAP account for root は cn=admin,dc=samba,dc=local
: パスワードは ldap

* nscd をアンインストール

'''nscd が動作していると(なぜか)LDAP 上のユーザ情報が Linux から認識されないため、ここでは削除する。'''

# apt-get remove nscd
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
nscd
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 274kB disk space will be freed.
Do you want to continue [Y/n]? y
(Reading database ... 14825 files and directories currently installed.)
Removing nscd ...
Stopping Name Service Cache Daemon: nscd.
Processing triggers for man-db ...

* /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.
# touch /var/log/samba/log.audit
-passwd: compat
# /etc/init.d/rsyslog restart
-group: compat
-shadow: compat
+passwd: compat ldap
+group: compat ldap
+shadow: compat ldap
hosts: files dns
networks: files


* /etc/logrotate.d/samba-syslog として以下の内容のファイルを作成
* /etc/pam.d/common-account
: (-は行削除、+は行追加)


/var/log/samba/log.audit
+account sufficient pam_ldap.so
{
account required pam_unix.so
rotate 4
weekly
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
invoke-rc.d rsyslog reload > /dev/null
endscript
}


== Samba ドメインで使用する共有の作成 ==
* /etc/pam.d/common-auth
: (-は行削除、+は行追加)


# mkdir /var/lib/samba/shares
-auth required pam_unix.so nullok_secure
# cd /var/lib/samba/shares
+auth sufficient pam_ldap.so
+auth required pam_unix.so nullok_secure use_first_pass


* NETLOGON 共有
* /etc/pam.d/common-session
# mkdir /var/lib/samba/shares/netlogon
: (-は行削除、+は行追加)


# mkdir /var/lib/samba/shares/printers
session required pam_unix.so
# chmod 775 domadmins
+session optional pam_ldap.so
# chgrp domadmins printers
+session optional pam_mkhomedir.so skel=/etc/skel


* profiles 共有
* /etc/pam.d/common-password
: (-は行削除、+は行追加)


# mkdir /var/lib/samba/shares/profiles
-password required pam_unix.so nullok obscure
# chmod 1777 /var/lib/samba/shares/profiles
+password sufficient pam_unix.so nullok obscure min=4 max=8 md5
+password required pam_ldap.so try_first_pass
+password required pam_smbpass.so use_authtok try_first_pass


* shared 共有
pam_smbpass 行は、次でインストールする pam_smbpass モジュールのための設定
:Domain Usersグループに所属するユーザであれば、誰でも読み書き可能な共有ディレクトリ


# mkdir /var/lib/samba/shares/shared
=== Samba / OpenLDAP のインストール ===
# chgrp domusers shared
# chmod g+ws shared


* aclshare1 共有
* slapd パッケージのインストール


:あらかじめ aclshare1ro および aclshare1rw グループを作成の上、GID を確認しておく
apt-get install slapd ldap-utils
# net sam createlocalgroup aclshare1ro
apt-get clean
Created local group aclshare1ro with RID 1001
# net sam createlocalgroup aclshare1rw
Created local group aclshare1rw with RID 1002


# net groupmap list ntgroup=aclshare1ro
: Admin password には ldap を指定する。
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
ldap-utils パッケージは管理用。動作上は不要。
# 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 共有
* Samba 関連パッケージのインストール


:あらかじめ aclshare2ro および aclshare2rw グループを作成の上、GID を確認しておく
# apt-get install samba winbind smbclient
# net sam createlocalgroup aclshare2ro
# apt-get clean
Created local group aclshare1ro with RID 1003
# net sam createlocalgroup aclshare2rw
Created local group aclshare1rw with RID 1004


# net groupmap list ntgroup=aclshare1ro
: workgroup/domain name に ''SAMBADOM'' を指定
aclshare1ro (S-1-5-21-3643489711-3443204727-2039806625-1003) -> 10013
: WINS settings from DHCP? に No(デフォルト)を指定
# net groupmap list ntgroup=aclshare1rw
aclshare1rw (S-1-5-21-3643489711-3443204727-2039806625-1004) -> 10014


# mkdir /var/lib/samba/shared/aclshare1
smbclient パッケージは管理用。動作上は不要。
# 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 共有
* pam_smbpass パッケージのインストール


# mkdir /var/lib/samba/shares/share_test
# apt-get install libpam-smbpass
# chmod 1777 share_test


# mkdir share_test/hide_unreadable
* cracklib パッケージのインストール
# cd share_test/hide_unreadable
# touch normal.txt
# touch secure.txt
# chmod 600 secure.txt


# mkdir share_test/veto_files
# apt-get install libcrack2
# cd share_test/veto_files
# touch dummy.exe
# mkdir GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}


* var-check スクリプトのインストール
※crackcheck コマンドが使用する。
:share_test 共有の root preexec 行と連動して動作し、現在設定されている

Samba 変数の内容を表示させるためのスクリプト。
* Samba スキーマファイルをインストール
/usr/local/sbin/var-check としてインストール。

# apt-get install samba-doc
# apt-get clean

# zcat /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz > /etc/ldap/schema/samba-3.2.5.schema

# apt-get remove samba-doc

* /etc/ldap/slapd.conf を設定

--- slapd.conf.org 2009-09-12 19:26:34.000000000 +0900
+++ slapd.conf 2009-09-12 19:50:27.000000000 +0900
@@ -12,6 +12,7 @@
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
+include /etc/ldap/schema/samba-3.2.5.schema
# Where the pid file is put. The init.d script
# will not stop the server if you change this.
@@ -57,7 +58,8 @@
# rootdn directive for specifying a superuser on the database. This is needed
# for syncrepl.
-# rootdn "cn=admin,dc=samba,dc=local"
+rootdn "cn=admin,dc=samba,dc=local"
+rootpw "ldap"
# Where the database file are physically stored for database #1
directory "/var/lib/ldap"
@@ -83,7 +85,7 @@
dbconfig set_lk_max_lockers 1500
# Indexing options for database #1
-index objectClass eq
+index objectClass,uidNumber,gidNumber,uid,sambaSID,cn,memberuid eq
# Save the time that the entry gets modified, for database #1
lastmod on
@@ -106,6 +108,16 @@
by self write
by * none
+access to attrs=loginShell
+ by dn="cn=admin,dc=samba,dc=local" write
+ by self write
+ by * read
+
+access to attrs=sambaNTPassword,sambaLMPassword,sambaPwdLastSet,sambaPwdMustChange
+ by dn="cn=admin,dc=samba,dc=local" write
+# by self write
+ by * none
+
# Ensure read access to the base for things like
# supportedSASLMechanisms. Without this you may
# have problems with SASL not knowing what

=== 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 スクリプトを作成の上、以下を実施( mgrshare は [[http://wiki.samba.gr.jp/mediawiki/images/8/80/Sambapdc-3.0-conf.tar.gz | sambapdc-3.0.tar.gz]] 内にあります)

# mv mgrshare /usr/local/sbin/mgrshare
# chmod +x /usr/local/sbin/mgrshare

=== smbchsh のインストール ===

一般ユーザがシェルを変更できるように以下のスクリプトを /usr/local/bin/smbchsh としてインストール


#!/bin/sh
#!/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'
SHELL=$1
rm /tmp/var.txt
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

=== ホームディレクトリの作成 ===

pam_mkhomedir を用いる関係上、パーミッションの設定が必須

# mkdir /home/SAMBADOM
# chmod 1777 /home/SAMBADOM
for var in $VARLIST; do
=== Samba ドメインで使用するディレクトリの作成 ===
echo "$var : $1" >> /tmp/var.txt
shift
done


=== 試験用ユーザを作成 ===
# mkdir /var/lib/samba/shares
# mkdir /var/lib/samba/shares/netlogon
# mkdir /var/lib/samba/shares/profiles
# chmod 1777 /var/lib/samba/shares/profiles


* ldap01 / ldap02 / ldap03 ユーザを作成
=== ダミーの printcap ファイルの作成 ===


:ldap01 / ldap02 ユーザは aclshare1rw および aclshare2rw グループに所属
printing = bsd を指定し、/etc/printcap ファイルを作成することで、CUPS サーバに接続できないというエラー表示を抑止する。
:ldap03 ユーザは aclshare1ro および aclshare2ro グループに所属


** ホームディレクトリ \\sambapdc\ユーザ名 を H: にマウント
# touch /etc/printcap
** ユーザ名「LDAP User nn」
** パスワードを無期限にする


: 以下 ldap01 ユーザーの場合の実行例
== Samba + LDAP 環境の設定 ==


# smbpasswd -a ldap01
=== 初期スキーマの作成 ===
# pdbedit -c "[X]" -f "LDAP01 user" -h '\\sambapdc\ldap01' -D h: ldap01


# net sam addmem aclshare1rw ldap01
* samba.local.ldif ファイルの作成
Added SAMBADOM\ldap01 to SAMBADOM\aclshare1rw
# net sam addmem aclshare2rw ldap01
Added SAMBADOM\ldap01 to SAMBADOM\aclshare2rw


=== SWAT のインストール(オプション) ===
dn: ou=users,dc=samba,dc=local
objectClass: top
objectClass: organizationalUnit
ou: users
dn: ou=groups,dc=samba,dc=local
objectClass: top
objectClass: organizationalUnit
ou: groups
dn: ou=idmap,dc=samba,dc=local
objectClass: top
objectClass: organizationalUnit
ou: idmap
dn: ou=computers,dc=samba,dc=local
objectClass: top
objectClass: organizationalUnit
ou: computers


* SWAT のインストール
* ldapadd コマンドで上記 LDIF ファイルの内容を登録


# apt-get install swat
# cat samba.local.ldif | ldapadd -h localhost -D cn=admin,dc=samba,dc=local -W -x
Enter LDAP Password:
adding new entry "ou=users,dc=samba,dc=local"
adding new entry "ou=groups,dc=samba,dc=local"
...


* /etc/hosts.allow ファイルに以下を設定
: アクセスをローカルサブネットに制限する
=== Samba の設定 ===
ALL: LOCAL


=== 最後に ===
* Samba の停止


* WINS データベースの初期化
# /etc/init.d/samba stop
# /etc/init.d/winbind stop


/var/lib/samba 以下の wins.dat と wins.tdb を削除する
* smb.conf のインストール


* VMware ログファイルの削除
smb.conf ファイルを作成( smb.conf は [[http://wiki.samba.gr.jp/mediawiki/images/8/80/Sambapdc-3.0-conf.tar.gz | sambapdc-3.0.tar.gz]] 内にあります)の上、以下を実施


# mv /etc/samba/smb.conf /etc/samba/smb.conf.org
# mv smb.conf /etc/samba/smb.conf

* LDAP パスワードの格納

# smbpasswd -w ldap
Setting stored password for "cn=admin,dc=samba,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:

: ユーザ権利を付与
# net sam rights grant administrator SeMachineAccountPrivilege
Granted SeMachineAccountPrivilege to SAMBADOM\administrator
# net sam rights grant administrator SeTakeOwnershipPrivilege
Granted SeTakeOwnershipPrivilege to SAMBADOM\administrator
# net sam rights grant administrator SeBackupPrivilege
Granted SeBackupPrivilege to SAMBADOM\administrator
# net sam rights grant administrator SeRestorePrivilege
Granted SeRestorePrivilege to SAMBADOM\administrator
# net sam rights grant administrator SeRemoteShutdownPrivilege
Granted SeRemoteShutdownPrivilege to SAMBADOM\administrator
# net sam rights grant administrator SePrintOperatorPrivilege
Granted SePrintOperatorPrivilege to SAMBADOM\administrator
# net sam rights grant administrator SeAddUsersPrivilege
Granted SeAddUsersPrivilege to SAMBADOM\administrator
# net sam rights grant administrator SeDiskOperatorPrivilege
Granted SeDiskOperatorPrivilege to SAMBADOM\administrator

=== 共有ディレクトリの作成 ===

Domain Usersグループに所属するユーザであれば、誰でも読み書き可能な共有ディレクトリを作成しておく。

# mkdir /home/shared
# chgrp domusers /home/shared
# chmod g+ws /home/shared

共有内に、あらかじめ URL ファイルをいくつか設置しておく。


== 動作確認 ==
== 動作確認 ==


=== Windows XP Professional SP3 から Samba ドメインに参加 ===


=== Windows NT Workstation 4.0 SP6a(以下 NTWS40) から Samba ドメインに参加 ===


* ドメインに参加
* ドメインに参加
* Administrator としてログオン
* Administrator としてログオン


=== 試験用ユーザを ===
=== 確認 ===


* 初期状態で
* ldap01 ユーザを作成
** パスワード ldap01
** ホームディレクトリ \\sambapdc\ldap01 を H: にマウント
** ユーザ名「LDAP User 01」
** パスワードを無期限にする


** ssh をインストールした上で、ldap01 として ssh でリモートマシンからログインが成功する。その際、ホームディレクトリが自動で作成される
=== 動作確認 ===


* 初期状態で
** ldap01 として ssh でリモートマシンからログインが成功する
** smbchsh コマンドによりシェルを変更できる
** smbchsh コマンドによりシェルを変更できる


968行目: 654行目:
ldap01:*:10002:10000:ldap01:/home/SAMBADOM/ldap01:/bin/sh
ldap01:*:10002:10000:ldap01:/home/SAMBADOM/ldap01:/bin/sh


** ldap01 として NTWS40 にログオンできる (パスワード ldap01)
** ldap01 として Windows XP Professional にログオンできる (パスワード ldap01)


* smbpasswd コマンドによりパスワードを変更できる
* smbpasswd コマンドによりパスワードを変更できる
: その際、crackcheck コマンドにより、簡単なパスワードは設定できない
: その際、crackcheck コマンドにより、簡単なパスワードは設定できない



** ldap01 として NTWS40 にログオンできる (パスワードは変更後)
** ldap01 として NTWS40 にログオンできる (パスワードは変更後)
** ldap01 として ssh でリモートマシンからログインが成功する(パスワードは変更後)
** ldap01 として ログインが成功する(パスワードは変更後)


* passwd コマンドによりパスワードを変更できる
* passwd コマンドによりパスワードを変更できる


: 変更後のパスワードでコンソールログインと smbclient によるアクセスが成功する
** ldap01 として NTWS40 にログオンできる (パスワードは変更後)

** ldap01 として ssh でリモートマシンからログインが成功する(パスワードは変更後)
** ldap01 として Windows XP Professinal にログオンできる (パスワードは変更後)
** ldap01 として変更後のログインが成功する(パスワードは変更後)




* Windows 2000 以降で Ctrl+Alt+Del した画面のパスワードの変更、からパスワードが変更できる
* Windows XP Professional 以降で Ctrl+Alt+Del した画面のパスワードの変更、からパスワードが変更できる
: その際、crackcheck コマンドにより、簡単なパスワードは設定できない
: その際、crackcheck コマンドにより、簡単なパスワードは設定できない


991行目: 682行目:
** 作成したファイル共有にアクセスできる
** 作成したファイル共有にアクセスできる
** ファイル共有が削除できる
** ファイル共有が削除できる

※Windows NT Workstation 4.0 からの共有の作成は、なぜかうまく動作していません。

2011年8月6日 (土) 16:47時点における最新版

Debian GNU/Linux リリース媒体の入手

小さなCD にある 180MB 以下のイメージを入手。

  • debian-6.0.0-i386-netinst.iso を使用

VMware 仮想マシンの作成

仮想マシン作成の手順

仮想マシン作成ウィザードで以下を指定 (VMware Workstation 7.1.1 日本語 版環境で構築)

  • カスタム を選択
  • ハードウェア互換性として Workstation 5 を選択(なるべく多くのバージョンで動作するように)
    • ESX Server はチェックしない
  • ゲストOSとして Linuxを選択
  • バージョンとして Debian 5 を選択
  • 仮想マシン名として sambapdc を指定
  • プロセッサ数として 1 を指定
  • メモリ容量を 256MB に変更
  • ネットワーク接続を NAT を使用 のまま
  • I/O コントローラタイプはLSI Logic のまま
  • 仮想ディスクの新規作成を選択
  • 仮想ディスクタイプとして SCSI を選択
  • ディスクサイズほかは規定値のまま(8.0 GB / あらかじめ割り当てない / 仮想ディスクを単一ファイル)

Squeeze インストール

インストーラでの設定

インストーラで以下を指定

  • 初期画面で「Install」を選択(Graphical Installではなく)
  • 「Choose language」で「English」を選択
  • 「Choose country」で「Japan」を選択
  • 「Default locale」で「United States」を選択
  • 「Keymap to use」で「American English」を選択
  • 「Configure network」で以下を指定
    • ホスト名「sambapdc」
    • ドメイン名「sambadom.local」
  • 「Set up users and passwords」で以下を指定
    • 「Root password」に「samba」を指定
    • 「Set up users and passwords」の「Full name for new user」で
  • 「Debian installer main menu」になるまで、何度か「<Go back>」を選択
これを行わずに普通にインストールを続行すると、無用なパッケージがイン
  • ストールされるので注意。
  • 「Partition disks」で以下を指定
    • 「Guided - use entire disk(デフォルト)」を選択
    • パーティション構成で「All files in one partition(デフォルト)」を
  • 選択
    • 「Finish partitioning and write changes to disk」を押す
    • 「Write changes to disks?」に <Yes>を選択
  • ここで「Installing the base system」画面になり、基本的なパッケージが
  • インストールされる
  • 「Install the GRUB boot loader on a hard disk」を選択
    • Install the GRUB boot loader to the master boot record? に <yes> を
  • 選択
  • Installation complete で <Continue>
ここで再起動が行われる

このほか聞かれた場合は、以下のように選択

  • Install the base system を選択
  • Kernel to install で「linux-image-2.6-686」を選択
  • Use a network mirror で <No>

基本的な設定

  • 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 しか設定していないので注意。必要に応じて contribnon-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-rodefaults,acl,user_xattr,errors=remount-ro

に変更する。

変更後再起動するか、例えば以下のように remount オプションにより動的にマウントオプションを変更する。
mount -o remount,rw,acl,user_xattr,errors=remoun-ro /dev/sda1 /

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 パッケージのインストール
  1. 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 スクリプトを作成の上、以下を実施( 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 としてログオンして、「コンピュータ管理」ツールから
    • ファイル共有が作成できる
    • 作成したファイル共有にアクセスできる
    • ファイル共有が削除できる