ファイルサーバの構築、といいながら前回はsambaの話にたどり着く前に終わってしまったので、今回はsambaについて書いてみますかね。 プレインストールの状態でsambaが入ってましたが、入ってなければ up2date -i sambaとでもすればインストールできると思います。 Fedora CoreやCent OSなら、yum install sambaですね。
で、/etc/samba/smb.confを編集して設定を行います。 とりあえず以下の内容にして、testparmで問題がないことを一応確認。 OKならば、/sbin/service smb start してみます。 これまたOKなら、次回ブート時は自動起動するように、/sbin/chkconfig --level 2345 smb on としておけばよいかと。
[global] # UNIX側での日本語文字コードの設定。最近のFedora CoreやRHEL 4なら UTF-8 ですね unix charset = EUCJP-MS display charset = EUCJP-MS dos charset = CP932 # ドメインの名称 workgroup = MYDOMAIN # Windowsのクライアントから見えるサーバ名 netbios name = myserver # Windowsのクライアントから見えるサーバのコメント server string = Samba Domain Controller # ドメインを構築してPDCになるので user を指定 security = user # OpenLDAPでやればBDCも作れますし、スケーラビリティに優れてるようですが、 # 今回はクライアントの台数も限られてるし、tdbsamで当面充分でしょう passdb backend = tdbsam # ユーザが共有資源上の個別のファイルを読み書きした状況もログに残すようにします log level = 2 log file = /var/log/samba/%m.log max log size = 500 # 以下、Windowsのユーザマネージャからユーザの追加や削除をした際に実行されるコマンド add user script = /usr/sbin/useradd -m %u delete user script = /usr/sbin/userdel -r %u add group script = /usr/sbin/groupadd %g delete group script = /usr/sbin/groupdel %g add user to group script = /usr/sbin/usermod -G %g %u add machine script = /usr/sbin/useradd -s /bin/false -d /dev/null -g machines %u # sambaのパスワードを変更した際にUNIX上のアカウントのパスワードも同期させる設定 passwd program = /usr/bin/passwd %u passwd chat = *New*password* %n\n *Re*new*password* %n\n *success* unix password sync = Yes # Windowsクライアントでログオンした際に実行されるバッチファイル logon script = logon.bat logon path = # 以下、ドメインのPDCになり、WINSサーバになるための設定 domain logons = Yes os level = 65 preferred master = Yes domain master = Yes local master = Yes wins support = Yes time server = Yes # sambaにアクセスできるIPアドレスの範囲を制限 # (実際にはもちろん192.168.X.ではないので環境に合わせて修正する必要があります) hosts allow = 192.168.X. 127. remote announce = 192.168.X.255 remote browse sync = 192.168.X.255 socket options = IPTOS_LOWDELAY TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 admin users = @admins guest account = nobody [netlogon] comment = Network Logon Service path = /var/samba/netlogon/scripts guest ok = Yes browseable = No [Profiles] comment = Roaming Profile Share path = /var/samba/profiles read only = No browseable = No |
logon.batは、とりあえずサーバに時刻を同期させるために net time \\myserver /set /yes
なんて内容で /var/samba/netlogon/scripts に置いておきます。
Windowsで実行されるので改行コードは CR+LF にしないといけないようです。
ちなみに Windows XPの持っている「自動的にインターネット時刻サーバーと同期する」機能はそのPCをドメインに参加させるとチェックが外れて無効になります。 そりゃクライアントとサーバで時刻がずれてたら、困りますしね。 もちろん、先ほどlogon.batで時刻をサーバに合わせるようにしたのも同じ理由です。 今回の場合、クライアントにドメインへの参加機能を持たないHome Editionも一部混ざってるので、後でntpの設定もしようと思ってます。
UNIXのグループと、Windowsネットワーク上のグループ名は異なります。 そもそもWindowsのビルトイングループでは「Domain Users」とかスペースを含むものもあるのでやっかいです。 そこで、sambaにはUNIX上のグループとWindowsのグループの対応付けをする機能があるので、とりあえず groupadd users、groupadd adminsとでもして、UNIXグループを作成しておいてから、
net groupmap modify unixgroup=users ntgroup="Domain Users" net groupmap modify unixgroup=users ntgroup="Users" net groupmap modify unixgroup=admins ntgroup="Domain Admins" net groupmap modify unixgroup=admins ntgroup="Administrators" net groupmap modify unixgroup=nobody ntgroup="Domain Guests" net groupmap modify unixgroup=nobody ntgroup="Guests"
とすると、unixのusersグループはWindowsのドメイン上のDomain Users、Usersというように扱われるわけです。 net groupmap listとすると、
System Operators (S-X-X-XX-XXX) -> -1 Domain Users (S-X-X-XX-XXXXXXXXX-XXXXXXXXX-XXXXXXXXX-XXX) -> users Replicators (S-X-X-XX-XXX) -> -1 Guests (S-X-X-XX-XXX) -> nobody Domain Guests (S-X-X-XX-XXXXXXXXX-XXXXXXXXX-XXXXXXXXX-XXX) -> nobody Power Users (S-X-X-XX-XXX) -> -1 Print Operators (S-X-X-XX-XXX) -> -1 Administrators (S-X-X-XX-XXX) -> admins Account Operators (S-X-X-XX-XXX) -> -1 Domain Admins (S-X-X-XX-XXXXXXXXX-XXXXXXXXX-XXXXXXXXX-XXX) -> admins Backup Operators (S-X-X-XX-XXX) -> -1 Users (S-X-X-XX-XXX) -> users
というように現在の対応状況が表示されます(-1は対応付けを行っていないもの)。 ちなみに、規定のグループじゃなくて、このリストにないグループの場合は、modifyでなくaddで対応を作成します。
ドメインを作ったところで、ユーザとPCのアカウントを作らないといけませんが、その前にドメインのアカウントポリシーを変更しておくことにしました。
pdbedit -P "maximum password age" -C 7776000 とすればパスワードの有効期間は3ヶ月になります。
ちなみに単位が秒であることに気がつかず(だって man pdbedit しても書いてなかったし)、90秒に設定してしまい、後で他のユーザから パスワードを変えるたびに有効期限が切れたってなるんですけど?
と指摘を受けたのは秘密です(^^;。
そのほか、pdbedit -P で設定できるのは、
などです。 例えば最低パスワード長を指定するなら、pdbedit -P "min password age" -C 6 等になります。 ドメイン管理者のアカウントを作成後に、Windowsでドメイン管理者としてログオンし、usrmgr.exeで変えることもできます。 というか、ユーザを作成して初期パスワードを設定した後、「次回ログオン時にパスワード変更」と設定する方法がわからず、そこだけ後から usrmgr.exe でやりました。
で、本題のユーザの作成は、useradd -m tanaka -g users とでもしてUNIX上のアカウントを作成し、続けて pdbedit -a tanaka でsamba上のユーザを作成します。
tanakaはもちろんサンプルなので、実際には作成したいユーザ名を入れます。 ドメイン管理者のアカウントの場合は、useradd -m admin -g users -G admins として、usersを主グループ、adminsを副グループにしておくことにしました。
人間のユーザだけでなく、ドメインに参加させるWindowsクライアントのアカウントもコンピュータ名で作っておかないといけません。 groupadd machines でグループを作っておいて、/usr/sbin/useradd -s /bin/false -d /dev/null -g machines pc001$ という感じになります。 PCなんでログインシェルは不要で、PC名の最後に$を付加して登録します。 sambaの方の登録は、pdbedit -a pc001 -m となり、PC用のアカウントだというオプション(-m)を付けるので、末尾の$は不要です。
PCをドメインに参加させるには、そのPCの管理者権限のあるアカウントでログオンしておいて、「コントロールパネル」−「システム」−「コンピュータ名」からドメインに参加させます。 上の例でいうと、MYDOMAINという名前のドメインを指定します。 その際、ドメイン側の管理権限を持つユーザ(今回の例で言えば先ほど作った admin ですね)のユーザ名とパスワードが必要になります。
何度か触れましたが、Windows XPではHome Editionにはドメイン参加機能がありません。 というかフォルダやファイルの暗号化とか、いろんな部分が割愛されているので、文字通り会社の業務用には使えないシロモノですね。 まぁ一応、PCをドメインに参加させなくても、エクスプローラでネットワークコンピュータを参照し、ユーザ名・パスワードを尋ねるダイアログにドメイン上のユーザ名、パスワードを入れることでネットワーク上の資源にアクセスすることはできないことはないですが。
あぁ、まだプリンタの共有設定とかもあったんだけど、長くなってきたので次回に続く(気力が続けば)。