Ubuntu 26.04 講座 / Sambaで制限されたファイル共有を作成する
制限された Samba 共有は、ユーザー認証、共有へのアクセスルール、Linux ディレクトリ権限、およびネットワーク制限を一緒に設定する必要があります。この実習では、新しい専用サーバーに LabShare を作成し、許可されたユーザーと除外されたユーザーをそれぞれ試してアクセス範囲を確認します。
サーバー・アカウント・接続経路を決める
Samba は SMB (Server Message Block) プロトコルでファイルを共有します。Windows のファイルエクスプローラーではサーバーの実際のアドレスで接続し、Linux では smbclient で試します。インターネットに SMB を直接公開せず、信頼できる LAN や管理している VPN 内で使用します。
以下の名前と /srv/ubuntu-share-lab パスが存在しない新しい実習 VM を使用します。すでに運用中の Samba では、既存のグローバル設定・アカウント・共有を最初に確認し、そのまま上書きしません。Samba のパスワードは Linux のログインパスワードとは別であり、まず Linux アカウントが存在する必要があります。
Ubuntu の Samba アクセス制御ドキュメントは、アカウントデータベースと共有・ファイルシステム権限の関係を説明しています。
グループと Samba 専用アカウントを作成する
sudo apt update
sudo apt install samba smbclient
sudo addgroup ubuntu-share-lab
sudo adduser --disabled-password --gecos "" --no-create-home --shell /usr/sbin/nologin --ingroup ubuntu-share-lab sharelab
sudo adduser --disabled-password --gecos "" --no-create-home --shell /usr/sbin/nologin sharedeny
sudo smbpasswd -a sharelab
sudo smbpasswd -a sharedeny
sudo install -d -m 2770 -o root -g ubuntu-share-lab /srv/ubuntu-share-lab
id sharelab
id sharedeny
ls -ld /srv/ubuntu-share-lab
2つの smbpasswd コマンドで、それぞれ異なる実習用パスワードを対話形式で入力します。コマンドラインにパスワードを書きません。sharelab は許可グループに含め、sharedeny は入れないようにします。ディレクトリの 2 は setgid により新しい項目のグループ継承をサポートし、770 は 所有者・グループのアクセスを許可します。既存の資料に対して無差別に chmod 777 を適用しません。
共有セクションを追加して構文をチェックする
backup_dir=$(sudo mktemp -d /root/samba-lab.XXXXXX)
sudo cp -a /etc/samba/smb.conf "$backup_dir/smb.conf"
printf "%s\n" "$backup_dir"
sudoedit /etc/samba/smb.conf
バックアップパスを記録し、既存ファイルの末尾に次のセクションを一度だけ追加します。同じ名前の共有がある場合は中止し、新しい名前を設定します。既存の [global] や他の共有セクションは削除しません。
[LabShare]
path = /srv/ubuntu-share-lab
browseable = yes
read only = no
guest ok = no
valid users = @ubuntu-share-lab
create mask = 0660
directory mask = 2770
sudo testparm -s
systemctl is-active smbd.service
testparm が成功して出力の LabShare 設定を確認した後でのみ、下記のコマンドで実行中の smbd に再読み込みさせます。サービスが動いていない場合は、まずログで起動失敗の原因を調査します。create mask は権限の上限であり、すべての新しいファイルが必ず同じモードになることを意味するわけではありません。
sudo smbcontrol smbd reload-config
sudo ss -lntp
サーバーの smbclient のインストールとクライアントツールの準備は別です。VM 作成講座の同一ホスト専用ネットワークで、まずサーバー .20 と許可された Linux クライアント .10 を確認し、以下のインストールは .10 クライアントで実行します。Windows は別途 smbclient をインストールする代わりに、ファイルエクスプローラーの UNC パスを使用します。
sudo apt update && sudo apt install smbclient
実際のクライアントで許可と拒否を試す
直接SMB接続にはTCP 445を使用します。UFWを管理する実習では、クライアントのアドレスが実際に192.168.56.10の場合にのみ、次の許可ルールを使用します。既存のSSHアクセスは保持し、UFWの有効化・基本ポリシーは先に確認した手順に従います。広範な既存の許可ルールがある場合は、狭いルールを追加しても制限されません。
sudo ufw allow from 192.168.56.10 to any port 445 proto tcp
sudo ufw status numbered
クライアント端末では、以下のアドレスを実際のサーバーアドレスに変更します。Windowsのファイルエクスプローラーでは、\\サーバーアドレス\LabShare 形式のUNCパスで認証します。サーバーのlocalhostでの試験だけでは、他のデバイスのアクセスやファイアウォールの効果を確認することはできません。
smbclient //192.168.56.20/LabShare -U sharelab -c "ls"
smbclient //192.168.56.20/LabShare -U sharedeny -c "ls"
sharelabは一覧取得に成功し、正しいSambaパスワードを持つsharedenyは共有アクセスが拒否される必要があります。間違ったパスワードによるログイン失敗だけでグループ制限を検証したとは見なしません。許可されたアカウントで小さな新しいファイルをアップロード・再度ダウンロードして比較し、許可されていないネットワークでも接続拒否を別途確認します。
書き込みテストと変更の復元
lab_dir=$(mktemp -d)
printf "samba-lab\n" > "$lab_dir/check.txt"
cd "$lab_dir"
smbclient //192.168.56.20/LabShare -U sharelab -c "put check.txt check.txt; get check.txt downloaded.txt"
cmp check.txt downloaded.txt
実習共有が空で check.txt がない場合にのみ実行します。cmp が出力なしで成功すれば、転送内容は同じです。既存の名前がある場合は、固有の名前を使用してください。失敗は認証・共有許可・ディレクトリ権限・マウント状態・AppArmor 記録に分けて調査します。
中断する場合は、今回の共有セクションと今回の UFW ルールのみを削除し、再度構文チェック後に設定を読み込みます。新しいアカウント・グループを削除する前に、他の用途や所有ファイルがないかを確認し、共有ディレクトリは資料を保存してから別途整理します。全体 smb.conf バックアップの復元は、その後他の変更がない場合にのみ検討します。




