うたカモ技術ブログ

Linux ネットワーク

ファイル共有サーバー   Sambaの構築と使い方

post: 

今回は、LinuxでSMBファイル共有を行うためのSambaを紹介します。

Sambaは、LinuxでSMB/CIFSプロトコルを扱えるようにするソフトウェアです。Linux側をWindows互換の共有ディレクトリサーバーとして運用できるため、家庭内LANでのファイル共有、Windowsとのファイル受け渡しなどでよく使われます。

この記事ではUbuntuなどのLinux環境を前提に、Sambaの基本設定から接続確認、運用時の注意点までまとめて紹介します。

目次

  1. この記事で試した実施環境について
  2. Sambaとは
  3. 【サーバー側操作】Sambaのインストールと確認
  4. 【サーバー側操作】共有ディレクトリの準備
  5. 【サーバー側操作】パスワード認証付き共有の設定
  6. 【サーバー側操作】ゲスト共有の設定(任意)
  7. 【サーバー側操作】サービス起動とファイアウォール設定
  8. 【クライアント側操作】接続確認
  9. よく使うコマンド
  10. トラブルシュート
  11. セキュリティ運用メモ
  12. 用途別の実行例
  13. おわりに
  14. 参考文献

この記事で試した実施環境について

この記事は以下の環境構成で実施した内容を基に作成しました。

この記事で試した実施環境について
項目 内容
サーバー側 Raspberry Pi 3B / Ubuntu 24.04
クライアント側 Windows 11 / Ubuntu 24.04 (WSL2)
共有プロトコル SMB (Samba)

余談

ちなみに、私は学生の時にSambaを良く使っていましたが、社会人後は全く使わなくなっていました。なので今回は復習も兼ね、余ったラズベリーパイ達とUSBメモリの使い道の模索としてSambaサーバーを構築してみました。要するに、この記事はそのときの作業を形として残そうという魂胆で作成されています。

Sambaとは

Sambaは、Linux/Unix系OSでSMB(Server Message Block)を提供するソフトウェアです。

SMBはもともとWindows系で発展してきたファイル共有プロトコルで、Windows標準の共有機能でも使われています。 SambaはそのSMBをLinux/Unix側で扱えるようにする互換実装です。

これにより、WindowsのエクスプローラーからLinuxの共有ディレクトリへアクセスしたり、Linux間でSMB共有を使ったファイル連携ができます。

【サーバー側操作】1.Sambaのインストールと確認

インストール

kamo-server@kamo1:~$ sudo apt update
kamo-server@kamo1:~$ sudo apt install samba

インストール確認

kamo-server@kamo1:~$ smbd --version
kamo-server@kamo1:~$ testparm -s

補足

基本的な設定ファイルは/etc/samba/smb.confです。設定変更後はtestparmで構文確認してから再起動すると安全です。

【サーバー側操作】2.共有ディレクトリの準備

まずは共有対象のディレクトリを作成します。ここでは認証付き共有用に/srv/samba/privateを使います。

kamo-server@kamo1:~$ sudo mkdir -p /srv/samba/private
kamo-server@kamo1:~$ sudo chown -R root:sambashare /srv/samba/private
kamo-server@kamo1:~$ sudo chmod -R 2775 /srv/samba/private

今回は上記コマンドの実行で所有者をroot、共有用グループをsambashareに設定した共有ディレクトリを作りました。

ディレクトリの所有者/グループとアクセス権に関わる設定

  1. chown -R root:sambashare /srv/samba/private:所有者をroot、グループをsambashareへ変更します。-Rは配下に対する再帰適用です。
  2. chmod -R 2775 /srv/samba/private:アクセス権を設定します。先頭の2はsetgidで、配下に新規作成されるファイル/ディレクトリのグループをsambashareに揃えやすくします。775は所有者/グループに読み書き実行、その他ユーザーに読み取り実行を許可します。

【サーバー側操作】3.パスワード認証付き共有の設定

