Ubuntu 20.04 Server / Samba / インストールと共有フォルダーの作成

Ubuntu 20.04 ServerにSambaを導入し、共有・ユーザー・ファイル権限を設定すると、Windowsのエクスプローラーから読み書きできます。ここではパスワード不要のゲスト共有ではなく、専用グループの認証ユーザーだけが使える独立ファイルサーバーを構成します。

構成範囲の確認とSambaの導入

SambaはSMB(Server Message Block)でLinuxのファイルをWindowsなどと共有するサーバーです。ここではActive Directoryのドメインコントローラーやメンバーサーバーではなく、ローカルアカウントによる1つの共有を作ります。既存ドメイン環境の[global]をこの例で上書きしないでください。

sudo権限と十分な容量が必要で、WindowsからサーバーのプライベートIPや名前解決できるホスト名へ到達できる必要があります。例のサーバーは192.168.10.20、許可するネットワークは192.168.10.0/24です。実環境に置き換えてください。Ubuntu 20.04の標準サポートは2025年に終了したため、CanonicalのUbuntu 20.04サポート案内で保守の適用も確認します。

パッケージを導入してバージョンを確認します。smbclientは接続試験用のクライアントです。基本手順はUbuntuのSambaファイルサーバー文書を参照できます。

sudo apt update
sudo apt install samba smbclient
smbd --version
systemctl status smbd.service

既存サーバーでは共有とユーザーを先に調べ、/etc/samba/smb.confをバックアップします。同名のバックアップがあれば別名にします。以下は新しい空の共有ディレクトリを前提とし、既存データの所有者や権限を一括変更しません。

sudo cp -a /etc/samba/smb.conf /etc/samba/smb.conf.before-team-share
sudo testparm -s

ユーザー、グループ、共有ディレクトリを作る

  1. 例のsmbuserとsmbteamが存在するか確認します。存在する場合は用途と構成員を確認して再利用するか、別名にして以降も一致させてください。
getent passwd smbuser
getent group smbteam
  1. どちらも存在しない新規構成では、グループと共有専用アカウントを作り、Sambaパスワードを登録します。最後のコマンドのパスワードをWindows接続で使います。
sudo groupadd smbteam
sudo useradd -M -s /usr/sbin/nologin -G smbteam smbuser
sudo smbpasswd -a smbuser

これはホームディレクトリや対話ログインシェルを作らない共有用アカウントです。Linuxログイン用のpasswdとSamba認証用のsmbpasswdは別です。既存アカウントなら作り直さず、sudo usermod -aG smbteam USERNAMEで追加して同じ名前をSambaへ登録します。条件はUbuntu 20.04のsmbpasswdマニュアルで確認できます。

  1. 新規共有ディレクトリを作ります。このコマンドは所有者・グループ・モードを設定するため、既存データがある場合は権限を調べて別途適用します。
sudo install -d -o root -g smbteam -m 2770 /srv/samba/team
ls -ld /srv/samba/team
id smbuser

2770は所有者とグループに読み書き・ディレクトリ通過権限を与え、他のユーザーを除外します。先頭の2はグループ継承に使うsetgidビットです。所有グループがsmbteam、smbuserがその構成員か確認してください。Linux権限とSamba方針の両方を満たす必要があり、chmod 777で対処しません。

認証ユーザー専用の共有を設定する

sudoedit /etc/samba/smb.confで開き、既存設定を保ちながら次の区画を追加します。既に[Team]があれば重複させず、その設定を確認します。共有名Teamと実際のパスは別の値です。

[Team]
    path = /srv/samba/team
    browseable = yes
    read only = no
    guest ok = no
    valid users = @smbteam
    force group = smbteam
    create mask = 0660
    force create mode = 0660
    directory mask = 2770
    force directory mode = 2770

guest ok = noはゲストを禁止し、valid users = @smbteamはグループの認証ユーザーを許可します。read only = noはSamba側の書き込み許可で、Linux権限を無視しません。force groupは共有操作に使うグループをそろえます。

maskは新規項目の権限範囲を制限し、force modeは共同作業に必要なビットを追加します。新規ファイルは0660、ディレクトリは2770を目指しますが、既存項目には遡及しません。別のACL(Access Control List、アクセス制御リスト)や権限モジュールがあれば、その方針も確認します。詳しくはUbuntu 20.04のsmb.confマニュアルを参照してください。

設定検査、サービス適用、ファイアウォール確認

  1. 設定を検査します。エラーがあれば適用せず修正してください。testparmの成功は設定を読み込めるという意味で、認証やファイル操作の成功までは保証しません。
sudo testparm -s

