CentOS のSambaでファイル共有にアクセス権を設定する3つの方法

samba-access-setting-01-top

CentOSでWindows向けのファイル共有を実装するためのアプリケーション"Samba"について、以前の記事でインストール方法と基本的な設定を紹介しました。この記事ではSambaのインストールに関する部分を中心に記載しており、Sambaの設定については軽く記載した程度でした。

CentOS
samba-access-setting-01-top
CentOS のSambaでファイル共有にアクセス権を設定する3つの方法

CentOSでWindows向けのファイル共有を実装するためのアプリケーション"Samba"について、以前の記事でインストール方法と基本的な設定を紹介しました。この記事ではSambaのインストールに関する部分を中心に記載しており、Samba ...

そこで今回はインストールしたSambaで基本的な機能であるファイル共有へのアクセス制限の設定方法を紹介します。

1. Samba環境でのファイル共有アクセス制御

Sambaではファイル共有にアクセス制御を行う機能として、大きく以下の二つが用意されています。

ファイル共有のアクセス制御機能

  1. ファイルシステムレベルでのアクセス制御
  2. ファイル共有レベルでのアクセス制御

WindowsシステムのACLと同等にファイルやフォルダへのアクセス制御が利用できるのは"ファイルシステムレベルでのアクセス制御"ですが、実装と設定にやや手間が掛かるのが難点です。

Samba_access_level2_2
ファイルシステムレベルでのアクセス制御

ファイルシステムレベルでのアクセス制御と比較して"ファイル共有レベルでのアクセス制御"は、ファイル共有ごとの設定となり、フォルダやファイルレベルでの制御はできませんが、smb.confの設定のみで利用することができ、利用するのに敷居が低いというメリットがあります。

Samba_access_level_1
ファイル共有レベルでのアクセス制御

Sambaの設定について敷居が低いほうが導入や運用がしやすいと思いますので、本記事では"ファイル共有レベルでアクセス制御"を設定する手順を紹介します。(ファイルシステムレベルのアクセス制御も別の記事で紹介していく予定です。)

1-1. ファイル共有レベルでのアクセス制御について

ファイル共有レベルでのアクセス制御は以下の単位で設定することが出来ます。

ファイル共有レベルのアクセス制御単位

  1. 接続元のIPアドレス単位
  2. 接続ユーザー、または接続ユーザーの所属するグループ単位
  3. ファイル共有に対しての読み書き

どの単位で設定してもファイル共有にアクセス制御を設定することができますが、運用によって使い分ける必要がありますので全ての設定について次章から利用されることが多いと思われるパターンと設定について説明していきます。

1-2. globalセクションとファイル共有セクションについて

ファイル共有に対するアクセス制御の設定はファイル共有セクションとSambaの動作を制御するためのglobalセクションの両方に設定することができます。globalセクションに設定した場合には、smb.confに記載されているファイル共有全体(とSamba自体)に対して動作します。

smb.conf_global _3
globalセクションの設定 適用範囲

ファイル共有セクションに設定した内容は、設定したファイル共有のみに適用されます。

smb.conf_share _2
ファイル共有セクションの設定 適用範囲

設定を行う場所で挙動が違ってきますので注意して下さい。本記事では基本的に”ファイル共有セクション”について設定を行う形を前提としています。同じ内容をglobalセクションに設定することも可能ということだけ覚えて頂ければ良いかと思います。

1-3. ファイル共有レベルでのアクセス制御を行う環境

本章ではファイル共有レベルでのアクセス制御を行う環境を記載します。アクセス制御を設定する前提としては、記事

CentOS
samba-access-setting-01-top
CentOS のSambaでファイル共有にアクセス権を設定する3つの方法

CentOSでWindows向けのファイル共有を実装するためのアプリケーション"Samba"について、以前の記事でインストール方法と基本的な設定を紹介しました。この記事ではSambaのインストールに関する部分を中心に記載しており、Samba ...