1) Samba用ユーザーを準備

補足

この記事では新規ユーザーとしてkamo-shareを作成します。 適宜、kamo-shareを読者ご自身の対象ユーザー名に置き換えてください。

まず、共有専用ユーザーを新規作成する場合は次を実行します。

kamo-server@kamo1:~$ sudo adduser --disabled-password --gecos "" kamo-share
kamo-server@kamo1:~$ sudo usermod -aG sambashare kamo-share

既存ユーザーを使う場合は、ユーザー作成を省略してグループ追加のみ実施します。

kamo-server@kamo1:~$ sudo usermod -aG sambashare <existing-user>

続いて、Samba認証用のパスワードを登録して有効化します。

kamo-server@kamo1:~$ sudo smbpasswd -a kamo-share
kamo-server@kamo1:~$ sudo smbpasswd -e kamo-share

2) smb.confに共有設定を追加

/etc/samba/smb.confの末尾に次を追加します。

[private]
   path = /srv/samba/private
   browseable = yes
   read only = no
   valid users = kamo-share
   force group = sambashare
   create mask = 0664
   directory mask = 0775

ここで重要なのは、valid usersで接続を許可するユーザーを限定している点です。さらにforce groupで作成ファイルのグループを揃え、create mask/directory maskで新規作成時の権限を制御しています。

【サーバー側操作】4.ゲスト共有の設定(任意)

LAN内だけで一時的に公開したい場合は、ゲスト共有を設定できます。 ただし、認証なしアクセスになるため運用範囲は限定してください。

kamo-server@kamo1:~$ sudo mkdir -p /srv/samba/public
kamo-server@kamo1:~$ sudo chown -R nobody:nogroup /srv/samba/public
kamo-server@kamo1:~$ sudo chmod -R 0775 /srv/samba/public
[public]
   path = /srv/samba/public
   browseable = yes
   read only = no
   guest ok = yes
   force user = nobody
   force group = nogroup
   create mask = 0664
   directory mask = 0775

ゲスト共有は検証や一時利用に限定し、不要になったら[public]セクションを無効化(または削除)して元に戻してください。

【サーバー側操作】5.サービス起動とファイアウォール設定

ここでは、まずtestparmで設定ミスがないことを確認し、その後にサービス再起動で反映します。続けてenableで自動起動を有効化し、最後にstatusで動作状態を確認します。

kamo-server@kamo1:~$ sudo testparm
kamo-server@kamo1:~$ sudo systemctl restart smbd
kamo-server@kamo1:~$ sudo systemctl enable smbd
kamo-server@kamo1:~$ sudo systemctl status smbd

UFWを使っている場合は、Sambaプロファイルを許可します。

kamo-server@kamo1:~$ sudo ufw allow Samba
kamo-server@kamo1:~$ sudo ufw status

【クライアント側操作】1.接続確認

Linuxクライアントソフトのインストール

Linuxクライアントからsmbclientで接続確認したり、SMB共有をマウントして使う場合は次をインストールします。

kamo-client@kamo2:~$ sudo apt update
kamo-client@kamo2:~$ sudo apt install smbclient cifs-utils

Linuxクライアント(smbclient)

まず-Lオプションで公開されている共有一覧を確認し、その後に共有名を指定して接続します。接続後はsmb: >プロンプトでlsputgetなどを実行できます。作業を終えるときはexitで接続を終了します。

kamo-client@kamo2:~$ smbclient -L //192.168.1.225 -U kamo-share
kamo-client@kamo2:~$ smbclient //192.168.1.225/private -U kamo-share
smb: \> ls
smb: \> put local-test.txt
smb: \> get readme.txt
smb: \> exit

今回は接続確認として、クライアント側で用意したlocal-test.txtputでアップロードし、Sambaサーバー側にあるreadme.txtgetでダウンロードしています。動作確認する場合は、同名ファイルを用意するか、自分の環境のファイル名に置き換えて同じ流れを試してください。

