🙌

Sambaでユーザーグループ毎にアクセスを分けてみた

2024/06/16に公開

はじめに

下記の記事でファイルサーバーを構築しましたがこれではまだ個人ユーザーでの制御しかできておりません。
https://zenn.dev/tshimoda/articles/376394a457a41f

アクセス制御を学ぶために今回は全ユーザーがアクセスできるディレクトリと一部のグループに所属しているユーザーのみ
アクセスできるディレクトリを作成し実際の動きを勉強してみようと思います。

先に結論

Sambaユーザーをグループに追加し/etc/samba/smb.confにあるグループのユーザーのみアクセスできるディレクトリを設定すると、
許可されていないユーザーは認証情報を求めらるようになり、実質許可されたディレクトリ以外アクセスが拒否されるようにました。

環境

  • Mac
  • Vscode
  • Windows

事前準備

下記、記事の手順を実施していることを前提にしています。
https://zenn.dev/tshimoda/articles/376394a457a41f

1. /etc/samba/smb.confを確認

設定する前のデフォルトの状態を確認します。

/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に下記セクションを追加します。

/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に下記セクションを追加してグループに対するアクセス許可を設定します。

/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にアクセスできないことを確認します。

想定通り許可していないグループにはアクセスできないようです。

参考

https://qiita.com/leomaro7/items/186ed1f9495233e2c6b9
https://qiita.com/marumen/items/4f9ca20392c021c4f897

おわりに

グループのアクセス制御をすることで多人数で運用する場合でも管理しやすくなりますね。

GitHubで編集を提案

Discussion