ファイル共有サーバー Sambaの構築と使い方
今回は、LinuxでSMBファイル共有を行うためのSambaを紹介します。
Sambaは、LinuxでSMB/CIFSプロトコルを扱えるようにするソフトウェアです。Linux側をWindows互換の共有ディレクトリサーバーとして運用できるため、家庭内LANでのファイル共有、Windowsとのファイル受け渡しなどでよく使われます。
この記事ではUbuntuなどのLinux環境を前提に、Sambaの基本設定から接続確認、運用時の注意点までまとめて紹介します。
目次
- この記事で試した実施環境について
- Sambaとは
- 【サーバー側操作】Sambaのインストールと確認
- 【サーバー側操作】共有ディレクトリの準備
- 【サーバー側操作】パスワード認証付き共有の設定
- 【サーバー側操作】ゲスト共有の設定(任意)
- 【サーバー側操作】サービス起動とファイアウォール設定
- 【クライアント側操作】接続確認
- よく使うコマンド
- トラブルシュート
- セキュリティ運用メモ
- 用途別の実行例
- おわりに
- 参考文献
この記事で試した実施環境について
この記事は以下の環境構成で実施した内容を基に作成しました。
| 項目 | 内容 |
|---|---|
| サーバー側 | 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に設定した共有ディレクトリを作りました。
ディレクトリの所有者/グループとアクセス権に関わる設定
- chown -R root:sambashare /srv/samba/private:所有者をroot、グループをsambashareへ変更します。-Rは配下に対する再帰適用です。
- 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: >プロンプトでls、put、getなどを実行できます。作業を終えるときは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.txtをputでアップロードし、Sambaサーバー側にあるreadme.txtをgetでダウンロードしています。動作確認する場合は、同名ファイルを用意するか、自分の環境のファイル名に置き換えて同じ流れを試してください。
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 を入力
2.ユーザー名(例: kamo-share)とSambaパスワードを入力
3.接続後、ファイル作成・読み書きができることを確認
よく使うコマンド
サーバー側/クライアント側の混在を避けるため、実行する側を併記します。
| コマンド | 用途 | 実行側 |
|---|---|---|
| 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
セキュリティ運用メモ
- 外部公開はせず、LAN内利用を前提にする
- ゲスト共有は必要な期間だけ有効化する
- SMB1は無効化し、SMB2/SMB3で運用する
- 必要なら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)で最小構成を作り、必要な場合にのみゲスト共有を追加する運用が安全です。
共有できない場合は、testparm・smbdの状態・ディレクトリ権限の3点を先に確認してください。
参考文献
- Samba Wiki - Main Page https://wiki.samba.org/index.php/Main_Page
- Samba Wiki - Setting up Samba as a Standalone Server https://wiki.samba.org/index.php/Setting_up_Samba_as_a_Standalone_Server
- Ubuntu Server Guide - Samba https://ubuntu.com/server/docs/samba-introduction
- Ubuntu Manpage - smb.conf(5) https://manpages.ubuntu.com/manpages/jammy/en/man5/smb.conf.5.html