で設定したSamba環境の"smb.conf"を元に行います。構成図は以下のようになります。

centos78-image-map
Samba導入後の想定構成図

アクセス制御の設定を追加する部分はsmb.confに記載されているファイル共有セクション[Share]です。記事内で設定したsmb.confの抜粋は以下になります。

 code
[global]
workgroup = WORKGROUP
server string = SAMBA SERVER Version %v
netbios name = fs
security = user
passdb backend = tdbsam
dos charset = CP932
unix charset = UTF-8
wins support = yes
# printing = cups
# printcap name = cups
load printers = no
disable spoolss = yes
# cups options = raw
log level = 2
log file = /var/log/samba/log.%m
max log size = 1024
[homes]
comment = Home Directories
valid users = %S, %D%w%S
browseable = No
read only = No
inherit acls = Yes
[Share]
comment = Share Folder for All Users
path = /home/share/
browsable = yes
read only = no

上記のsmb.confにはSambaのログを取得するため、以下のパラメーターをglobalセクションに追加しています。

 code
log level = 2
log file = /var/log/samba/log.%m
max log size = 1024

この設定を行うことで接続コンピューターごとの詳細なログが"/var/log/samba/log.コンピューター名"で出力されます。ユーザーとグループによるアクセス制御の設定を紹介する際に、このログも合わせて抜粋していきます。

ログについては出力される量が多いことからディスクのI/Oを消費してしまうため、運用時には"log level = 1"(log levelは大きいほど詳細なログになります。)に変更するか、追加した部分を削除してください。

このsmb.confを元にアクセス制御の設定を紹介していきます。

2. ファイル共有へのIPアドレスでのアクセス制御

SambaでIPアドレス単位のアクセス制御を設定するためには以下のパラメーターを利用します。

  • hosts allow 接続を許可するIPアドレスを指定する
  • hosts deny 接続を拒否するIPアドレスを指定する

このパラメーターを組み合わせてアクセスの制御を行います。二つのパラメーターを重複して記載した場合には"hosts allow"パラメーターが優先されます。

2-1. hosts allowによるサブネット単位でのアクセス許可

先ずはサブネット単位でアクセス許可を行う場合の設定を紹介します。アクセスの許可は"hosts allow"パラメーターで設定します。
パラメーターに続いて、接続を許可するIPアドレスを指定します。
例えばサブネット"192.168.241.0/24全体"からの接続を許可する場合には

hosts allow = 192.168.241.

という形で4オクテット目を設定しない形で指定します。

hosts allowではlocalhostアドレス(127.0.0.1)はhosts denyで明示的に拒否しない限り、常にアクセスを許可されていますので設定は不要です。

実際にsmb.confにhosts allowパラメーターを設定すると以下のようになります。

 code
[Share]
comment = Share Folder for All Users
path = /home/share/
browsable = yes
read only = no
hosts allow = 192.168.241.

設定変更後にはsmb.confをチェックする"testparm"コマンドで誤りがないことを確認します。

 command
# testparm
Processing section "[homes]"
Processing section "[Share]"
Loaded services file OK.
Server role: ROLE_STANDALONE

上記のように"Loaded services file OK."と表示されればsmb.confの設定に文法的な誤りはありません。
変更した設定を反映させるにはsmbサービスを再起動する必要があります。以下のようにsmbを再起動します。

 command
# systemctl restart smb

エラーが表示されなければsmbは再起動されています。

nmbはコンピュータ名の名前解決に利用するNetBIOS用サービスのため再起動は不要です。

2-2. 許可したサブネットから、特定のIPアドレスを拒否する

次に項目2-2-1.で接続を許可したサブネットから、特定のIPアドレスだけを拒否したい場合の設定を紹介します。
例えば192.168.241.10を除いた192.168.241.0/24からの接続を許可する場合には"hosts allow"パラメーターに特定のIPアドレスを除外するためのオプション"EXCEPT"を指定します。以下のように設定します。

