sambaサーバによるファイル共有環境の構築手順メモ
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サーバの構築手順
上図のファイル共有環境の構築のためには以下の手順が必要になります。
- sambaのインストール
- sambaユーザの作成
- sambaユーザのグループへの追加
- グループ共有用ディレクトリの作成とアクセス権の設定
- 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サーバ側のファイアウォールを一時的に停止して動作を確認することもひとつの手段になります。
関連記事
- 公開日:2022/09/11 更新日:2022/09/11
Google Compute EngineのインスタンスにSSH接続できなくなった時の対処方法
Google Compute EngineのインスタンスにSSH接続できていたのにSSHの設定ミスや原因不明でSSH接続できなくなった時の対処方法をメモします。自分のPCからだけでなく、Google Cloud Platform上での管理画面からもSSHできない場合にも有効です。
- 公開日:2022/09/08 更新日:2022/09/08
Google Compute EngineのインスタンスにSSH接続する
Google Compute Engineのインスタンスにssh接続するための手順をまとめます。
- 公開日:2018/02/10 更新日:2018/02/10
CentOSでrootのときだけ日本語が文字化けする時の原因と対処方法
さくらVPSでCentOSを使いはじめたところ、一般ユーザで使用している時はvimなどのエディタで編集していても日本語が問題なく表示されていましたが、root権限で同様に編集のためにファイルを開いたら日本語が文字化けしてしまいました。以降ではこの原因と対処方法についてメモします。
- 公開日:2017/12/09 更新日:2017/12/09
サーバ上のディレクトリをローカルにマウントするsshfsの使い方
Linuxでは、サーバ側のディレクトリを自身のローカルPCにマウントして、ローカル上のディレクトリして使用することができるsshfsというコマンドが用意されています。ここではこのsshfsの使い方をメモします。
- 公開日:2017/08/27 更新日:2017/08/27
MacでubuntuのインストールUSBを作成する方法と手順
MacでubuntuのインストールUSBを作成する手順をメモします。ここで載せる手順はターミナルでのコマンドによる方法になります。