Sambaでユーザーグループ毎にアクセスを分けてみた
はじめに
下記の記事でファイルサーバーを構築しましたがこれではまだ個人ユーザーでの制御しかできておりません。
アクセス制御を学ぶために今回は全ユーザーがアクセスできるディレクトリと一部のグループに所属しているユーザーのみ
アクセスできるディレクトリを作成し実際の動きを勉強してみようと思います。
先に結論
Sambaユーザーをグループに追加し/etc/samba/smb.confにあるグループのユーザーのみアクセスできるディレクトリを設定すると、
許可されていないユーザーは認証情報を求めらるようになり、実質許可されたディレクトリ以外アクセスが拒否されるようにました。
環境
- Mac
- Vscode
- Windows
事前準備
下記、記事の手順を実施していることを前提にしています。
1. /etc/samba/smb.confを確認
設定する前のデフォルトの状態を確認します。
cat /etc/samba/smb.conf
#Samba全体に関わる設定を行います
#変更をした場合、Sambaの再起動が必要です
#globalセクションで設定した項目が、以降のセクションで現れた場合は、設定が上書きされます
[global]
#Sambaサーバーが、所属するワークグループ
workgroup = SAMBA
#クライアントがどのようにSambaに応答するかを指定する。
security = user #ユーザー名とパスワードでローカル認証を行う
#Sambaのパスワードデータベースの形式
passdb backend = tdbsam #バイナリ形式のデータベースファイルにユーザー情報を格納します。
#多分プリンター関係の何か(調べたけどよくわからん)
printing = cups
printcap name = cups
load printers = yes
cups options = raw
# Install samba-usershares package for support
include = /etc/samba/usershares.conf
#ユーザーの各ホームディレクトリを一括して共有するためのセクション
[homes]
comment = Home Directories #コメントを指定
valid users = %S, %D%w%S #アクセス可能なユーザーを指定する。グループを指定する時は、@
browseable = No #ブラウジングした時に表示されるかどうかを指定する
read only = No #読み取り専用にするか
inherit acls = Yes #上位のディレクトリに付与されている権限を継承する
#プリンター共有設定
[printers]
comment = All Printers #コメントを指定
path = /var/tmp #共有ディレクトリのパスを指定する
printable = Yes #プリンタ共有として利用する
create mask = 0600 #ファイルに適用可能なパーミッション
browseable = No #ブラウジングし他時に表示されるかどうかを指定する
# windowsが、プリンタドライバの自動ダウンロードを行う際の共有名を指定する特殊なセクション
# windows側でプリンタドライバがない場合、[print$]セクションからドライバを検索するようになっている
[print$]
comment = Printer Drivers #コメントを指定
path = /var/lib/samba/drivers #共有ディレクトリのパスを指定する
write list = @printadmin root #書き込みが例外的に許可されるユーザーを指定します
force group = @printadmin #共有内に作成するファイルやディレクトリの所有者、所有グループを、強制的に指定したグループにする
create mask = 0664 #ファイルに適用可能なパーミッション
directory mask = 0775 #ディレクトリに適用可能なパーミッション
とりあえず[printers]と[print$]は今回利用しないので触らなくてよさそう。
2. 共有ディレクトリを作成
今回は/home配下にshareディレクトリを作成します。
sudo mkdir /home/share
/etc/samba/smb.confに下記セクションを追加します。
[share]
comment = Share Folder for All Users
path = /home/share/
browseable = yes
read only = no
設定が完了したら下記コマンドで設定を反映します。
sudo smbcontrol smbd reload-config
samba-userで確認。
ちゃんと表示されてますね。
samba-user2を作成して他のユーザーからshareフォルダにアクセスできるか確認します。
sudo useradd samba-user2
sudo pdbedit -a samba-user2
アクセスできました。
3. Sambaグループを作成する
次にグループを作成します。
sudo groupadd samba-group1
sudo groupadd samba-group2
cat /etc/group | grep samba-group
amba-group1:x:1003:
samba-group2:x:1005:
グループにユーザーを追加します。
sudo usermod -aG samba-group1 samba-user
sudo usermod -aG samba-group2 samba-user2
id samba-user
uid=1002(samba-user) gid=1002(samba-user) groups=1002(samba-user),1003(samba-group1)
id samba-user2
uid=1003(samba-user2) gid=1004(samba-user2) groups=1004(samba-user2),1005(samba-group2)
4. Sambaグループにアクセス権を追加する
/etc/samba/smb.confに下記セクションを追加してグループに対するアクセス許可を設定します。
[samba-group1]
path = /home/samba-group1/
browseable = yes
read only = no
valid users = @samba-group1
[samba-group2]
path = /home/samba-group2/
valid users = @samba-group2
browseable = yes
read only = no
設定が完了したら下記コマンドで設定を反映します。
sudo smbcontrol smbd reload-config
5. アクセス確認
まずはsamba-user2でsamba-group2にアクセスできるか確認します。
アクセスできました。
samba-user2でsamba~group1にアクセスできないことを確認します。
想定通り許可していないグループにはアクセスできないようです。
参考
おわりに
グループのアクセス制御をすることで多人数で運用する場合でも管理しやすくなりますね。
Discussion