CentOS 7のSambaでファイル共有に基本的なアクセス権を設定、Sambaの基本的な設定を再確認。

samba-access-setting-top
CentOSでWindows向けのファイル共有を実装するためのアプリケーション“Samba”について、以前の記事でインストール方法と基本的な設定を紹介しました。

この記事では Sambaのインストールに関する部分を中心に記載しており、Sambaの設定については軽く記載した程度でした。

スポンサーリンク

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

目次

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

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

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

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

ファイルシステムレベルでのアクセス制御と比較して “ファイル共有レベルでのアクセス制御”は、ファイル共有ごとの設定となり、フォルダやファイルレベルでの制御はできませんが、smb.confの設定のみで利用することができ、利用するのに敷居が低いというメリット があります。
ファイル共有レベルでのアクセス制御
Samba_access_level
Sambaの設定について敷居が低いほうが導入や運用がしやすいと思いますので、本記事では”ファイル共有レベルでアクセス制御”を設定する手順を紹介します。(ファイルシステムレベルのアクセス制御も別の記事で紹介していく予定です。)

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

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

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

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

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

ファイル共有に対するアクセス制御の設定は ファイル共有セクションとSambaの動作を制御するためのglobalセクションの両方に設定することができます。 globalセクションに設定した場合には、smb.confに記載されているファイル共有全体(とSamba自体)に対して動作します。
globalセクションの設定、適用範囲
smb.conf_global
ファイル共有セクションに設定した場合には、設定したファイル共有でのみで動作します。
ファイル共有セクションの設定、適用範囲
smb.conf_share
設定を行う場所で挙動が違ってきますので注意して下さい。本記事では基本的に”ファイル共有セクション”について設定を行う形を前提としています。同じ内容をglobalセクションに設定することも可能ということだけ覚えて頂ければ良いかと思います。

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

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

で設定したSamba環境の“smb.conf”を元に行います。
構成図は以下のようになります。
samba-access-setting-01-map
アクセス制御の設定を追加する部分はsmb.confに記載されているファイル共有セクション[Share]です。
記事内で設定したsmb.confの抜粋は以下になります。

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

この設定を行うことで接続コンピューターごとの詳細なログが“/var/log/samba/log.コンピューター名”で出力されます。ユーザーとグループによるアクセス制御の設定を紹介する際に、このログも合わせて抜粋していきます。
ログについては出力される量が多いことからディスクのIOを消費してしまうため、運用時には“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全体”からの接続を許可する場合には

という形で4オクテット目を設定しない形で指定します。
因みに hosts allowではlocalhostアドレス(127.0.0.1)はhosts denyで明示的に拒否しない限り、常にアクセスを許可されていますので設定は不要です。  実際にsmb.confにhosts allowパラメーターを設定すると以下のようになります。

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

以下のように“Loaded services file OK.”と表示されればsmb.confの設定に文法的な誤りはありません。

変更した設定を反映させるにはsmbサービスを再起動する必要があります。以下のようにsmbを再起動します。(nmbは名前解決に利用するNetBIOS用サービスのため再起動は不要です。)

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

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

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

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

smb.confの設定後、smbを再起動することで設定が反映されます。(smb再起動の手順は項目2-1に記載しています。)
設定を適用後にファイル共有への接続テストを行ってみました。サーバー上のファイル一覧が表示できるところまでは問題ありません。
samba-access-setting-01-01
設定を行ったファイル共有[Share]にアクセスすると、アクセスが拒否されます。
samba-access-setting-01-02
ログにも以下のようにアクセスを拒否された記録が出力されています。

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

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

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

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

smb.confの設定後、smbを再起動することで設定が反映されます。(smb再起動の手順は項目2-1に記載しています。)
接続テストでは項目2-2.と同様に接続が拒否されることが確認できます。
samba-access-setting-01-02
ログにも以下のようにアクセスを拒否された記録が出力されています。

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

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

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

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

smb.confの設定後、smbを再起動することで設定が反映されます。(smb再起動の手順は項目2-1に記載しています。)

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

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

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

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

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

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

ファイル共有のアクセス制御を設定するのに利用するテスト用のユーザーとグループを以下のように作成しました。
Samba_User_Group
グループとユーザーを作成するために以下のように“groupadd”コマンドと“useradd”コマンドを実行しました。useraddコマンドを実行する際にグループを指定しますので、ユーザーより先にグループを作成しています。

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

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

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

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

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

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

スポンサーリンク

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

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

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

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

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

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

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

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

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

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

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

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

2つのパラメーターを組み合わせてファイル共有へのアクセス制御を行います。
(参考)Windowsではファイル共有の接続情報をキャッシュしてしまうため、接続テストを行いたい場合にユーザーの切り替えができません。ファイル共有への接続情報をクリアするにはWindows側のコマンドプロンプトで以下のようにコマンドを実行します。(接続している先のコンピューター名が”fs”の場合)

実際にコマンドプロンプトから実行した画面は以下のようになります。
samba-access-setting-01-3-3
接続情報がクリアされると再度、認証用のダイアログが表示されるようになります。
接続テストの際に覚えておくと便利かと思います。

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

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

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

smb.confの設定後、smbを再起動することで設定が反映されます。(smb再起動の手順は項目2-1に記載しています。)

valid users パラメーターは指定したユーザーのみがファイル共有へアクセスできますので、パラメーターに指定されていない”rem-test03″はファイル共有にアクセスできません。
設定を行ったあと、ファイル共有に接続テストをしてみます。
アクセスが許可されているユーザー”rem-test01″はファイル共有にアクセスができました。
samba-access-setting-01-05.png
Sambaのクライアントログにも以下のように接続できた記録が出力されています。

次に許可されていないユーザー”rem-test03″で接続テストをしてみます。以下のようにアクセスが拒否されたことが確認できました。
samba-access-setting-01-02
Sambaのクライアントログにも以下のように拒否された記録が出力されています。

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

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

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

smb.confの設定後、smbを再起動することで設定が反映されます。(smb再起動の手順は項目2-1に記載しています。)
許可されていないユーザー”rem-test03″で接続テストをしてみます。invalid usersパラメーターに指定されている”rem-test03″ではファイル共有へのアクセスが拒否されました。
samba-access-setting-01-02
Sambaのクライアントログにも以下のように拒否された記録が出力されています。

次に拒否設定されていないユーザー”rem-test01″でファイル共有へアクセスしてみます。invalid usersパラメーターに指定されていない”rem-test01″ではファイル共有へのアクセスができました。
samba-access-setting-01-05.png
Sambaのクライアントログにも以下のようにアクセスできた記録が出力されています。

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

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

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

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

smb.confの設定後、smbを再起動することで設定が反映されます。(smb再起動の手順は項目2-1に記載しています。)
再起動後にShareファイル共有にアクセスしてテストを行います。rem-testgroup01グループのユーザーrem-test01ではShareファイル共有にアクセスできます。

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

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

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

smb.confの設定後、smbを再起動することで設定が反映されます。(smb再起動の手順は項目2-1に記載しています。)
再起動後にShareファイル共有にアクセスしてテストを行います。rem-testgroup02グループのユーザーrem-test02ではShareファイル共有にアクセスが拒否されました。

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

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

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

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

smb.confの設定後、smbを再起動することで設定が反映されます。(smb再起動の手順は項目2-1に記載しています。)

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

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

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

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

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

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

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

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

smb.confの設定後、smbを再起動することで設定が反映されます。
設定反映後にファイル共有への書き込みをテストしてみます。書き込みが許可されていないユーザー”rem-test03″でファイル共有内にフォルダを作成してみます。rem-test03では書き込み時にエラーがでます。
samba-access-setting-01-03
ログにもエラーが出力されていることが確認できます。

次に書き込みが許可されている”rem-test01″でファイル共有にアクセスして新規にフォルダを作成してみます。
samba-access-setting-01-04
許可されているユーザーの場合、エラーも出力されずにフォルダの作成も出来ました。
ログにもエラーは出力されていません。

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

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

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

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

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

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

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

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

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

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

6.まとめ

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

関連する記事


Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  • スポンサーリンク