UbuntuにSambaをインストール・設定する:LinuxとWindows間のファイル共有

Ubuntu tutorial - IT technology blog
Ubuntu tutorial - IT technology blog

実際の問題: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ファイルパーミッションを確認するだけでいい――semanagechconを触る必要はない。

まとめ

セットアップ全体で15〜20分ほどかかる。手順は:パッケージのインストール→ディレクトリ作成→smb.confの設定→Sambaユーザー作成→ファイアウォールの開放→接続テスト。最も混乱しやすいポイントは、SambaユーザーデータベースがLinuxユーザーと独立していること、そしてSamba設定が有効になる前にディレクトリのパーミッションが正しく設定されている必要があることだ。

上記の設定は20人未満の小規模な社内ファイルサーバーには十分だ。より複雑なグループ権限管理、Active Directoryとの統合、数十人規模のユーザー管理が必要になってきたとき、初めてSamba ACLとwinbindを深く掘り下げる必要が出てくる。

Share: