SambaでWindowsファイル共有を行う正しいやり方
Webを検索しても古いバージョンについての説明が多く、なかなか正しいやり方を見つけるのが難しいSambaの設定メモ。
環境
ここに書く内容は、Samba 3.6.0以降が対象です。
$ cat /etc/redhat-release CentOS release 6.4 (Final) $ smbd --version Version 3.6.9-151.el6
SELinuxを無効化する
セキュリティレベルは落ちるが、設定が煩雑になるためSELinuxを無効化する。
$ sudo vi /etc/selinux/config SELINUX=disabled $ sudo reboot
Sambaのインストール
CentOSの場合、パッケージ名を指定してインストールしてもよいが、groupinstallを使うこともできる。
$ sudo yum groupinstall "CIFS file server"
Debian、Ubuntuの場合はパッケージ名を指定してインストールする。
$ sudo apt-get install samba
文字コードの設定
dos charset
はWindows 9x系と通信する際にWindows側が使用する文字コード。日本語の場合はCP932
(Shift_JIS)となる。デフォルト値はCP850
(Latin-1)。NT系としか通信しない場合は設定しなくても問題ない。
unix charset
はLinux側のファイルシステムおよびファイルの記述に使われている文字コード。古いシステムの場合はEUC-JP
となることがある。デフォルト値はUTF-8
なので、システムがUTF-8の場合は設定しなくてもよい。
display charset
は標準入出力時の文字コードだが、現在は設定する必要がない。デフォルト値はLOCALE
で、システムのロケールがそのまま使われる。かつてはSambaのWeb UI (SWAT)でこの値が用いられていたが、現在は参照されなくなっている。
$ sudo vi /etc/samba/smb.conf dos charset = CP932 unix charset = UTF-8
接続元を制限する
今回はguestアクセスを許可する共有フォルダを作成する。 このことも考慮し、LAN外からはアクセスできないように接続元をプライベートIPに制限する。 また、同時に通信に使うインタフェースも制限しておく。
$ sudo vi /etc/samba/smb.conf interfaces = 127.0.0.0/8 eth0 bind interfaces only = yes hosts allow = 127.0.0.0/8 192.168.0.0/24 hosts deny = all
guestアクセスを許可する
認証なしでアクセスできる共有フォルダを作れるようにする。
Web上でよく説明されているsecurity = share
は、Samba 3.6.0以降ではdeprecatedとなっているため、security = user
とする。
guestアクセスを許可するにはmap to guest = Bad User
を指定すればよいが、この項目はCentOSのデフォルト設定ファイルには存在しないため、自分で追記する必要がある。
guest account = nobody
は、多くの場合コンパイル時に決められたデフォルト値そのままであるため書かなくても動くが、わかりやすさのためにここでは明示的に設定しておく。
passdb backend
はSambaアカウントの情報を格納するデータベース形式を指定する。LDAPを利用するのでなければ、tdbsam
を指定しておけばよい。
$ sudo vi /etc/samba/smb.conf security = user passdb backend = tdbsam guest account = nobody map to guest = Bad User
共有フォルダの設定
public = yes
またはguest ok = yes
と書けば、guestアクセスが許可される。
public
はguest ok
のエイリアスである。
また、guestアクセスを許可する場合は、共有フォルダのパーミッションを666に変更しておく。
$ sudo vi /etc/samba/smb.conf [tmp] comment = tmp path = /tmp public = yes writable = yes printable = no
Sambaアカウントの追加
guestアクセスではなく、個々のユーザを認証してアクセスする共有フォルダを作りたい場合は、pdbeditコマンドを用いて既存のUNIXユーザごとにSamba用のアカウントを作成する。 ここで設定したパスワード等の情報は、実際に共有フォルダにアクセスする際に用いられる。
$ sudo pdbedit -a -u john
Samba認証に使いたいUNIXユーザが存在していない場合は、pdbeditを実行する前に作成しておく。
$ sudo useradd john
登録したSambaアカウントの情報は、下記のようにして確認できる。
$ sudo pdbedit -L -v
Sambaアカウントのパスワード変更にはsmbpasswdコマンドを使う。
まぎらわしいことに、smbpasswdコマンドはsmbpasswd形式以外のデータベース(tdbsam形式など)のパスワード変更にも用いられる。
すなわち、smbpasswdコマンドはpassdb backend
で指定された値に従ってアクセスするデータベースを選択する。
$ sudo smbpasswd john
共有プリンタの無効化
共有プリンタを必要としない場合、デフォルトの設定のままだと再起動のたびに/var/log/samba/log.smbd
に「CUPSサーバに繋がらない」というエラーが書き出されてしまう。
[2013/06/21 02:32:16.399765, 0] printing/print_cups.c:151(cups_connect) Unable to connect to CUPS server localhost:631 - 接続を拒否されました [2013/06/21 02:32:16.400867, 0] printing/print_cups.c:528(cups_async_callback) failed to retrieve printer list: NT_STATUS_UNSUCCESSFUL
これは、下記のように設定することで抑制できる。
$ sudo vi /etc/samba/smb.conf printing = bsd
設定内容の確認
testparmコマンドでsmb.confで設定される内容の確認ができる。
-v
オプションをつけると、デフォルトそのままの値となっているパラメータも含めたすべての設定内容が表示される。
$ testparm
Sambaを起動する
合わせて、chkconfigで自動実行も行うように設定しておく。
Sambaプロトコルを扱うsmbdと、NBT (NetBIOS over TCP) を扱うnmbdの二つがあることに注意。 nmbdはWindowsのエクスプローラ上で、共有サーバ・共有フォルダのアイコンが表示されるようにするためなどに必要である。
$ sudo service smbd start $ sudo service nmbd start $ sudo chkconfig smbd on $ sudo chkconfig nmbd on
iptablesで通信を許可する
smbd、nmbdを起動後、LISTENしているポートを調べると下記のようになっている。
$ sudo netstat -anp | grep smbd tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 7437/smbd tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 7437/smbd tcp 0 0 :::139 :::* LISTEN 7437/smbd tcp 0 0 :::445 :::* LISTEN 7437/smbd $ sudo netstat -anp | grep nmbd udp 0 0 0.0.0.0:137 0.0.0.0:* 7458/nmbd udp 0 0 0.0.0.0:138 0.0.0.0:* 7458/nmbd
これに合わせて、iptablesで通信を許可するように設定を追記する。
$ sudo vi /etc/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT -A INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT -A INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT
参考リンク
display charset関係
- Bug 122 - smbclient ignores Unix locale settings when choosing a charset
- Bug 4240 - The documentation for "display charset" should be updated
- Release Notes for Samba 3.0.8
o Björn Jacke * Do not use display charset for swat output.
securityパラメータ関係
o Andrew Bartlett <abartlet@samba.org> * BUG 8151: Deprecate security parameters.