hosts allow = 192.168.241. EXCEPT 192.168.241.10

smb.confの[Share]セクションに記載した例は以下のようになります。

 code
[Share]
comment = Share Folder for All Users
path = /home/share/
browsable = yes
read only = no
hosts allow = 192.168.241. EXCEPT 192.168.241.10

smb.confの設定後、smbを再起動することで設定が反映されます。

メモ

smb再起動の手順は項目2-1.と同様に"systemctl restart smb"で行います。

設定を適用後にファイル共有への接続テストを行ってみました。サーバー上のファイル一覧が表示できるところまでは問題ありません。

samba-access-setting-01-01

設定を行ったファイル共有[Share]にアクセスすると、アクセスが拒否されます。

samba-access-setting-01-02

ログにも以下のようにアクセスを拒否された記録が出力されています。

 log
[2019/07/11 16:38:50.391607, 0] ../lib/util/access.c:365(allow_access)
Denied connection from 192.168.241.10 (192.168.241.10)

これで設定の確認まで完了しました。

2-3. 特定のIPアドレスのみ接続を拒否する場合

特定のIPアドレスのみファイル共有への接続を拒否する場合には"hosts deny"パラメーターを利用します。例えばIPアドレス"192.168.241.10""192.168.241.151"についてファイル共有へのアクセスを拒否する場合には以下のように設定します。

hosts deny = 192.168.241.10 192.168.241.151

smb.confの[Share]セクションに記載した例は以下のようになります。

 code
[Share]
comment = Share Folder for All Users
path = /home/share/
browsable = yes
read only = no
hosts deny = 192.168.241.10 192.168.241.151

smb.confの設定後、smbを再起動することで設定が反映されます。

メモ

smb再起動の手順は項目2-1.と同様に"systemctl restart smb"で行います。

接続テストでは項目2-2.と同様に接続が拒否されることが確認できます。

samba-access-setting-01-02

ログにも以下のようにアクセスを拒否された記録が出力されています。

 log
[2019/07/11 16:51:17.820941, 0] ../lib/util/access.c:365(allow_access)
Denied connection from 192.168.241.151 (192.168.241.151)

これで設定の確認まで完了しました。

2-4. ファイル共有への接続は拒否するが、特定のIPアドレスは許可

全てIPアドレスからファイル共有接続は拒否するが、192.168.241.151のIPアドレスのみを接続を許可する場合には以下のように設定します。hosts allowパラメーターがhosts denyパラメーターより優先されることから、hosts allowに許可するIPを指定します。

hosts allow = 192.168.241.151
hosts deny = ALL

smb.confの[Share]セクションに記載した例は以下のようになります。

 code
[Share]
comment = Share Folder for All Users
path = /home/share/
browsable = yes
read only = no
hosts allow = 192.168.241.151
hosts deny = ALL

smb.confの設定後、smbを再起動することで設定が反映されます。

メモ

smb再起動の手順は項目2-1.と同様に"systemctl restart smb"で行います。

以上の設定がIPアドレスによるアクセス制御でよく利用されるパターンです。SambaではIPアドレスによるアクセス制御より、ユーザーやグループによる制御を利用することが多いので、IPアドレスでの設定は「このような方法がある」という程度で記憶しておくのが良いかと思います。

3. Sambaユーザーとグループ単位でのアクセス制御

ユーザーとグループ単位の設定についてはSambaに設定された特定のユーザー、グループに対して接続を"許可"する場合に利用します。許可とは逆の設定である"拒否"の設定も可能です。
IPアドレスの制御よりも詳細で柔軟に設定できますので、ファイル共有へのアクセス制御を設定する場合は本章の設定をお勧めします。

3-1. ファイル共有セクションについて

ファイル共有のアクセス制御をユーザーとグループで設定する環境としては、項目1-3.で記載したsmb.confを元に行います。
アクセス制御を追加する部分はsmb.conf内のファイル共有セクション[Share]になります。