出力の[Team]、パス、アクセス制限を照合します。testparmマニュアルも実動作は別途確認が必要と説明しています。再起動で既存共有が切れる場合があるため、利用者を確認して保守時間を設けます。

  1. 検査に成功したらサービスに反映し、自動起動と実行状態を確認します。
sudo systemctl enable --now smbd.service
sudo systemctl restart smbd.service
systemctl is-active smbd.service
systemctl is-enabled smbd.service
sudo ss -ltnp | grep ':445'
  1. ファイアウォールが有効なら、必要な内部ネットワークからのTCP 445だけを許可します。例の範囲は実環境に置き換え、既存規則との競合も確認してください。
sudo ufw status verbose
sudo ufw allow from 192.168.10.0/24 to any port 445 proto tcp

規則追加だけでは無効なUFWは有効になりません。遠隔管理規則を確認せずufw enableを実行しないでください。ルーターやクラウド規則も調べ、SMBをインターネットへ直接転送しません。アドレス直接接続なので、旧NetBIOS検索用ポートを一括開放する必要はありません。構文はUFWマニュアルを参照します。

サーバー自身で認証と一覧を試します。パスワードをコマンドに埋めず、プロンプトへ入力してください。Teamと内容を確認し、Windowsからの試験は別に行います。使い方はsmbclientマニュアルにあります。

smbclient -L 127.0.0.1 -U smbuser
smbclient //127.0.0.1/Team -U smbuser -c 'ls'

Windowsから接続しファイル操作を試す

  1. エクスプローラーのアドレスバーに次のパスを入力します。192.168.10.20は実際のサーバーへ置き換えます。ネットワーク一覧に自動表示されなくても、このパスで直接接続できます。
\\192.168.10.20\Team
  1. 資格情報にはsmbuserとsmbpasswd -aで登録したパスワードを入力します。WindowsアカウントやPINと混同しないでください。別アカウントが選ばれたら、他のアカウントを使う選択肢からSambaユーザーを指定します。
  2. テスト用フォルダーとファイルを作成し、内容を変更して再度開きます。テストファイルを削除し、別の許可ユーザーも必要なファイルを変更できるか確認します。重要な既存ファイルは使わないでください。

追加ユーザーごとにLinuxアカウントとSamba認証を用意し、smbteamへ加えます。共通パスワードではなく個別アカウントを使います。グループや権限変更後は既存接続を整理し、新しいSMBセッションで試します。

頻繁に使うならエクスプローラーのPC → ネットワークドライブの割り当てで文字を選び、フォルダーに\\192.168.10.20\Teamを指定できます。必要なら別の資格情報で接続します。版による位置はMicrosoftのネットワークドライブ案内を参照してください。

Windowsのゲスト制限やSMB署名要求により、旧来の匿名共有は拒否される場合があります。本例は認証接続を使い、SMB1導入、安全でないゲスト許可、署名無効化を解決策にしません。組織がNTLMなどを制限する場合はドメイン・サーバー方針に合う構成が必要です。版・エディションの条件はMicrosoftのSMB署名文書を参照します。

接続エラーの確認と共有解除

まずWindows PowerShellでTCP 445を確認します。TcpTestSucceededがTrueでも認証・権限の検証完了ではありません。Falseならアドレス、経路、ファイアウォール、待受サービスを先に調べます。オプションはMicrosoftのTest-NetConnection文書にあります。

Test-NetConnection -ComputerName 192.168.10.20 -Port 445

パスワードが拒否されたら登録状態、名前、グループ制限を確認します。ログイン後に書けない場合はnamei -l /srv/samba/team、ls -ld /srv/samba/team、id smbuserで上位パスの通過権限とグループを調べ、読み取り専用設定も照合します。記録はsudo journalctl -u smbd.service -n 50 --no-pagerと/var/log/samba/で確認します。

古い資格情報が使われ続ける場合はnet useで接続を確認します。ファイルを閉じ、問題の共有だけを次のように切断して再接続します。同じサーバーの他共有や資格情報マネージャーにも情報が残るため確認してください。無関係なドライブを一括削除しません。

net use \\192.168.10.20\Team /delete

共有を止めるにはsmb.confの今回の[Team]だけを削除・復元し、testparm -sで検査して保守時間にsmbd.serviceを再起動します。不要なら今回追加したUFW規則だけを同じ条件で削除します。残存接続も調べ、データやLinuxアカウントは共有解除とは別に保管します。

sudo ufw delete allow from 192.168.10.0/24 to any port 445 proto tcp

設定全体をバックアップから戻す前に、その後に他共有が変わっていないか比較します。アカウントのみ無効にするならsudo smbpasswd -d smbuserを使えますが、既存セッションが即終了するとは限りません。新規接続拒否と残存セッションを別々に確認してください。