2022年8月、ホームページを全面リニューアルしました! 情報を分かりやすくお伝えできるサイト作りを目指してまいります。

PDCなsamba設定!

sambaも3.x系になって、Windowsに対してかなり親和性も高くなった。完璧に近いと俺は思っている。オープンソースでここまで来たのは驚きの極みだ。MSもビックリではないだろうか。
さて、ここではsambaをWindowsのPDCにしてしまおうという計画だ。Windows鯖と違ってライセンスがないから、同時アクセスライセンスなんて気にしないで良いのが嬉しい(以下、コラム参照)。ここでは、俺の会社でsamba PDCを作ったので、その記録を書き記す。本来規模的なことを考えればLDAPを使った方が管理工数の削減にはなるが、弊社はそれほどの大きな規模の会社ではないので、あえてLDAPにしていない。
また、sambaのインストール等は割愛する。sambaのインストールについては、 ここ を参照して欲しい。

[コラム]
Peer to Peer共有は使えるか?
Peer to Peer(以下P to Pと言う)共有とは、鯖OSでなくてもWindowsXP HomeEditionやProfessionalとかWindows2000 Professionalのようなクライアントマシンでも、そのマシンがファイル鯖のような使い方が出来る仕組みである。P to Pとは、本来ネットワークに接続された同じワークグループ(ドメインと言う考えではない)の端末は何れも鯖になる事が出来る。お手軽共有機能である。
もちろん、ファイル鯖だけではなくプリンタ鯖やHTTP鯖としての役割も果たすことが出来る。
この機能は、一見お手軽で便利な機能だと思いがちだが、そこには罠が有る。と言うのも元々同時接続台数に制限を持たせてあるからである。MicrosoftではWindowsのクライアントOSにP to Pでの同時接続台数としてProfessionalで最大10台HomeEditionで最大5台の制限を設けている。つまり、2000/XPのProfessionalで同時に11人が共有フォルダへアクセスしたとすると、1人アクセスできない奴が出ることになる。
さらに決して間違えてはいけないのは、接続したユーザ数でなく、TCPコネクションをして接続した単位だと言うから厄介だ。つまり、こう言うことも実際には起こり得る、一人で同時に複数のエクスプローラーを起動してTCPセッションを結ぶと、そのセッション数が接続台数に加算されるので気が付かないうちに後からアクセスしたメンバーがアクセスできない事態に陥るので注意が必要だ。
まあ、しょうがないにしても切ない話だ。
言い換えれば、「それが嫌ならWindows2003Serverを使いなさい。」とMSは言いたいのだろう。しかし、このWindows2003Serverは接続ユーザの台数が多いとライセンス料だけで結構な金額になる。とても旨い商売だ。
俺としては、このお誘いに乗るのは馬鹿馬鹿しいと考えている。何のためにUnixをやってきたのか?こういった問題をオープンソースで解決するのが正にベストだ。ということで、このような問題で有意義な解決がSambaで有る。Samba3.0になってからかなり完成度もWindowsとの親和性も高くなってきた。したがって、この場で説明する「SambaでPDCを運用する。」と言うのはとても意義のある事だと考えている

マシン環境)
マシン:ペンタ3で800MHz Dell様の結構昔の鯖
Linux sambaサーバ名:infosystem
Linux デスビ:CentOS 4.4
Installed Packages
Name : samba
Arch : i386
Version: 3.0.10
Release: 1.4E.9
Size : 24 M
Repo : installed
Summary: The Samba SMB server.


1.ドメインに参加するマシングループを登録する
[root@infosystem samba]# groupadd machine
実際は、後述するsmb.confの
add machine script = /usr/sbin/adduser -n -g machine -c Machine -d /dev/null -s /bin/false %m$
で自動登録する。


2.ログオンスクリプト用netlogonディレクトリの作成
[root@infosystem /]# cd /home
[root@infosystem home]# mkdir netlogon
[root@infosystem home]# cd netlogon


3.PDCなsmb.confの書き方と説明
[global]セクションのみ説明する。