3-2. 設定に利用するユーザーとグループ

ファイル共有のアクセス制御を設定するのに利用するテスト用のユーザーとグループを以下のように作成しました。

Samba_User_Group_1
ファイル共有テスト用に作成するユーザーとグループ

グループとユーザーを作成するために以下のように"groupadd"コマンドと"useradd"コマンドを実行しました。useraddコマンドを実行する際にグループを指定しますので、ユーザーより先にグループを作成しています。

3-2-1. アクセス制御用のグループ作成

アクセスを制御するためのグループを作成します。"-g"オプションでグループのIDであるgidを指定しています。ここは任意ですが既存のグループと重ならないように、大き目のgidを指定しています。

 command
# groupadd rem-testgroup01 -g 5001
# groupadd rem-testgroup02 -g 5002
# groupadd rem-testgroup03 -g 5003

エラーが表示されなければグループは正常に作成されています。

3-2-2. アクセス制御用のユーザー作成

アクセス制御を設定するためのユーザーをuseraddコマンドで追加しました。"-M"オプションはユーザーのホームディレクトリを作成しない場合に指定します。また"-s"オプションでユーザーがシステムにログインできないように"/sbin/nologin"シェルを、"-g"オプションで参加するグループを指定しています。
本記事では以下のように実行しました。

 command
# useradd -M -s /sbin/nologin -g 5001 rem-test01
# useradd -M -s /sbin/nologin -g 5002 rem-test02
# useradd -M -s /sbin/nologin -g 5003 rem-test03

エラーが表示されなければユーザーは正常に作成されています。作成したユーザーについてはSambaのファイル共有以外、システムにログインしませんのでパスワードは無しにしています。必要に応じてパスワードを設定して下さい。

3-2-3. Samba用パスワードの設定

Samba用のパスワード設定はユーザーを追加した後に実行します。パスワード設定のコマンド"pdbedit"はインタラクティブに実行することもできますがechoコマンドでパイプして、インタラクティブなやり取り無しでパスワードが設定されるように実行しました。

 command
# echo -en '123456\n123456\n' | pdbedit -a -t -u rem-test01

上記の場合、パスワードは"123456"になります。
Samba用のパスワードがユーザーに追加されると、以下のようにサマリが表示されます。

 log
Unix username: rem-test01
NT username:
Account Flags: [U ]
User SID: S-1-5-21-5708181-2835113568-566259207-1000
Primary Group SID: S-1-5-21-5708181-2835113568-566259207-513
Full Name: test user01
Home Directory: \\fs\rem-test01
HomeDir Drive:
Logon Script:
Profile Path: \\fs\rem-test01\profile
Domain: FS
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: 木, 07 2月 2036 00:06:39 JST
Kickoff time: 木, 07 2月 2036 00:06:39 JST
Password last set: 水, 10 7月 2019 19:36:09 JST
Password can change: 水, 10 7月 2019 19:36:09 JST
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

同じようにrem-test02とrem-test03ユーザーについてもpdbeditを実行します。

 command
# echo -en '123456\n123456\n' | pdbedit -a -t -u rem-test02
# echo -en '123456\n123456\n' | pdbedit -a -t -u rem-test03

エラーが出なければ、Samba用のパスワードは正常に設定されています。(実行時の出力は割愛しています。)

3-2-4. ユーザーとグループ作成の確認

作成したユーザーとグループの確認を行います。Linux側のユーザーとグループの確認には"id"コマンドを利用します。以下のように実行することで作成したユーザーを全て確認できます。

 command
$ id rem-test01 && id rem-test02 && id rem-test03
uid=1002(rem-test01) gid=5001(rem-testgroup01) groups=5001(rem-testgroup01)
uid=1003(rem-test02) gid=5002(rem-testgroup02) groups=5002(rem-testgroup02)
uid=1004(rem-test03) gid=5003(rem-testgroup03) groups=5003(rem-testgroup03)

