実際の問題:UbuntuのファイルがWindowsから読めない
sysadminになりたての頃、チーム全体のファイルサーバーとしてUbuntu serverをセットアップする作業を任された。15人のオフィスで、ほとんどがWindowsユーザー、数人がmacOS、そして自分だけUbuntuという環境だ。課題は「追加ソフトをインストールせずに、Windowsから共有フォルダにアクセスできるようにすること」だった。
まずSFTPを試してみた――動作はするが、WinSCPかFileZillaをインストールする必要がある。NFSは悪くないが、WindowsのネイティブサポートはEnterprise版だけに限られる。結局、答えはSambaだった。追加ソフト不要で、ドライブをFile Explorerに普通のハードディスクとして直接マウントできる。
Sambaの仕組み、そしてNFSやSFTPではない理由
SambaはSMB/CIFSプロトコルのオープンソース実装だ――WindowsがLAN内でファイルやプリンターを共有するために使っているプロトコルそのものだ。
「PC」に表示されるネットワークドライブ?そのほとんどはSMBが裏で動いている。
3つの方法を簡単に比較する:
- NFS:Linux間では優秀だが、WindowsではEnterprise版かサードパーティソフトが必要
- SFTP/FTP:クライアントアプリが必要で、通常のドライブとしてマウントできない
- Samba (SMB):WindowsとmacOSがネイティブ対応、File Explorer/Finderに直接マウント可能
CentOSからUbuntuに移行して、yumの代わりにaptに慣れるまで約1週間かかった。でもSambaの設定はずっと楽だ。設定ファイルが適切な場所にあり、パッケージマネージャーもシンプル、そして何より重要なのは――CentOSのようにSELinuxが突然ブロックしてくることがない点だ。
Sambaのセットアップ方法2つ
方法1:Ubuntu DesktopのGUIを使う
Nautilusには「フォルダの共有」機能が標準搭載されている。フォルダを右クリック→プロパティ→共有で設定できる。手軽だが細かい制御ができないうえ、ヘッドレスサーバーでは使えない。
方法2:smb.confで手動設定する
完全な制御が可能で、開発環境でも本番環境でも使える。この方法を以下で詳しく説明する。
Sambaのインストールと設定手順
ステップ1:Sambaをインストールする
sudo apt update
sudo apt install samba samba-common -y
# Kiểm tra version
smbd --version
# Kết quả: Version 4.15.13-Ubuntu
ステップ2:共有ディレクトリを作成する
# Public share (ai cũng truy cập được)
sudo mkdir -p /srv/samba/shared
sudo chmod 0777 /srv/samba/shared
sudo chown nobody:nogroup /srv/samba/shared
# Private share (chỉ user có tài khoản)
sudo mkdir -p /srv/samba/private
sudo chmod 0755 /srv/samba/private
ステップ3:smb.confのバックアップと設定
メインの設定ファイルは/etc/samba/smb.confにある。編集前に必ずバックアップを取ること――自分は絶対に省略しない手順だ:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup
sudo nano /etc/samba/smb.conf
ファイルの末尾に追加する:
# ===== Public Share (không cần đăng nhập) =====
[shared]
comment = Public Shared Folder
path = /srv/samba/shared
browsable = yes
writable = yes
guest ok = yes
read only = no
create mask = 0777
directory mask = 0777
# ===== Private Share (cần đăng nhập) =====
[private]
comment = Private Folder
path = /srv/samba/private
browsable = yes
writable = yes
guest ok = no
valid users = @samba
read only = no
create mask = 0644
directory mask = 0755
ステップ4:Sambaユーザーを作成する
ここが最も混乱しやすい点だ:Sambaは独自のユーザーデータベースを持っており、/etc/passwdとは完全に独立している。まずLinuxユーザーを作成してから、Sambaに追加する必要がある――どちらの手順を省略してもすぐにエラーになる:
# Tạo Linux user (nếu chưa có)
sudo adduser sambauser
# Tạo group và thêm user vào
sudo groupadd samba
sudo usermod -aG samba sambauser
# Add vào Samba database và set password
sudo smbpasswd -a sambauser
# Hệ thống hỏi mật khẩu — khác với mật khẩu Linux
# Enable user
sudo smbpasswd -e sambauser
ステップ5:設定を確認してサービスを起動する
# Kiểm tra syntax config trước khi restart
testparm
# Restart Samba
sudo systemctl restart smbd nmbd
# Bật auto-start khi boot
sudo systemctl enable smbd nmbd
# Kiểm tra trạng thái
sudo systemctl status smbd
ステップ6:UFWファイアウォールを開放する
sudo ufw allow samba
sudo ufw reload
sudo ufw status
allow sambaコマンドはポート137・138(UDP)と139・445(TCP)を自動的に開放する――各ポートを手動で指定する必要はない。
ステップ7:他のOSから接続する
Windowsから――File Explorerを開いてアドレスバーに入力する:
\\192.168.1.100\shared
# Thay IP bằng địa chỉ Ubuntu server của bạn
固定のドライブとしてマウントしたい場合:「PC」を右クリック→「ネットワークドライブの割り当て」→上記のUNCパスを入力する。
macOSから――Finder→移動→サーバへ接続(⌘K):
smb://192.168.1.100/shared
他のLinuxから:
sudo apt install smbclient cifs-utils
# List tất cả shares trên server
smbclient -L //192.168.1.100 -N
# Mount public share
sudo mount -t cifs //192.168.1.100/shared /mnt/samba -o guest
# Mount private share với user
sudo mount -t cifs //192.168.1.100/private /mnt/private \
-o username=sambauser,password=yourpassword
実環境向けの追加設定
接続の監視
# Xem log realtime
sudo tail -f /var/log/samba/log.smbd
# Xem các kết nối đang active
sudo smbstatus
[global]セクションにログ設定を追加する
[global]
workgroup = WORKGROUP
log level = 1
log file = /var/log/samba/log.%m
max log size = 50
よくあるエラーのデバッグ
ファイアウォールを開放しても接続できない?すぐにワークグループを確認しよう――Windowsのデフォルトは「WORKGROUP」、Sambaも同様だが、ここが一致していないだけで接続が失敗する:
grep -i workgroup /etc/samba/smb.conf
ファイル書き込み時に「Permission denied」エラーが出る場合――9割方の原因はSamba設定ではなく、Linuxのディレクトリパーミッションだ:
ls -la /srv/samba/
# Kiểm tra ownership và permission của từng thư mục
CentOSとの違いとして、UbuntuにはデフォルトでSELinuxがない。パーミッションの問題が起きたらLinuxファイルパーミッションを確認するだけでいい――semanageやchconを触る必要はない。
まとめ
セットアップ全体で15〜20分ほどかかる。手順は:パッケージのインストール→ディレクトリ作成→smb.confの設定→Sambaユーザー作成→ファイアウォールの開放→接続テスト。最も混乱しやすいポイントは、SambaユーザーデータベースがLinuxユーザーと独立していること、そしてSamba設定が有効になる前にディレクトリのパーミッションが正しく設定されている必要があることだ。
上記の設定は20人未満の小規模な社内ファイルサーバーには十分だ。より複雑なグループ権限管理、Active Directoryとの統合、数十人規模のユーザー管理が必要になってきたとき、初めてSamba ACLとwinbindを深く掘り下げる必要が出てくる。

