Sambaの設定と雛形ユーザーの登録

いろいろなところから情報を集め試行錯誤をしている。昔のメモをみても設定方法が二転三転していてかなり遠回りをしている。これをすべて説明すると長くなりすぎるので初めから最短で「いま当時のシステムを構築するなら」というつもりで解説する。したがって実際にやってもこの順番ではうまくいかないという場面がないとは言えない。もっとも、当時といまでは流布しているソフトのバージョンも異なりあまり正確になぞっても意味がないと思われる。

当時(2000年〜2005年)のサーバーOSは Miracle Linux からはじまり、のちに RedHat Linux 7.2 になった。Sambaも2系のものを使っていた。クライアントは Windows Me である。

現在(2006年)のサーバーOSは Debian GNU/Linux に代わり、Sambaも3系、認証もLDAPになっている。これについてはまた別にレポートする予定。

サーバーの構成

1台のLinuxサーバーでSambaを動かし、これをドメインコントローラーとする。のちにもう一台を加え、内部向けDNSサーバーとインターネットに接続を制御するプロキシーサーバーの役割をさせている。

初期のサーバーは200MHzの無印Pentiumで40台のクライアントをこなした。80台になってからは700MHzのPentium3である。どちらもWindowsで使い古してよりスペックの高いものに買い換えた余りを再利用したもの。ネットワークカードをサーバー用のものにし、データ用にHDDを増設して使った。これでも十分に使えたのはX-windowを入れずに、コンソールだけで使用していたからである。

インストールが終わり、実際の運用になれば telnet (その後ssh)を使ってWindowsからのリモート運用にしている。tera-term や PuTTY を使っている。

現在はOpenOffice.orgというオフィスソフトをネットワークドライブとして接続したドライブにインストールして使用しているので、さすがに700MHzでは苦しく、2300+のSempronマシンに代えている。しかしここで解説するシステムは700MHzのサーバーで運用されていたものである。

Samba の設定

Linuxそのもののインストールは解説本がたくさんあるので取り扱わない。Sambaの設定からはじめる。ただしこの時代はバージョン2の系列。Windows9Xと呼ばれる Windows95,98,Me がクライアントならばこちらの方が設定が楽。現在(2006-1-20)の2系の日本語版の最新は Samba 2.2.11 日本語版リリース1.0 (2004/09/10)となっている。

最近のSambaはSWAT(Samba Web管理ツール)で基本的な部分は設定できるようになっているが、私は使ったことがない。基本的にコンソールかtelnet(ssh)で vi というエディタを使用して、smb.conf を設定する。

smb.confにはたくさんの設定項目があるが、ほとんどはデフォルトで大丈夫。とはいうもののドメインコントローラーとして使う場合は面倒かも知れない。

smb.confは [global] [netlogon]などの行ではじまるセクションにわかれており、[global]には全体の、その他のセクションには共有ごとの設定を記述する。

[global]
  全体の振る舞いを決める設定
[netlogon]
  \\サーバー名\netlogon でアクセスされる共有の設定
[share]
  \\サーバー名\share でアクセスされる共有の設定
[home]
  \\サーバー名\ユーザー名 でアクセスされる特別な共有の設定
....

[global] セクションに記述

ファイル名に日本語文字を使う場合に、sambaが受け取る文字をどの国の文字として解釈するか(client code page)と、Linux上のファイル名をどうするか(coding system)を指定する。はじめた当時はこれが一番安心できた。ただし、バージョンが2ではじまる系列。3系ではHEXは特別なことをしないと使えない。

client code page = 932
coding system = HEX

アクセス権の管理はuserにする。(最近はこれがデフォルトのはず)

security = user

windowsでは各マシンにワークグループなるものを設定する。sambaにもそれを設定する。ドメインを構成する時はワークグループ名がドメイン名になる。ただしここのドメインはマイクロソフト社の用語であってインターネットドメインではない。基本的に何でもよいが、ドメインを構成する時はこの名前がログオン先の名前になる。

workgroup = vine

windowsはネットワークにwindowsマシンがどれだけ存在するかの一覧を自動的に作る。その一覧表をどのマシンが持つかを自動的に決定するしくみがある。それにどのように関わっていくかの設定。

一覧をもつマシンを「マスター」とよぶ。ネットワークがセグメントに分かれている時はセグメント毎に local master ができる。それを統括するのが domain master である。 domain master はワークグループ(ドメイン)ごとに作られる。マスターにを決めるマシン同士の相談の時に出すカードが os level で、この数字が大きいものがマスターになる。

domain master = yes
local master = yes
os level = 33
preferred master = yes

ドメインコントローラーになることを指示し、ユーザがログインした時に実行するバッチファイルを指定する。

domain logons = yes
logon script = logon.bat

移動ユーザープロファイルを有効にする。Windows 9x がログオンする際に用いられるホームディレクトリの位置を指定するもの。smb.confの説明(man)では \\%N\%U\profile とあるが、フォルダを不可視にするためピリオドをつけている。本質的な違いはない。