Linuxクライアント(マウント)

上記のsmbclientで接続確認が取れたら、次のコマンドで共有ディレクトリをローカルにマウントします。マウント後は通常のディレクトリとしてファイルを読み書きできます。

kamo-client@kamo2:~$ sudo mkdir -p /mnt/samba-private
kamo-client@kamo2:~$ sudo mount -t cifs //192.168.1.225/private /mnt/samba-private -o username=kamo-share,vers=3.0,uid=$(id -u),gid=$(id -g)

マウント後は、次のように確認すると分かりやすいです。ls -la /mnt/samba-privateで共有内容が見えること、テストファイルの作成/削除ができることを確認してください。

Windowsクライアント

WindowsはSMBクライアント機能を標準で持っているため、通常は追加インストール不要です。

手順は以下の通りです。

1.エクスプローラーのアドレス欄に \\192.168.1.225\private を入力

Windows Explorer画面

2.ユーザー名(例: kamo-share)とSambaパスワードを入力

Windows Explorer画面

3.接続後、ファイル作成・読み書きができることを確認

Windows Explorer画面

よく使うコマンド

サーバー側/クライアント側の混在を避けるため、実行する側を併記します。

コマンド 用途 実行側
testparm smb.conf構文チェック サーバー側
smbclient -L //<host> -U <user> 公開共有一覧の確認 クライアント側
sudo smbpasswd -a <user> Sambaユーザー追加 サーバー側
sudo systemctl restart smbd 設定反映 サーバー側
sudo journalctl -u smbd -n 100 --no-pager 直近ログ確認 サーバー側

トラブルシュート

【サーバー側】1) 共有が見えない・接続できない

kamo-server@kamo1:~$ sudo ss -tulpn | grep -E ':445|:139'
kamo-server@kamo1:~$ sudo systemctl status smbd

【サーバー側】2) 認証エラーになる

kamo-server@kamo1:~$ sudo pdbedit -L
kamo-server@kamo1:~$ sudo smbpasswd -a kamo-share

【サーバー側】3) 権限エラーになる

kamo-server@kamo1:~$ namei -l /srv/samba/private
kamo-server@kamo1:~$ ls -ld /srv/samba/private

【サーバー側】4) 設定ミスを疑うとき

kamo-server@kamo1:~$ sudo testparm
kamo-server@kamo1:~$ sudo journalctl -u smbd -f

セキュリティ運用メモ

  1. 外部公開はせず、LAN内利用を前提にする
  2. ゲスト共有は必要な期間だけ有効化する
  3. SMB1は無効化し、SMB2/SMB3で運用する
  4. 必要ならSambaを特定インタフェースのみにバインドする
[global]
   server min protocol = SMB2_10
   interfaces = lo eth0
   bind interfaces only = yes

用途別の実行例

【サーバー側】1) 共有設定の文法チェックだけ実施したい

kamo-server@kamo1:~$ sudo testparm

【クライアント側】2) クライアントから共有一覧だけ確認したい

kamo-client@kamo2:~$ smbclient -L //192.168.1.225 -U kamo-share

【クライアント側】3) Linuxから一時的にマウントして作業したい

kamo-client@kamo2:~$ sudo mount -t cifs //192.168.1.225/private /mnt/samba-private -o username=kamo-share,vers=3.0

【クライアント側】4) マウントを解除したい

kamo-client@kamo2:~$ sudo umount /mnt/samba-private

【クライアント側】5) Windowsでドライブとして割り当てたい

net use Z: \\192.168.1.225\private /user:kamo-share *

おわりに

この記事では、SambaによるLinuxのSMBファイル共有を、インストールから接続確認まで一通り整理しました。

まずは認証付き共有(valid users)で最小構成を作り、必要な場合にのみゲスト共有を追加する運用が安全です。

共有できない場合は、testparmsmbdの状態ディレクトリ権限の3点を先に確認してください。

参考文献