[root@infosystem samba]# vi smb.conf
[global]

;点線で囲ってある部分は、UnixのロケールとWindowsのロケールとの整合性をとる指定。
;----------------------------------
;Unix側の文字コード(samba3.xからの設定)
unix charset = eucJP-ms

;DOSつまりWindows側の文字コード(samba3.xからの設定)。ちなみに、cp932はMS-DOS日本語SJIS
dos charset = cp932

;SWATで表示するUnix側のディスプレイ文字コード(samba3.xからの設定)
;俺の場合、SWATは使わないけど。
display charset = eucJP-ms
;----------------------------------

;ドメイン名を指定する。
workgroup = infosys

;セキュリティをユーザレベルのセキュリティ指定。
;username mapパラメータを使ってUnixユーザとWindowsユーザとの別名をマップ出来る。
security = user

;ユーザパスワードデータベース(スタンドアロンサーバでもって小規模サーバに有効)
;データベースの移行(smbpasswd→tdbsam)がこのコマンドで行える。
;pdbedit -i smbpasswd:/etc/smbpasswd -e tdbsam:/etc/samba/passdb.tdb
passdb backend = tdbsam

;この値は、Sambaがブラウザを選ぶために、どのくらいのレベル通知を行うかを決める。65だとレベル的にはWinNTの一つ上の値を示す。NTと同じだと64でBDCとして設定するなら、20程度が良いだろう。
os level = 65

;これがYesだと、このドメインのマスターブラウザで有ることを示す。
domain master = Yes

;これを指定すると、sambaは起動時に強制的にローカルブラウザ選択を行い、ブラウズマスター選択に勝つ可能性が高くなる。
preferred master = Yes

;administratorを管理者として予め設定する(rootを管理者とすることも出来るが、セキュリティ的には好ましくない)。
admin users = administrator

ドメインコントローラであることを指す。;これがYesだとSambaサーバはWindows9xのドメインログオンによるWorkgroupへの参加に対応する。
domain logons = Yes

;Yesで、このドメインの中でLMB(ローカルマスターブラウザ)で有ることを示している。
local master = Yes

;logonスクリプトファイルの指定。
logon script = script.bat

;NTの時のサーバマネージャのようにドメインへ参加するPCを登録する。
add user script = /usr/sbin/useradd %u

add group script = /usr/sbin/groupadd %g

add machine script = /usr/sbin/useradd -g machine -c Machine -d /dev/null -s /bin/false %m$

delete user script = /usr/sbin/userdel %u

delete user from group script = /usr/sbin/deluser %u %g

delete group script = /usr/sbin/groupdel %g

;サーバの識別フィールド文字。
;%vは、このsambaのバージョン %hは、ホスト名。
server string = Samba %v on %h

;アクセス制御を設定する(いわゆるセキュリティ)。
hosts allow = 192.168.0. 192.168.3. 192.168.10. 127.

;sambaログファイルのパス指定。
log file = /var/log/log.%m

;sambaログの切り分け上限容量(単位はkB単位、したがって、この例では50kB)。
max log size = 1000

;パスワードの暗号化を行う。Windowsと同じレベルの暗号化を実現する。
encrypt passwords = Yes

;Unix側のアカウントとWindows側のアカウントの別名定義(ここでは使わない)。
;例えば、こんな感じに定義する。root = “administrator”
;username map = /etc/samba/smbusers

;unix password syncパラメータを真に設定することで、Sambaパスワードが変更されるタイミングで、UNIXのパスワード変更コマンドを起動することができる。ただし、あまり使うことを推奨はしない。
;このコマンドは passwd programパラメータで指定する。この指定を実現するには、以下点線で囲ってある部分のように設定する。
;----------------------------------
;sambaパスワードが変更されたとき、sambaがUnixパスワードをSMBパスワードと同期させるか否かの設定。
unix password sync = Yes

;UNIXパスワードを変更コマンドと引数を指定する。
passwd program = /usr/bin/passwd %u