logon pathはNT系のwindowsで使われるもので、本校では不要だが同じにしてある。(事情はもう少し複雑なのだが省略)

%Nはサーバー名に、%Uはユーザー名に置換され、ユーザー毎に異なる場所が指定されることになる。

この指定でユーザーのホームディレクトリは \\%N\%U になり、プロファイルデータは \\%N\%U\.profile というディレクトリの中に格納される。このへんの仕組みはsmb.confの説明にある。

logon home = \\%N\%U\.profile
logon path = \\%N\%U\.profile

[netlogon] というセクションを作成

大抵は雛形が書いてあるので行頭の#を消すとよいようになっている。

このnetlogonという名前が共有名になる。サーバー名がjoelとすると、windowsからは \\joel\netlogon という共有名でアクセスできる。

[netlogon]
  path = /home/netlogon
  write list = adachi,otawa

これは、ネットワークログオンスクリプトと CONFIG.POL ファイル、の存在場所を教えるためのセクションである。

[homes]というセクションを作成

ここは生徒のホームディレクトリとなるところ。pathを指定しないと自動的にlinuxのユーザーのホームディレクトリをあてがう。普通、path=/home/%U と指定したのと同じになる。(sambaのユーザーはlinuxにユーザーとして登録されている必要がある)

この共有は特別で、共有名は home でない。サーバー名がjoel、アクセスするユーザー名が hoge とすると、\\joel\hoge という共有名になる。

[homes]
comment = Home Directories
valid users = %S
read only = No
create mask = 0600
directory mask = 0700
browseable = No

[public]というセクションを作成

個人のウェブページの格納場所。ログオンには必須でない

普通、ホームディレクトリの中に public_html というディレクトリ(フォルダ)を作ってウェブページのhtmlファイルを置くことで、ウェブページとして公開される。しかし、ホームディレクトリのファイルを他人からアクセスさせないように設定しているので、その下の public_html もウェブからアクセスできないようになってしまう。linux側からならこの設定ができるが、windowsからsambaでアクセスしている場合この設定ができない。そこで、ホームディレクトリと別に本人しか書き込みできないが誰もが読めるディレクトリを作ることにする。

path = /home/public/%U なので、これもユーザーごとに異なる場所をさすことになる。共有名はサーバー名がjoelとすると、\\joel\public という共有名になる。これは特別扱いではない。public はセクション名[public]からきている。path = /home/public/%U のpublicではない。

[public]
comment = public_html
path = /home/public/%U
write list = %U
create mask = 0644
browseable = No

[share]というセクションを作成

学習資料の配布場所。ログオンには必須でない。性格上、生徒は読込のみの許可。現在は資料配付はウェブからおこない、ここはOpenOfficeやFirefoxなどのアプリケーションのインストール場所になっている。(教師がインストールし生徒は使用するだけ可能)

サーバー名がjoelとすると、\\joel\share という共有名でアクセスできる。

[share]
path = /home/share
write list = adachi,otawa
guest ok = Yes

[www]というセクションを作成

授業テキストの格納場所。ログオンには必須でない

sambaを通しては教師だけが読み書きできる。ウェブサーバー経由では生徒も読むことができるという設定。

許可のある教師からは、サーバー名がjoelとすると、\\joel\www という共有名でアクセスできる。

[www]
  path = /zhome/httpd/html
  valid users = adachi,otawa
  write list = adachi,otawa
  force group = @tch
  create mask = 0644
  directory mask = 0775
  browseable = No

ひとりのユーザーの登録

まず、雛形ユーザーの unix アカウントを作ることにする。ユーザー名はなんでもよいが英字で始まる英数字8桁以内の文字列とすること。ここでは例として hoge とした。

unix アカウントとはlinuxをlinuxとして使用するためのユーザー登録をしたそのユーザー名。linuxはunixクローンなので、習慣的にこの呼び名になっている。sambaを経由してのみの使用でもこれは必要。

hogeというユーザーを登録する場合は、次のようにする。以下、コマンド先頭の # は root 権限(windowsでいうadministrator権限)が必要なことを表す。(一般ユーザーでは $ 。ただし、各種設定ファイルでの # はそれ以降行末まで注釈であることを表すことが多い)

# useradd hoge

システムによりいろいろ必要事項を尋ねてくる場合とデフォルトで設定してしまう場合がある。パスワードは2回聞いてくるので同じものを入力し、一致すると登録される。パスワードを聞いてこない場合や、パスワードを変更する場合は、次のようにする。

# passwd hoge

やはり、2回入力を要求される。

次にsambaにも登録する。

# smbpasswd -a hoge

smbpasswd は本来パスワードの変更コマンドだが、-a を入れることで新規(add)の意味になる。やはり、2回入力を要求される。

実際の生徒の登録では一人一人これをやっていられないので、スクリプトを書いて自動化する。