上記のように作成したユーザーとグループが表示されることを確認します。次にSamba側のユーザー情報も確認します。
Sambaユーザーの表示はpdbeditに"-L"オプションを付けて実行します。

 command
# pdbedit -L
rem-test01:1002:
rem-test02:1003:
rem-test03:1004:

上記のように作成したユーザーが表示されることを確認します。これでテスト用のユーザーとグループの作成と確認は完了です。

3-3. ユーザーでのアクセス制御パラメーター

ファイル共有へのアクセス制御をユーザーとグループで行うにはvalid usersパラメーターとinvalid usersパラメーターを利用します。

  • valid users 接続を許可するIPアドレスを指定する
  • invalid users 接続を拒否するIPアドレスを指定する

2つのパラメーターを組み合わせてファイル共有へのアクセス制御を行います。

3-3-1. valid users パラメーターの設定

"valid users"パラメーターはファイル共有への接続を許可するユーザーを指定するパラメーターです。
例えば"rem-test01"と"rem-test02"ユーザーのみShareファイル共有へ接続を許可する場合には、valid users を以下のように指定します。

valid users = rem-test01 rem-test02

smb.confの[Share]セクションに記載した例は以下のようになります。

 code
[Share]
comment = Share Folder for All Users
path = /home/share/
browsable = yes
read only = no
valid users = rem-test01 rem-test02

smb.confの設定後、smbを再起動することで設定が反映されます。

メモ

smb再起動の手順は項目2-1.と同様に"systemctl restart smb"で行います。

valid users パラメーターは指定したユーザーのみがファイル共有へアクセスできますので、パラメーターに指定されていない"rem-test03"はファイル共有にアクセスできません。
設定を行ったあと、ファイル共有に接続テストをしてみます。
アクセスが許可されているユーザー"rem-test01"はファイル共有にアクセスができました。

samba-access-setting-01-05.png

Sambaのクライアントログにも以下のように接続できた記録が出力されています。

 log
[2019/07/11 10:07:16.813377, 2] ../source3/smbd/service.c:841(make_connection_snum)
mbp01 (ipv4:192.168.241.150:50348) connect to service Share initially as user rem-test01 (uid=1002, gid=5001) (pid 1810)

次に許可されていないユーザー"rem-test03"で接続テストをしてみます。以下のようにアクセスが拒否されたことが確認できました。

samba-access-setting-01-02

Sambaのクライアントログにも以下のように拒否された記録が出力されています。

 log
[2019/07/11 10:04:30.425902, 1] ../source3/smbd/service.c:521(make_connection_snum)
create_connection_session_info failed: NT_STATUS_ACCESS_DENIED
[2019/07/11 10:04:30.427214, 2] ../source3/smbd/service.c:349(create_connection_session_info)
user 'rem-test03' (from session setup) not permitted to access this share (Share)

これで設定が正常に動作していることが確認できました。

ポイント

Windowsではファイル共有の接続情報をキャッシュしてしまうため、接続テストを行いたい場合にユーザーの切り替えができません。ファイル共有への接続情報をクリアするにはWindows側のコマンドプロンプトでコマンドを実行します。

コマンドには"net use"と"klist"を利用します。接続している先のコンピューター名が"fs"の場合

 command
> net use
> net use \\fs /delete
> klist purge

と実行します。一番最初の"net use"コマンドは接続しているファイル共有先を表示させます。
実際にコマンドプロンプトから実行した画面は以下のようになります。

samba-access-setting-01-3-3

ファイル共有への接続情報がクリアされると再度、ファイル共有へ接続した際に認証用のダイアログが表示されるようになります。接続テストの際に覚えておくと便利かと思います。

3-3-2. invalid users パラメーターの設定

特定のユーザーのみファイル共有へのアクセスを拒否する場合には"invalid users"パラメーターを利用します。例えば"rem-test03"ユーザーのみアクセスを拒否したい場合には以下のように設定します。