;passwdコマンドとやり取りする対話の内容を指定する。
passwd chat = *New*password* %n\n *ReType*new*password* %n\n *passwd:*all*authentication*tokens*updated*successfully*

;password chatのデバッグをするか否か。logへpassword chatの稼働状態を出力させる。
passwd chat debug = Yes

;----------------------------------

;クライアントとの通信の時に使用されるソケットオプションを指定する。
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

;sambaのNMBプロセスがWINSサーバとして動作させるか否かを指定する。
wins support = Yes

;logonスクリプト置き場指定、以下で指定したパスへlogonスクリプトファイル script.bat を設置する
[netlogon]
comment = Network Logon Service
path = /home/netlogon
guest ok = Yes
writable = No
share modes = No
browseable = no

[homes]
comment = %U’s Home Directory
browseable = no
writable = yes
create mask = 0644
directory mask = 0755

[public]
comment = public directories
path = /usr/common
public = yes
browseable = yes
guest ok = no
writable = yes
directory mask = 0774
create mask = 0774
read list = readusers
inherit permissions = yes
valid users = @adm @users


4.logonスクリプトを作る
上記のsmb.confの設定では、/home/netlogonディレクトリへscript.batをファイルを作らなくてはならない。logonスクリプトは、Windows環境で使われるため、Unix上でスクリプトファイルを作成する場合は、行末コードをCR+LFにしなければならないためnkfコマンドで変換しなくてはならない。したがって、以下の要領で作成して、変換する。

1)スクリプトファイルを作る
[root@infosystem netlogon]# vi script.bat
@echo Mapping Network Drives to Samba Server Infosys…
net use m: \\infosystem\homes /persistent:no
net use p: \\infosystem\public /persistent:no
:end

このスクリプトは、ネットワークドライブが割り当てられるlogonスクリプトだ。
ここで、接続先の共有と認証情報が一致しているならユーザー名とパスワードは省略可能。”/persistent:no“オプションは自動接続を無効にするので、起動時にダイアログが出ることはない。

2)nkfでコードを変換する
[root@infosystem netlogon]# nkf -Lw script.bat > script.bat.dos
[root@infosystem netlogon]# mv script.bat.dos script.bat


5.UnixユーザとWindowsユーザの対応付け
[root@infosystem samba]# vi smbusers
root = “root”
taro = “taro”
hanako = “hanako”

左側がUnixユーザ名、ダブルクォーテーションに囲まれた方がWindowsユーザ名。
したがって、Windows側を「Administrator」にしたい場合は、
root = “Administrator”
となる。しかし、ここではadministratorユーザを登録するので使わない。


6.Unix側及びsamba側のアカウント登録
samba3.xからユーザ登録がsmbpasswdコマンドとは別にpdbeditコマンド、tdbsam(TDB形式のデータベース)が追加されている。このコマンドはsmbpasswdよりオプションスイッチが豊富にそろっている。sambaのユーザ登録の流れは以下の手順で行う。
①Unixグループアカウント登録
②Unixユーザアカウント登録
③Sambaユーザアカウント登録
④Sambaグループマッピング

1)旧smbpasswdデータベースからtdbsamデータベースへの移行
すでに、smbpasswdデータベースにユーザ登録されている場合は、以下のコマンドでtdbsamデータベースへ変換する。
[root@infosystem samba]# pdbedit -i smbpasswd:/etc/smbpasswd -e tdbsam:/etc/samba/passdb.tdb
確認のため、リストビューする。
[root@infosystem samba]# pdbedit -L

2)手動でアカウント登録する
Unixグループ登録(administratorアカウントを作る)。
[root@infosystem samba]# groupadd adm

Unixユーザ登録。
[root@infosystem samba]# useradd -g adm -s /bin/false administrator

-s /bin/false でUnixへのログインを許可しない設定にする。

Unixパスワード登録。
[root@infosystem samba]# passwd administrator
Changing password for user administrator.
New UNIX password:xxxxxxxxx
Retype new UNIX password:xxxxxxxxx
passwd: all authentication tokens updated successfully.