ディレクトリを整備

sambaの設定で使用するように書いたフォルダを作る。

すでにunixアカウントを作ったことで、/home/hoge というディレクトリが作成されているので、残りを作る。

個人のウェブページ用スペース

# mkdir /home/public/
# mkdir /home/public/hoge
# chmod 755 /home/public -R
# chown hoge:hoge /home/public/hoge

shareとnetlogon

# mkdir /home/share
# chmod 755 /home/share
# mkdir /home/netlogon
# chmod 755 /home/netlogon

/zhome についてはウエブサーバーとの関連ですでに作成済みとする。ただ、/zhomeとしているのは、本校の歴史的特殊事情による。最近では、以下に設定されていることが多い。

/var/www

この場合はsmb.conf内の記述をこれに合わせておくこと。

諸事情から /home/hoge の中に、userディレクトリを作っておく。hoge でログインして作れば chown はいらないのだが、一気にやってしまう。

# mkdir /home/hoge/user/
# chmod 700 /home/hoge/user/
# chown hoge:hoge /home/hoge/user/

/home/hoge/user/をマイドキュメントとして設定することを見越している。/home/hoge/内のunix系の設定ファイルが既にあり、加えてプロファイルデータやメールボックスをここに置くので、それが目に入らないようにできて便利だ。

sambaの起動

testparm コマンドで設定ファイルの書式を確認した後、sambaを起動、あるいは再起動する。方法はディストリビューションによるが、debianならこのようになる。

# /etc/init.d/samba start

その他の設定

システムポリシー

これは、[netlogon] にCONFIG.POLを置くというだけ。このファイルは内部構造が明らかでないのでマイクロソフトのツールを使用する必要がある。とりあえず無くてもドメインログオンは実現できるのでこれについてはシステムポリシーで詳説する。

ホームディレクトリの接続など

これも、[netlogon] に logon.bat というバッチファイルを置くというだけのこと。移動プロファイルでもマイドキュメントを扱えるが、Sambaファイルサーバーにも示したようにlogonのたびにデータをコピーすることになる。これでは大変なので、この方法を使わず、代わりにネットワークドライブとして接続することにする。

logon.bat の内容は次のようにしている。このファィルはwindows上で作成すること。linux と windows では改行のコードが異なるので linux の改行では動作しない。

net time \\joel /set /yes
net use s: \\joel\share
net use u: /home
mkdir c:\del_work
move c:\recycled\*.* c:\del_work
deltree /y c:\del_work

それぞれの意味は次の通り。

net time \\joel /set /yes
時刻をサーバーに合わせる。
net use s: \\joel\share
\\joel\share を s: ドライブとして接続する。
net use u: /home
ユーザーがhogeの時、\\joel\hoge を u: ドライブとして接続する。
mkdir c:\del_work からの3行
ごみ箱の中を空にする。必須ではないが、これをしないとMeの場合、前のユーザーが捨てたファィルを拾うことができてしまう。

windowsの起動時にユーザー名とパスワードを入れると、そのユーザー名でlogon.batが働き、ドライブが接続される。ドライブの接続に失敗することがまれにあるが、しばらくしてからその原因が判明した。ユーザー名とパスワードを入れた後[OK]をクリックするか、[Enter]キーを押すが、[Enter]キーをすばやく2度押すと、ドライブが接続されずに起動する。これは、起動時にもう一つのスクリプト(WSH)を実行させることで解決した。

サーバーへの雛形ユーザーの登録

NTをサーバーにするネットワークでは新規ユーザーはNTサーバーの方から登録しなければならないのはもちろんである。このときユーザーのプロファイルも自動で作ってくれる道具があるはず。今回試みているのは samba サーバーがNTのふりをするしくみなので登録のための道具はなく、工夫しなければならない。

プロファイルデータの雛形を作成

まず、Windows9Xの側で様々な設定を済ませる。

次にユーザープロファイルを有効にする。この時点で上記のユーザーでログオンする。ここでもさらにやっておくことがある。これらは雛形ユーザーの設定になる。

この設定は、ローカルの c:\windows\profiles\beta にプロファイルデータとして記録される。

次にwindowsがドメインにログオンするように設定して再起動。この時点で、sambaサーバーが認証することになるる

ログオフをするとプロファイルデータがサーバーにコピーされる。 場所は windowsからみて、\\joel\hoge\.profile 、linux 側から見て /home/hoge/.profile になる。

これを雛形ユーザーのプロファイルとしてコピーをして使用する。

コピーは、linux側からおこなう。 hoge は今後メンテナンスなどでlogonをするので不用意に設定を変えないように 適当な場所にコピーをしておきそこから各ユーザーにコピーして使用する。

もちろん、パーミッションにも気を使わなければならない。

それではどのようにwindowsをセットするかは次回。

 ▲ 
聖愛高等学校
http://www.seiai.ed.jp/
Last update: 2006-3-13