Samba は Unix 系システムで Server Message Block(SMB)プロトコルを実装し、Linux、Windows、macOS などのクライアント間でファイルやプリンターを共有できるようにします。現代の環境では現在の SMB dialect を使います。古い用語 CIFS が Linux クライアントツールに残っていても、廃止された SMB1 を有効にすべき理由にはなりません。
ネットワーク共有 · レッスン 5
Samba
基本的な Samba ファイル共有を設定、検証、利用し、安全に保護する方法を学びます。
共有を計画する
Samba をインストールまたは変更する前に、許可するクライアント、ID、読み書き要件、ネットワークゾーン、データ所有者、バックアップポリシー、必要な SMB dialect を定義します。ホームやシステムのツリーを誤って公開せず、専用ディレクトリを使ってください。
アクセスは Samba のポリシーと基盤となるファイルシステム権限の両方で制御されます。smb.conf で書き込みを許可しても、アカウントにないファイルシステムアクセス権は与えられません。
Samba 共有を通じた書き込みを許可する必要があるものはどれですか?
基本的な共有を定義する
主要な設定ファイルは通常 /etc/samba/smb.conf です。制限された設定例を示します。
[team]
path = /srv/samba/team
browseable = yes
read
valid users = @teamshare
ディレクトリを作り、Unix グループに対して確認済みの所有権と権限を適用します。
$ sudo install -d -o root -g teamshare -m 2770 /srv/samba/team
set-group-ID ビットは新しいエントリにディレクトリのグループを継承させるのに役立ちますが、共同アクセスには ACL や慎重に選んだ create mask も必要な場合があります。継承だけで十分と決めつけず、実際に作られたファイルとディレクトリをテストしてください。
valid users = @teamshare は何を表しますか?
ID を設定する
スタンドアロンの Samba 設定では、通常アカウントに対応する Unix ID と、有効な Samba 認証情報が必要です。
$ sudo smbpasswd -a alice
ディレクトリドメイン環境では別の ID 設計を使います。パスワードをシェル履歴や無関係な利用者が読める設定に置かず、Samba パスワードが Unix アカウントのパスワードと自動的に同じになるとも考えないでください。
スタンドアロンサーバーで smbpasswd -a alice は通常何をしますか?
設定を検証して適用する
サービスを再読み込みする前に、解析された設定を確認します。
$ testparm -s
予期しない既定値やエラーを確認してから、ディストリビューションのサービスマネージャーで Samba サービスを再読み込みします。サービス名は環境により異なり、一般に smbd.service や smb.service などです。対応していれば reload は restart より影響が小さいものの、状態、待ち受けソケット、ファイアウォール範囲、ログは必ず確認してください。
クライアントからユーザーを明示してテストします。
$ smbclient //server.example.net/team -U alice
Samba の変更適用前に testparm -s を実行するのはなぜですか?
Linux からマウントする
Linux クライアントは通常、cifs ファイルシステムドライバーと mount helper を使います。コマンド引数のパスワードは履歴やプロセス調査から漏れる可能性があるため避けてください。root だけが読める認証情報ファイル、または承認済みの認証情報管理機構を使います。
$ sudo mount -t cifs //server.example.net/team /mnt/team \
-o credentials=/root/.smb-team,vers=3.1.1
認証情報ファイルを保護し、両端が対応する dialect を確認し、UID、GID、権限、暗号化の要件を意図して定義します。マウント後は findmnt で確認し、許可された読み書きテストを行い、利用中のユーザーと調整してからアンマウントします。
mount コマンドへ password=... を直接書くべきでないのはなぜですか?
レッスン完了
Samba を完了しました
これで、プロトコルとファイルシステム双方のセキュリティを考慮して Samba 共有を設定できます。
クライアント、ID、ネットワーク範囲、データポリシーを先に定義する。
共有を制限し、基盤となる権限と整合させる。
適切な ID モデルで Samba 認証情報を管理する。
testparmで検証し、クライアントからエンドツーエンドでテストする。クライアント認証情報を保護し、マウント済みアクセスを検証する。