samba側ユーザアカウント登録。
[root@infosystem samba]# pdbedit -a administrator
new password:xxxxxxxxx
retype new password:xxxxxxxxx
Unix username: administrator
NT username:
Account Flags: [U ]
User SID: S-1-5-21-1650155960-2306966453-742414220-2012
Primary Group SID: S-1-5-21-1650155960-2306966453-742414220-513
Full Name:
Home Directory: \\infosystem\administrator
HomeDir Drive:
Logon Script: script.bat
Profile Path: \\infosystem\administrator\profile
Domain: INFOSYS
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: Sat, 14 Dec 1901 05:45:51 GMT
Kickoff time: Sat, 14 Dec 1901 05:45:51 GMT
Password last set: Thu, 16 Nov 2006 13:36:29 GMT
Password can change: Thu, 16 Nov 2006 13:36:29 GMT
Password must change: Sat, 14 Dec 1901 05:45:51 GMT
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

ここでは紹介していないが、予めこの要領で他のユーザも登録しておく。

ユーザ情報の表示。
[root@infosystem samba]# pdbedit -v administrator

3)確認のためリストビューする
[root@infosystem samba]# pdbedit -L

4)ちなみにユーザを削除する場合は
[root@infosystem samba]# pdbedit -x <ユーザ名>

[root@infosystem samba]# userdel -r <ユーザ名>


7.UnixグループとWindowsグループの対応付け(グループマッピング)
これも、samba3.xから必要な作業となった。net groupmapコマンドを使って、Unix側のグループ名とWindows側のグループ名を対応づける。つまり、グループマッピングとはUnixグループをWindowsグループのように使うための機能である。

UnixのusersグループをWindowsのDmain Usersグループと同等とする。
[root@infosystem samba]# net groupmap modify add NTgroup=”Domain Users” UNIXgroup=users

UnixのusersグループをWindowsのUsersグループと同等とする。
[root@infosystem samba]# net groupmap modify add NTgroup=”Users” UNIXgroup=users

UnixのusersグループをWindowsのDmain Adminsグループと同等とする。
[root@infosystem samba]# net groupmap modify add NTgroup=”Domain Admins” UNIXgroup=adm

UnixのadmグループをWindowsのAdministratorsグループと同等とする。
[root@infosystem samba]# net groupmap modify add NTgroup=”Administrators” UNIXgroup=adm

samba3.xxからの仕様が変わって、modifyではマッピングできなくなっていた。

リストビューする。
[root@infosystem samba]# net groupmap list
System Operators (S-1-5-32-549) -> -1
Replicators (S-1-5-32-552) -> -1
Guests (S-1-5-32-546) -> -1
Power Users (S-1-5-32-547) -> -1
Print Operators (S-1-5-32-550) -> -1
Administrators (S-1-5-32-544) -> adm
Account Operators (S-1-5-32-548) -> -1
Domain Users (S-1-5-21-1650155960-2306966453-742414220-513) -> users
Domain Admins (S-1-5-21-1650155960-2306966453-742414220-512) -> users
Domain Guests (S-1-5-21-1650155960-2306966453-742414220-514) -> -1
Backup Operators (S-1-5-32-551) -> -1
Users (S-1-5-32-545) -> -1


8.password chatでのパスワードの同期
unix password syncパラメータを真に設定することで、Sambaパスワードが変更されるタイミングで、UNIXのパスワード変更コマンドを起動することができる。
このコマンドは、smb.conf中のpasswd programパラメータで指定する。このpassword chatを実現するには、smb.confで以下のように設定する。

;sambaパスワードが変更されたとき、sambaがUnixパスワードをSMBパスワードと同期させるか否かの設定。
unix password sync = Yes

;UNIXパスワードを変更コマンドと引数を指定する。
passwd program = /usr/bin/passwd %u

;passwdコマンドとやり取りする対話の内容を指定する。
passwd chat = *New*password* %n\n *ReType*new*password* %n\n *passwd:*all*authentication*tokens*updated*successfully*