invalid users = rem-test03

smb.confの[Share]セクションに記載した例は以下のようになります。

 code
[Share]
comment = Share Folder for All Users
path = /home/share/
browsable = yes
read only = no
invalid users = rem-test03

smb.confの設定後、smbを再起動することで設定が反映されます。

メモ

smb再起動の手順は項目2-1.と同様に"systemctl restart smb"で行います。

許可されていないユーザー"rem-test03"で接続テストをしてみます。invalid usersパラメーターに指定されている"rem-test03"ではファイル共有へのアクセスが拒否されました。

samba-access-setting-01-02

Sambaのクライアントログにも以下のように拒否された記録が出力されています。

 log
[2019/07/11 10:11:47.573590, 2] ../source3/smbd/service.c:349(create_connection_session_info)
user 'rem-test03' (from session setup) not permitted to access this share (Share)
[2019/07/11 10:11:47.573656, 1] ../source3/smbd/service.c:521(make_connection_snum)
create_connection_session_info failed: NT_STATUS_ACCESS_DENIED

次に拒否設定されていないユーザー"rem-test01"でファイル共有へアクセスしてみます。invalid usersパラメーターに指定されていない"rem-test01"ではファイル共有へのアクセスができました。

samba-access-setting-01-05.png

Sambaのクライアントログにも以下のようにアクセスできた記録が出力されています。

 log
[2019/07/11 10:10:25.240236, 2] ../source3/smbd/service.c:841(make_connection_snum) mbp01 (ipv4:192.168.241.150:50351) connect to service Share initially as user rem-test01 (uid=1002, gid=5001) (pid 1864)

上記の2つのパラメーターを組み合わせて指定することにより、ユーザー単位でファイル共有のアクセス制御が利用できます。

3-4. ファイル共有へのグループによるアクセス制御

ファイル共有のアクセス制御にはグループを指定することもできます。本章ではグループでのアクセス制御を行う設定について紹介していきます。グループでのアクセス制御に利用するパラメーターーはユーザーによるアクセス制御と同じく"valid users""invalid users"になります。グループを指定する場合にはグループ名の前に"@""+"を付けます。例えば"rem-testgroup01"グループのみアクセスを許可したい場合には

valid users = @rem-testgroup01

という形で指定します。

"@"と"+"はどちらを利用しても同じ挙動になります。本記事では"@"を利用しています。

smb.confの[Share]セクションに記載した例は以下のようになります。

 code
[Share]
comment = Share Folder for All Users
path = /home/share/
browsable = yes
read only = no
valid users = @rem-testgroup01

smb.confの設定後、smbを再起動することで設定が反映されます。

メモ

smb再起動の手順は項目2-1.と同様に"systemctl restart smb"で行います。

再起動後にShareファイル共有にアクセスしてテストを行います。rem-testgroup01グループのユーザーrem-test01ではShareファイル共有にアクセスできます。

 log
[2019/07/11 10:28:37.390308, 2] ../source3/smbd/service.c:841(make_connection_snum)
mbp01 (ipv4:192.168.241.150:50376) connect to service Share initially as user rem-test01 (uid=1002, gid=5001) (pid 2061)

rem-testgroup01に所属していないユーザー"rem-test03"ではファイル共有へのアクセスに失敗します。

 log
[2019/07/11 10:27:28.173469, 1] ../source3/smbd/service.c:521(make_connection_snum)
create_connection_session_info failed: NT_STATUS_ACCESS_DENIED
[2019/07/11 10:27:28.174364, 2] ../source3/smbd/service.c:349(create_connection_session_info)
user 'rem-test03' (from session setup) not permitted to access this share (Share)

許可ではなく、特定のグループのみアクセスを拒否したい場合には"invalid users"でグループ名を指定します。例えばrem-testgroup02のみアクセスを拒否したい場合には以下のように設定します。

invalid users = @rem-testgroup02

