LAN内のPC間でファイル共有するために、ubuntu12.04にsamba(ver3.6.3)をインストールしてsambaサーバを構築しました。その構築手順とsambaの設定内容をメモします。
構築するファイル共有環境の概要
これから構築するsambaサーバによるファイル共有環境は以下の図になります。
上の図のように、user1〜user3が属するLAN内(192.168.1.0/24)にsambaサーバ(192.168.1.16/24)を用意し、sambaサーバ上のファイルをuser1〜user3間で共有可能な環境を構築します。
sambaサーバには以下の2種類のディレクトリを用意します。
- 各ユーザのみがアクセスできる各ユーザと同名のディレクトリ。上図の場合、user1(user2、user3)のみがアクセスできるuser1(user2、user3)という名前のディレクトリを用意
- 特定のグループに属するユーザのみがアクセスできるグループ共有用ディレクトリ。上図の場合、group1に属するuser1とuser2のみがアクセスできるpublicという名前のディレクトリを用意
sambaサーバの構築手順
上図のファイル共有環境の構築のためには以下の手順が必要になります。
1. sambaのインストール
2. sambaユーザの作成
3. sambaユーザのグループへの追加
4. グループ共有用ディレクトリの作成とアクセス権の設定
5. sambaの設定ファイルの編集
1. sambaのインストール
sambaのインストールはapt-getコマンドをubuntuのターミナル上で実行して完了です。
$ sudo apt-get install samba
2. sambaユーザの作成
sambaを使用するユーザを作成する場合、sambaが動作するLinux上にsambaを使用するユーザと同名のLinuxユーザがすでに存在している必要があります。そのため、まず以下のuseraddコマンドをsambaをインストールしたubuntu上で実行し、ubuntu上にユーザを作成します。
$ useradd -m user1
「-m」はユーザを作成すると同時に作成したユーザと同名のホームディレクトリを作成するためのオプションです。他のオプションについては、「useradd – -help」で確認することができます。上記の場合は「user1」というubuntuユーザが新たに作成され、さらに「-m」オプションにより/home/にubuntuユーザ名と同じディレクトリ、すなわち/home/user1が作成されます。
次に以下のpdbeditコマンドを実行し、ubuntu上に作成したuser1をsambaユーザとして登録します。
$ pdbedit -a user1
「-a」はsambaユーザを追加するためのオプションです。上のコマンドによってsambaユーザとしてuser1が登録されます。ここのuser1はuseraddコマンドで作成したubuntuユーザ名と同じ必要があります。
なお、pdbeditコマンドを実行すると、以下のようにuser1のパスワードを設定するよう求められますので、適当なパスワードを設定して下さい。ここで設定したパスワードがsambaサーバに接続する際に必要になります。パスワードを入力してユーザが登録されると、Unix usernameなどユーザの情報が表示されます。
new password:
retype new password:
Unix username: user1
NT username:
(以下略)
以上でsambaユーザの作成は完了です。user2、user3についても同様の手順です。
3. sambaユーザのグループへの追加
sambaでは、sambaが動作するLinux上に存在するグループ毎に、共有するファイルやディレクトリのアクセス権を変更できます。今回はubuntu上にgroup1という名前のグループを作成し、group1に属するユーザだけがアクセスできるディレクトリを作成します。
まず以下のgroupaddコマンドを実行し、ubuntu上にグループ「group1」を作成します。
$ groupadd group1
次に、以下のgpasswdコマンドにより、group1にuser1、user2を追加します。「-a」はユーザを追加するためのオプションです。
$ gpasswd -a user1 group1
$ gpasswd -a user2 group1
以上でubuntu上のグループgroup1にuser1とuser2を追加できます。
4. グループ共有用ディレクトリの作成とアクセス権の設定
次に以下のmkdirコマンドによって、group1に属するユーザのみがアクセスできるグループ共有用ディレクトリとして使うpublicを作成します。
$ mkdir /home/public
次に以下のchgrpコマンドによって、publicの所有グループをgroup1に変更します。
$ chgrp group1 /home/public/
さらに以下のchmodコマンドによって、publicに対する読み取り、書き込み、実行権限をgroup1に属するユーザに与えます。
$ chmod -R 774 /home/public/
上記のchmodコマンドのオプション「-R」は、ディレクトリ内のファイルに対してもパーミッションを774に設定するためのオプションです。
ファイルパーミッションの数値について
上でchmodコマンドで774という値を指定していますが、この意味については下記のサイトがわかりやすく参考になるかと思います
パーミッションの操作
以上でgroup1に属するユーザのみがアクセス可能なディレクトリの作成は完了です。後はsamba側の設定によってグループ毎の管理が可能になります。グループ毎に管理するための設定は以降に載せます。
5. sambaの設定ファイルの編集
sambaの設定は設定ファイルである/etc/samba/smb.confを編集して行います。編集は以下のようにviエディタやnanoエディタなど好きなエディタで編集します。
$ vi /etc/samba/smb.conf
以下にsmb.confの内容を載せます。ちなみに以下の内容はsmb.confの全てを載せている訳ではなく、コメント部分は省いています。
[global]
## Browsing/Identification ###
workgroup = WORKGROUP
→ ワークグループ名の設定
dos charset = CP932
→ Windowsマシンとの通信時に使用する文字コードの指定
unix charset = utf-8
→ Unixマシンとの通信時に使用する文字コードの指定
unix extensions = no
→ Macから接続する場合には必要 (詳細は未調査です)
hosts allow = 192.168.1.0/255.255.255.0
→ sambaサーバへのアクセスを許可するIPアドレスの指定
### Debugging/Accounting ###
log level = 1
→ 出力するログのレベルを指定。
数値は0〜10まで指定可能。数値が大きいほど詳細なログを出力
log file = /var/log/samba/log.%m
→ ログの保存場所の指定。%mはアクセスしてきたユーザマシン名に
置き換わる変数。つまりこの場合はユーザマシン毎にログを出力する
max log size = 1000
→ ログファイルの最大サイズの指定。単位はキロバイト。
左の場合は最大1MB。1MBを越えると、ログファイル末尾に
「.old」が付けられて新しいログファイルが作成される。
すでに「.old」が存在していた場合は削除されて上書きされる
###### Authentication ######
map to guest = never
→ ゲスト認証の無効化。有効にする場合は「never」ではなく
「bad user」を記述
#============= Share Definitions =============#
[homes]
comment = Home Directories
→ ディレクトリの説明に記述されるコメント
browseable = no
→ ディレクトリを共有一覧に表示しないための設定。
例えばwindowsの場合は「ネットワーク」上に表示されない。
表示する場合は「yes」を記述
writable = yes
→ ファイルへの書き込み許可の指定。
書き込みを許可しない場合は「no」を記述
valid users = %S
→ ディレクトリにアクセス可能なユーザの指定。
この場合はアクセスしてきたユーザが各自のディレクトリならば
アクセス可能で、自分以外のユーザはアクセス不可。
%Sはアクセスしてきたユーザ名に置き換わる変数。
[public]
path = /home/public
→ 共有ディレクトリのパス
browseable = yes
writable = yes
valid users = @group1
→ ディレクトリにアクセス可能なユーザをグループで指定。
グループを指定する場合はグループ名に@を付けて指定する。
この場合はgroup1に属するユーザのみがpublicにアクセス可能になる。
[global]、[homes]セクションは特殊セクション(samba側で予約されたセクション)でありセクション名は変更できません。[global]にはsamba全体の設定を記述し、[homes]にはホームディレクトリの設定を記述します。
以上で冒頭に載せた図のような最低限のファイル共有環境を構築することができると思います。もし何か間違えなどありましたらご指摘頂けると幸いです。
sambaに接続できない場合の確認事項
smb.confに記述ミスがないか
smb.confに記述ミスがある場合にはsambaが意図した動作をしません。そこでsmb.confに記述ミスがあるかを確認するために、以下のようにtestparmコマンドを使います。
$ testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[homes]"
Unknown parameter encountered: "validdd users"
Ignoring unknown parameter "validdd users"
Processing section "[public]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
上記の場合、testparmの結果のなかに、「Unknown parameter encountered: “validdd users”」と書かれています。これは「validdd users」というパラメータは存在しないとエラーを出しています。これは正しくは「valid users」です。このように、testparmを使うことでsmb.confの記述ミスを確認することができます。
ファイル、ディレクトリのアクセス権が適切に設定されているか
smb.conf内で書き込み許可、読み取り許可を与えていても、sambaが動作するLinuxにおけるアクセス権(ファイルパーミッション)が適切に設定されていなければ、以下のようなエラーが出て書き込み、読み込みができません。この場合はsambaが動作するLinux側でchmod、chgrp、chownコマンドなどを使って共有するファイル、ディレクトリに対するアクセス権を設定し直すことで解決できると思います。
- Windows7の場合
- Ubuntuの場合
- Macの場合
ファイアウォールによってsambaが使用するポートがブロックされていないか
ファイアウォールによってsambaが使用するポートがブロックされていると、ユーザはsambaに接続できません。ファイアウォールが原因であるかを確認する手段として、アクセスしようとしているパソコンのファイアウォールを一時的に停止することがあります。ただし、当然ながらこの場合は無防備な状態になるため、セキュリティ的に安全な環境を確保してから自己責任で実行して下さい。
一例として、iptablesをインストールして動作させているubuntuからsambaサーバにアクセスできなかった場合は、iptablesの設定内容を確認し、UDPの137番、138番、TCPの139番、445番のポートを許可する設定になっているかを確認すると良いと思います。ちなみに、iptablesにおいてUDPの137番、138番、TCPの139番、445番をそれぞれ許可するためには、以下のコマンドを実行します。iptablesの使い方についてはiptablesの概要メモに簡単にメモしてあります。
$ iptables -A INPUT -p udp –-dport 137:138 -j ACCEPT
$ iptables -A INPUT -p tcp –-dport 139 -j ACCEPT
$ iptables -A INPUT -p tcp –-dport 445 -j ACCEPT
また、アクセスしようとしているパソコンだけでなく、sambaサーバ自体のファイアウォールが原因であることも考えられるので、sambaサーバ側のファイアウォールを一時的に停止して動作を確認することもひとつの手段になります。
参考書籍
sambaサーバに限らず、ApacheやSquidなどその他多数あるLinux上で動作するサーバを構築する場合には、やはりLinuxシステムの知識が必要になります。これまではLinuxで知らないことはその都度ネットで調べれば良いと思っていましたが、最近は以下のような本を購入して一度網羅的に勉強するようにしています。今回は特にアクセス権とファイルパーミションについて下記の本を参考にさせて頂きました。やはり、ネットで調べた場合に比べて、本のほうが得られる知識やその周辺知識が多いです。
今回sambaサーバを構築するにあたっては、以下の本を参考にさせて頂きました。この本は基本的な構築方法からLDAP認証を用いたsambaサーバの構築方法まで幅広く載っています。まだ全て読んでいないのでしっかり読みたいと思います。
SPONSORED LINK
3 thoughts on “sambaサーバによるファイル共有環境の構築手順メモ”