;password chatのデバッグをするか否か。logへpassword chatの動作状態をlogへ書き込む。
passwd chat debug = Yes


9.マシンの手動登録(但し、smb.confにadd machine scriptが定義されている場合は必要なし)。
[root@infosystem samba]# adduser D4QC4N1X$
[root@infosystem samba]# pdbedit -a -m D4QC4N1X

Unknown parameter encountered: “domain admin group”
Ignoring unknown parameter “domain admin group”
Unknown parameter encountered: “os charset”
Ignoring unknown parameter “os charset”
Unix username: D4QC4N1X$
NT username:
Account Flags: [W ]
User SID: S-1-5-21-1650155960-2306966453-742414220-2004
Primary Group SID: S-1-5-21-1650155960-2306966453-742414220-2007
Full Name:
Home Directory:
HomeDir Drive: (null)
Logon Script:
Profile Path:
Domain: INFOSYS
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: Sat, 14 Dec 1901 05:45:51 GMT
Kickoff time: Sat, 14 Dec 1901 05:45:51 GMT
Password last set: Wed, 15 Nov 2006 14:00:43 GMT
Password can change: Wed, 15 Nov 2006 14:00:43 GMT
Password must change: Sat, 14 Dec 1901 05:45:51 GMT
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

これで、準備OK。
sambaを再起動する。


10. クライアント設定の注意点
1)クライアント側のドメイン参加について

図1
図2
図3

図2の画面で「ドメインに参加するためのアクセス許可の有るアカウント」は、sambausersでの対応ずけがrootであるため、ここでは root アカウントとパスワードを入力してドメイン参加すること。さらに、図3のようなメッセージが出ればドメインログオンOKだ。

2)ドメイン参加の確認
ドメインに参加して、マシン登録が旨くできているかを確認する。

[root@infosystem samba]# pdbedit -L
省略
D4QC4N1X$:512:D4QC4N1X$
省略

WinsServerを立ててる場合は、wins.datに以下のように自動的に追加される。
[root@infosystem samba]# more /var/cache/samba/wins.dat
VERSION 1 0
“__MSBROWSE__#01” 1172172054 255.255.255.255 e4R
省略
“D4QC4N1X#00” 1172172179 192.168.3.12 64R
“D4QC4N1X#03” 1172217684 192.168.3.12 64R
“D4QC4N1X#20” 1172217683 192.168.3.12 64R

省略


11.SambaにおけるWinsServer機能

Sambaが使う名前解決方法は、
■ hosts
■ lmhosts
■ wins
代表されるのは以上だ。hosts正確に言うとDNSもそうだ、言ってみればUnix標準の名前解決方法である。
lmhostsは、Netbios名(ホスト名)からIPアドレスを割り当てる名前解決方法だ。言ってみればhostsをまねしたWindows名前解決方法とでも言っておこう。winsは、Windowsネットワーク独特の名前解決方法である。言い換えればWindows専用DNSサーバみたいな物とでもおぼればいいじゃん、みたいな。
以上の3つの中でhostsもlmhostsも決められたファイルにホスト名とIPアドレスの対応表を事前にテキストで書き込んでおくものだ。
しかし、winsは少し特殊だ。鯖としてデータベース管理するのでWindowsでは専用の管理ソフトでトランザクションを行う。
これからこの中のSambaにおけるwinsのインストール方法を説明する。

1)Windows鯖に既に構築されているwins鯖を指定する場合
これは、すごく簡単smb.confに以下の記述を追加する。

wins server = 192.168.0.1 192.168.3.1

こんな感じで指定すると良い。IPアドレスは指定したいwins鯖である。

2)sambaでwins鯖を構築する場合
当然、sambaでもwins鯖は作れる。smb.confへ以下の一文を記入する。

wins support = Yes

それで、sambaを再起動すると、/var/cache/samba(場所が違う場合もある)に以下のようなwins.datファイルができる。sambaを再起動すると、現在そのドメインに参加してるホストがwins.datに自動登録される。

