ここでは、LinuxやBSDなどを中心としたUNIX系OSにおいて
Windows NT/2000互換のファイルサーバ/プリント・サーバ機能を提供するSamba
について解説していきます。Samba はバージョンがあがるたびに機能が拡張されており、現在の代表的な機能としては、ファイルサーバー機能、プリントサーバー機能、WINSサーバー機能、PDC機能(プライマリドメインコントローラ)、DFS機能(マイクロソフトの分散ファイルシステム)、ブラウザからSambaを簡単に管理できるSWAT
機能などがあります。Samba3.0 以降からはKerberos認証のサポートしたことにより、Windows
2000のActive Directoryへの参加も可能となっています。なお、当ページではそのSamba
の最も一般的な機能であるファイルサーバーに絞って解説していきます。
|
|
■samba3.0のダウンロード
■Samba のインストール
$ cd /usr/local/src/
$ tar xzvf samba-3.0.1.tar.gz
$ cd samba-3.0.1/source |
|
configureオプションには、デフォルトでno とされているいくつかのオプションを追加してみました。configure
--help で何がデフォルトで有効か無効かがわかりやすいので一度は見てみることをお勧めします。詳細に関しては以下表を参照してください。コンパイルは結構時間がかかるので珈琲タイム♪
$ ./configure --with-smbwrapper
\
--with-pam
\
--with-syslog
\
--with-quotas
\
--with-winbind
\
--with-acl-support
\
--with-profiling-data
\
--with-smbwrapper
\
--with-automount
\
--with-smbmount
\
--with-utmp
$ make
# make install |
|
◎オプション
|
--with-pam |
PAM認証を有効のサポート |
|
--with-syslog |
syslog への出力をサポート |
|
--with-quotas |
Quata 機能(容量制限)をサポート |
|
--with-winbind |
Windows NTドメインユーザーとUNIXユーザーの統一ログインを可能にする |
|
--with-acl-support |
ACL機能をサポート |
|
--with-profiling-data |
性能に関する情報の収集 |
|
--with-smbwrapper |
smbsh機能を有効にする |
|
--with-automount |
automountをサポート |
|
--with-smbmount |
smbfs機能をサポートするコマンドを作成 |
|
--with-utmp
|
utmpによるユーザーのアクセス記録の収集をサポート |
|
■smb.confの編集
Samba の設定ファイルはデフォルトではインストールされませんので、サンプルファイルからコピーして利用するか、自分で設定ファイルを作成してください。サンプルファイルは、ソースディレクトリ内の、examples
ディレクトリ、もしくは、packaging ディレクトリにいくつか用意されています。ここでは、RedHat用のサンプルファイルを参考に、必要最低限な設定箇所を以下に解説していきます。
# cp /usr/local/src/samba-3.0.1/packaging/RedHat/smb.conf
/usr/local/samba/lib/smb.conf
# ln -s /usr/local/samba/lib/smb.conf /etc/smb.conf |
|
samba3.0からの注意点としては、日本語の扱いが従来までのSamba の設定とは変更された点です。以下が従来までの記述の仕方です。
coding system =
euc
client code page = 932 |
|
Samba3.0からはパラメータが変更され、上記のような記述ではなく、以下のようにおきかわりました。
unix charset = EUC-JP
dos charset = CP932
display charset = EUC_JP |
|
|
unix charset |
UNIX側での文字コードの設定 |
|
dos charset |
Windows側での文字コードの設定。日本語を利用する場合は、CP932になります。 |
|
display charset |
swat で表示される文字コードの指定 |
|
■GLOBAL設定(Samba全体の設定)
[global]
unix charset = EUC-JP
dos charset = CP932
display charset = CP932
workgroup = kororo.jp //Windowsのドメインを指定
server string = Samba Server //コンピュータ名に表示されるコメント
hosts allow = 172.16.50. 172.16.51. 127. //許可するネットワーク
log file = /var/log/samba/log.%m
max log size = 50 //ログファイルの最大サイズ
security = user //認証方法
encrypt password = yes //パスワードを暗号化して送信
smb passwd file = /etc/samba/smbpasswd //パスワードファイルの場所
socket options = TCP_NODELAY SO_RCVBUF=8192
SO_SNDBUF=8192
dns proxy = no
netbios name = linux //Windows
上で表示されるコンピュータ名
# log level = 3 //0の場合は何もメッセージを残さない
# winbind use default domain = yes
# utmp = Yes
# dos filetimes = yes //
ファイルのタイムスタンプの変更を許可 |
|
■PUBLIC設定(共有ディレクトリ)
[public] がWindows 上で表示される共有フォルダの名前になります。comment
は共有ディレクトリに関するコメントを記述します。path は、共有ディレクトリの絶対パスを記述しておきます。public
= yes は、共有ディレクトリにするならば、必ず、「yes 」としておきましょう。「yes 」にしておくとディレクトリにアクセスする際に、パスワードを聞かれなくなります。
[public]
comment = Public Stuff
path = /home/samba
browseable = yes
public = yes //「yes」の場合はパスワードが不要、「no」はパスワード必要
create mode = 664
directory mode = 775 |
|
また、ディレクトリ自体のパーミッションも変更しておきます。
■HOME設定(個人用ディレクトリ)
homes セクションではユーザーごとのホームディレクトリをWindows 上で共有できるようにします。当然、ホームディレクトリの所有者以外、アクセスすることはできません。
[homes]
comment = Home Directories
browseable = no //「yes」にすると「homes」ディレクトリが見えてしまう
writable = yes
create mode = 644
directory mode = 755 |
|
■smb.conf のテスト確認
smb.conf を編集した際には、構文間違いがないかを
testparm で確認しておきます。testparm
は、smb.conf に未知のパラメータがないかを検査してくれるコマンドです。エラーが表示されなければOKです。編集したら常にtestparm
を実行するようにしてください。
# /usr/local/samba/bin/testparm
/etc/samba/smb.conf |
|
■/etc/samba/smbpasswd ファイルの作成
sambaのパスワードの暗号化形式は、Linuxログイン時に使用するshadow パスワードとは異なるため、smbpasswd
というファイルを作成しなくてはなりません。パスワードを作成するスクリプトとしてmksmbpasswd.sh
が用意されているのでスクリプトに実行権を与えた後、以下、コマンドを実行します。UNIXパスワードファイルを元にsambpasswd
ファイルを作成する事ができます。
# chmod 755 /usr/local/src/samba-3.0.1/source/script/mksmbpasswd.sh
# cat /etc/passwd | /usr/local/src/samba-3.0.1/source/script/mksmbpasswd.sh
> /etc/samba/smbpasswd |
|
あるいは、mksmbpasswd.sh を/usr/local/bin にコピーしておき、以下コマンドを実行しても同様の操作になります。
# cp /usr/local/src/samba-3.0.1/source/script/mksmbpasswd.sh
/usr/local/bin
# mksmbpasswd.sh < /etc/passwd > /etc/samba/smbpasswd |
|
作成した後、smbpasswd からシステム用の不要なアカウントも削除しておいてください。また、パスワードファイルのパーミッションも適切に設定しておきます。
# vi /etc/samba/smbpasswd //不要なアカウントを削除しておく
# chmod 600 /etc/samba/smbpasswd |
|
上記の操作ではSamba用のパスワードファイルは作成されましたが、パスワードは未設定の状態のままなので、smbpasswd
コマンドを使って、パスワードを設定します。
# /usr/local/samba/bin/smbpasswd
kororo
New SMB password:
Retype new SMB password: |
|
smbpasswd でパスワードを作成したユーザーのみ、以下のように表示されている事を確認してください。
# cat /etc/samba/smbpasswd
kororo:500:CBEF1524C02D2BF66AFF3DDD7F8C47:[U
]:LCT-4080C996:kororo
koro01:506:XXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXX:[U
]:LCT-00000000:
koro02:507:XXXXXXXXXXXXXX:XXXXXXXXXXXXX:[U
]:LCT-00000000: |
|
■/etc/services の追加
Red Hat では標準でサービスとして追加されていますが、記述されていない場合は以下の2行を追加しておいてください。
netbios-ns 137/udp
netbios-ssn 139/tcp |
|
■ログディレクトリの作成とローテート
Samba 用のログディレクトリはデフォルトでは作成されていませんので、予め作成しておきます。また、ログがローテートできるようにソースディレクトリ内にある、samba.log
を /etc/logrotate.d 以下にコピーしておきます。また、環境に合わせてローテートファイルも編集しなおしておいてください(「
logrotate
によるログのローテーション」参照)。
# mkdir /var/log/samba
# cp /usr/local/src/samba-3.0.1/packaging/RedHat/samba.log
/etc/logrotate.d/samba
# vi /etc/logrotate.d/samba
log file = /var/log/samba/log.nmbd {
weekly
rotate 5
missingok
postrotate
/usr/bin/killall -HUP nmbd
endscript
}
log file = /var/log/samba/log.smbd {
weekly
rotate 5
missingok
postrotate
/usr/bin/killall -HUP smbd
endscript
}
|
|
■Samba の起動
Samba をデーモンとして起動させます。また、プロセスの確認も行っておいてください。
# /usr/local/samba/sbin/smbd
-D
# ps aux | grep smb
root 12830 0.0 0.8 8404 2176 ? S 17:14
0:00 /usr/local/samba/sbin/smbd |
|
以上で、Windows 上から、
\\Sambaサーバー名\kororo でアクセスすることができるようになります。アクセスする際にユーザー名とパスワードを聞かれるので、先ほどsmbpasswd
で作成したパスワードを入力してください。
■パスワード不要の共有ディレクトリ+パスワード要のホームディレクトリ
1) 全ユーザが共有するディレクトリ=>パスワード不要
2) 各ユーザのホームディレクトリ => パスワード要
上記ふたつの条件を満たす設定を以下に示します。
[global]
security = SHARE
map to guest = Bad User
[homes]
comment = Home Directories
read only = No
create mask = 0644
browseable = No
[public]
comment = Public Stuff
path = /home/samba
read only = No
create mask = 0777
directory mask = 0777
guest only = Yes
guest ok = Yes
|
|
■Samba の自動起動設定
Samba が自動起動できるように、ソースディレクトリ内にあるsmb.init を /etc/rc.d/init.d
以下にコピーしておきます。また、smb.initを開いて、起動用パスやsmb.conf の格納されているパスを各自の環境に合わせて編集しておいてください。私の環境では
こちらのようにしています。
# cp /usr/local/src/samba-3.0.1/packaging/RedHat/smb.init
/etc/rc.d/init.d/smb |
|
chkconfig --add でsmb を自動起動サービスに追加しておきます。
# chkconfig --add
smb
# chkconfig --list smb
smb 0:オフ 1:オフ 2:オフ 3:オン 4:オン 5:オン 6:オフ |
|
■swat の起動設定
swat をxinetd 経由で動作させるための設定ファイルがソースディレクトリの中に用意されているのでそれを/etc/xinetd.d
にコピーしておきます。
# cd /usr/local/src/samba-3.0.1
# cp packaging/RedHat/samba.xinetd /etc/xinetd.d/swat |
|
デフォルトでは起動しないように設定されているので、
disable = no に変更しておきます。
# vi /etc/xinetd.d/swat
# default: off
# description: SWAT is the Samba Web Admin
Tool. Use swat \
# to configure your Samba server. To use
SWAT, \
# connect to port 901 with your favorite
web browser.
service swat
{
port = 901
socket_type = stream
wait = no
only_from = 127.0.0.1 172.16.50.0/27
172.16.51.0/28
user = root
server = /usr/local/samba/sbin/swat
log_on_failure += USERID
disable = no
}
|
|
変更したら、xinetd を再起動しておきます。
# /etc/init.d/xinetd
restart |
|
netstat で901番がLISTEN状態になっていることを確認しておきます。
# netstat -an | grep
901
tcp 0 0 0.0.0.0:901 0.0.0.0:* LISTEN
unix 2 [ ] DGRAM 901 |
|
なお、ブラウザでアクセスした際に、Swatのネットワークパスワードにroot のパスワードを入力してもログインできないことがありました。その時のsyslogを閲覧したら以下のようなエラーが発生していました。これは、
/etc/pam.d/
以下にsamba ファイルが存在しないために起きているエラーでした。削除した覚えもないのでソースからインストールした場合はおそらく存在しないかもしれません。ということで、私はRPMパッケージをダウンロードしてきて、rpm2cpio
にて/etc/pam.d/samba を抽出し、元の位置にコピーしたところ、正常にswat にアクセスできるようになりました。
# tail -f /var/log/messages
Aug 5 03:06:06 ns1 swat[7043]: [2005/08/05
03:06:06, 0] auth/pampass.c:smb_pam_passcheck(810)
Aug 5 03:06:06 ns1 swat[7043]: smb_pam_passcheck:
PAM: smb_pam_auth failed - Rejecting User
root ! |
|
Swat の画面が文字化けしてしまう場合は、smb.conf にて、unix charset とdisplay
chaset のパラメータを同じ値(ここでは、UTF-8)にしてみてください。
unix charset = UTF-8
dos charset = CP932
display charset = UTF-8 |
|
■Samba3.0でのゴミ箱の利用
Samba3.0以降、ゴミ箱の機能が使えるようになりました。ファイルを削除すると予め指定しておいたディレクトリに移動します。まず、smb.conf
を開いて[global]セクションに以下の行を付け加えます。ここでは、[homes]セクションにパラメータを記述していますが、全共有ディレクトリに同じ設定を適用したい場合は[global]セクションに記述してください。
# vi /usr/local/samba/lib/smb.conf
[global]
vfs objects = recycle
[homes]
recycle:repository = .recycle/%u
# 削除されたファイルの移動先ディレクトリ。%u
を付加する事で、削除したユーザのフォルダを
自動で作成してくれます。
recycle:keeptree = yes #
ディレクトリ構造を維持してごみ箱に移動するか否かを指定する
recycle:touch = yes #
削除の際に、ファイルのアクセス日を変更するか否か
recycle:versions = yes #
同名ファイルが存在する場合に別名で保存するか否か
recycle:maxsize = 0 #
ゴミ箱に移動するファイルサイズの最大値(0で無制限)
recycle:exclude = *.tmp #
ごみ箱に移動せずに直接削除するファイルを指定
recycle:exclude_dir = /tmp/cache
# 指定のディレクトリから削除されたファイルはゴミ箱に移動しない
recycle:noversions = *.doc
# recycle:versionsの反対。両方のオプションを設定すると、こちらが優先される |
|
予めゴミ箱ディレクトリを作成しておき、パーミッションを777に設定します。その後、Sambaを再起動し、設定を反映させてください。
# mkdir .recycle
# chmod 777 .recycle
# /etc/rc.d/init.d/smb restart |
|
共有したディレクトリにファイルを作成してから、削除してみてください。.recycle ディレクトリ以下に、自動的に自分のユーザ名のディレクトリが作成され、その下にファイルが移動されます。この自動で作成されたディレクトリのパーミッションは700となるので、他のユーザにゴミ箱内を勝手に見られる心配はなくなります。また、recycle:keeptreeも「recycle:repository
= .recycle/%u」とする事で正常に動作するようになります。
# ls -la /home/samba/.recycle/
合計 12
drwx------ 2 kororo kororo 4096 8月 5 02:20
kororo |
|
.recycle ディレクトリをユーザひとりひとりに対して作成していくのは面倒なので、useradd コマンド時に自動的にコピーするように/etc/skel
に.recycle ディレクトリを作成しておきます。
# mkdir /etc/skel/.recycle |
|
■ゴミ箱内のファイルを定期的に削除する
Fedra Core3には、tmpwatch という/tmp ディレクトリ内のファイルを定期的に削除するパッケージがインストールされており、これを流用することで.recycle
ディレクトリ内も定期的に削除することができます。ここでは、10日間(240時間)アクセスのないファイルをゴミ箱へ削除することとします。まず、tmpwatchが/etc/cron.dailyに置かれていますので、このファイルを
/etc/cron.weekly/recyclewatch としてコピーしておきます。
# cd /etc/cron.daily/
# cp tmpwatch /etc/cron.weekly/recyclewatch |
|
次に、このrecyclewatch 以下のようにを編集します。
# vi /etc/cron.weekly/recyclewatch
/usr/sbin/tmpwatch 240 /home/usr/.recycle
/usr/sbin/tmpwatch 240 /home/samba/.recycle |
|
■参考
⇒MONYO-COM:Sambaの認証をWindowsに統合する
⇒[Chapter
6] 6.4 パスワード