smb.confの[Share]セクションに記載した例は以下のようになります。

 code
[Share]
comment = Share Folder for All Users
path = /home/share/
browsable = yes
read only = no
invalid users = @rem-testgroup02

smb.confの設定後、smbを再起動することで設定が反映されます。

メモ

smb再起動の手順は項目2-1.と同様に"systemctl restart smb"で行います。

smbの再起動後にShareファイル共有にアクセスしてテストを行います。rem-testgroup02グループのユーザーrem-test02ではShareファイル共有にアクセスが拒否されました。

 log
[2019/07/11 10:32:09.722232, 2] ../source3/smbd/service.c:349(create_connection_session_info)
user 'rem-test02' (from session setup) not permitted to access this share (Share)
[2019/07/11 10:32:09.722324, 1] ../source3/smbd/service.c:521(make_connection_snum)

拒否と許可をユーザーとグループで制御することで柔軟な設定を行うことができました。

3-5. ユーザーとグループにアクセス制御の組み合わせ

ユーザーとグループでのアクセス制御については同時に設定することも可能です。例えばrem-test01ユーザーとrem-testgroup02グループのみを許可したい場合にはvalid usersパラメーターを以下のように設定します。

valid users = rem-test01 @rem-testgroup02

smb.confの[Share]セクションに記載した例は以下のようになります。

 code
[Share]
comment = Share Folder for All Users
path = /home/share/
browsable = yes
read only = no
valid users = rem-test01 @rem-testgroup02

smb.confの設定後、smbを再起動することで設定が反映されます。

メモ

smb再起動の手順は項目2-1.と同様に"systemctl restart smb"で行います。

invalid users を利用してrem-test02ユーザーとrem-testgroup03グループのみを拒否する場合には以下のように設定します。

invalid users = rem-test02 @rem-testgroup03

smb.confの[Share]セクションに記載した例は以下のようになります。

 code
[Share]
comment = Share Folder for All Users
path = /home/share/
browsable = yes
read only = no
invalid users = rem-test02 @rem-testgroup03

smb.confの設定後、smbを再起動することで設定が反映されます。

メモ

smb再起動の手順は項目2-1.と同様に"systemctl restart smb"で行います。

グループとユーザーをファイル共有に設定することで柔軟なアクセス制御を設定できます。ファイル共有への接続を制限するためにはこのユーザーとグループ単位での設定が一番、利用しやすいと思います。

4. ファイル共有への読み書き単位の設定

特定のユーザーに対してはファイル共有の読み取りのみを許可するような場合に設定します。基本的にはファイル共有に対しての書き込みが設定されていれば全ての操作が可能になりますので、閲覧のみ(リードオンリー)を有効にして、書き込みができるユーザーを別途、指定するという形で記載します。

4-1. 読み取り専用のファイル共有に書き込み許可を設定する

読み取り専用のファイル共有を設定して、特定のユーザーやグループのみ書き込みを許可したい場合には"read only"パラメーターと"write list"パラメーターを利用します。"read only = yes"を設定することでファイル共有全体が読み取り専用になります。
"write list"パラメーターには書き込みを許可したいユーザーやグループを指定します。
例えば"rem-test01"ユーザーと"rem-testgroup02"グループのみに書き込みを許可したい場合には以下のように設定します。

read only = yes
write list = rem-test01 @rem-testgroup02

smb.confの[Share]セクションに記載した例は以下のようになります。

 code
[Share]
comment = Share Folder for All Users
path = /home/share/
browsable = yes
read only = yes
write list = rem-test01 @rem-testgroup02

smb.confの設定後、smbを再起動することで設定が反映されます。

メモ

smb再起動の手順は項目2-1.と同様に"systemctl restart smb"で行います。

設定反映後にファイル共有への書き込みをテストしてみます。書き込みが許可されていないユーザー"rem-test03"でファイル共有内にフォルダを作成してみます。rem-test03では書き込み時にエラーが出力されます。

samba-access-setting-01-03