[root@infosystem ~]# more /var/cache/samba/wins.dat
VERSION 1 0
“INFOSYS#00” 1164599978 255.255.255.255 e4R
“INFOSYS#1b” 1164599978 192.168.3.6 64R
“INFOSYS#1c” 1164599978 192.168.3.6 e4R
“INFOSYS#1e” 1164599978 255.255.255.255 e4R
“INFOSYSTEM#00” 1164599978 192.168.3.6 66R
“INFOSYSTEM#03” 1164599978 192.168.3.6 66R
“INFOSYSTEM#20” 1164599978 192.168.3.6 66R

■ エントリ文の説明。
“INFOSYSTEM#00” 1164599978 192.168.3.6 66R

INFOSYSTEM  → NetBIOS名。
#00         → リソースタイプ。
116459997    → TTLを表す、このエントリに対しての有効期限。
192.168.3.6    → この対象のNetBIOS識別子をサービスしているホストのIPアドレス。
66R        → 種別を表す。SがSelf、RがRegisterを表し、Rが指定されたエントリのみが利用可能。

と言うことで、このwins.datファイルをエディタにより編集・エントリ追加することでsambaでwins鯖が実現できる。


12.Samba3.0におけるドメイン間の信頼関係の結び方

1)信頼関係を結ぶマシンの情報
Samba鯖
ホスト名(ホストA):infosystem
ドメイン名(ドメインA):infosys

WindowsNT鯖
ホスト名(ホストB):filesava
ドメイン名(ドメインB):manager

2)信頼関係を結ぶ手順
■ ドメインA信頼する側へドメインBを追加する。
■ ドメインB信頼される側へドメインAを追加する。
■ ドメインB信頼する側へドメインAを追加する。
■ ドメインA信頼される側へドメインBを追加する。
これで、双方向に信頼関係が成り立つことになる。

3)具体的な方法

■ ドメインA信頼する側へドメインBを追加する。
信頼関係を結ぶためのUnixユーザアカウントとsambaマシンアカウントが必要。
[root@infosystem ~]# groupadd trust_domain
[root@infosystem ~]# useradd -g trust_domain manager$
[root@infosystem ~]# smbpasswd -a -i manager

アカウント作成の確認を行う。信頼関係を結ぶアカウントで有るかどうかはAccount Flagsが「I」であればいい。
[root@infosystem ~]# pdbedit -v manager$
Unix username: manager$
NT username:
Account Flags: [I ]
User SID: S-1-5-21-1650155960-2306966453-742414220-2014
Primary Group SID: S-1-5-21-1650155960-2306966453-742414220-2015
Full Name:
Home Directory: \\infosystem\manager_
HomeDir Drive:
Logon Script: mount.bat
Profile Path: \\infosystem\manager_\profile
Domain: INFOSYS
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: Sat, 14 Dec 1901 05:45:51 GMT
Kickoff time: Sat, 14 Dec 1901 05:45:51 GMT
Password last set: Fri, 17 Nov 2006 18:24:42 GMT
Password can change: Fri, 17 Nov 2006 18:24:42 GMT
Password must change: Sat, 14 Dec 1901 05:45:51 GMT
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

■ ドメインB信頼される側へドメインAを追加する。
WindowsNTサーバのユーザマネージャーの原則の中の信頼関係で設定する。

図4
図5

■ ドメインB信頼する側へドメインAを追加する。
信頼する側のドメイン(infosys)を追加。

図6

すると、以下のように双方向登録される。

図7

■ ドメインA信頼される側へドメインBを追加する。
samba側の信頼される側のドメインにWindows2000鯖のドメイン(manager)を追加する。
[root@infosystem ~]# net rpc trustdom establish manager
password: **********

これで見事に信頼関係が結ばれた。
余談だが、人間同士の信頼関係もこんなに簡単に結ぶことが出来たら嬉しいけど・・・・・。
本当に信頼して貰いたい人から信頼されたいし、こちらからも信頼したい。「お互いに心を開いて信頼関係を結ぶ!」って永遠の課題かな(笑)。ρ(^◇^)ノ.はーいっ

以上

コメント