ログにもエラーが出力されていることが確認できます。

 log
[2019/07/11 10:48:39.705764, 2] ../source3/smbd/open.c:3997(open_directory)
open_directory: unable to create 新しいフォルダー. Error was NT_STATUS_ACCESS_DENIED

次に書き込みが許可されている"rem-test01"でファイル共有にアクセスして新規にフォルダを作成してみます。

samba-access-setting-01-04

許可されているユーザーの場合、エラーも出力されずにフォルダの作成も出来ました。
ログにもエラーは出力されていません。

 log
[2019/07/11 10:50:38.776896, 2] ../source3/smbd/service.c:841(make_connection_snum)
win10-test (ipv4:192.168.241.151:49916) connect to service Share initially as user rem-test01 (uid=1002, gid=5001) (pid 2202)

4-2. ファイル共有で、特定のユーザーのみ読み取り専用に設定

ファイル共有を読み書きができるように設定して、特定のユーザーのみ読み取り専用にすることもできます。特定のユーザーのみ読み取り専用を設定する場合には"read list"パラメーターを利用します。
例えば"rem-test02"ユーザーと"rem-testgroup03"グループのみを読み取り専用でアクセスさせたい場合には以下のように設定します。

read only = no
read list = rem-test02 @testgroup03

smb.confの[Share]セクションに記載した例は以下のようになります。

 code
[Share]
comment = Share Folder for All Users
path = /home/share/
browsable = yes
read only = no
read list = rem-test02 @rem-testgroup03

smb.confの設定後、smbを再起動することで設定が反映されます。

メモ

smb再起動の手順は項目2-1.と同様に"systemctl restart smb"で行います。

5. ユーザーと読み書き単位のアクセス制御を組み合わせる

項目3.で紹介したユーザーのアクセス制御と、項目4.で紹介した読み書き単位のアクセス制御はファイル共有セクション内で組み合わせて利用することもできます。
以下のような条件でファイル共有にアクセス制御を設定したい場合があるとします。

  • ファイル共有は読み取り専用
  • ファイル共有にアクセスできるのは rem-testgroup01とrem-testgroup02
  • ファイル共有に書き込みができるのは rem-testgroup01のみ

この場合には以下のような設定をファイル共有セクションに記載します。

valid users = @rem-testgroup01 @testgroup02
read only = yes
write list = @rem-testgroup01

smb.confの[Share]セクションに記載した例は以下のようになります。

 code
[Share]
comment = Share Folder for All Users
path = /home/share/
browsable = yes
read only = yes
valid users = @rem-testgroup01 @testgroup02
write list = @rem-testgroup01

smb.confの設定後、smbを再起動することで設定が反映されます。

メモ

smb再起動の手順は項目2-1.と同様に"systemctl restart smb"で行います。

このように単位での設定パラメーターを組み合わせることで、かなり柔軟な設定ができます。設定の完了後にはsmbサービスを再起動することを忘れないようにして下さい。

6. まとめ

以上がSambaの機能でファイル共有レベルで接続制御をするために設定になります。firewalldによるOSのファイアウォール機能で接続を制御する方法もありますが、ファイル共有についてはSambaの機能でアクセス制御を完結したほうがスマートです。Windows Serverと同等のファイルやフォルダに細かいアクセス制御を行う必要がなければ、アクセス制御については本記事で紹介したパターンの組み合わせで十分に対応できるかと思います。

ファイルやフォルダなどファイルシステムに設定するアクセス制御については今後、別の記事で紹介していきたいと考えています。まずは本設定で運用しているSambaのアクセス制御を利用してみて下さい。Sambaの可能性がかなり広がりますので、是非、色々な組み合わせを試してみてはいかがでしょうか。

  • この記事を書いた人
rem-profile-photo

レムシステム

レムシステムはPC・サーバー・ネットワークでの業務効率化を主な業務としている会社です。全国に対応しています。

-CentOS, Samba