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

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

Sambaを使い始めたのは、小さなオフィスを管理していた頃——Windows機15台、Ubuntu Server 2台でファイルサーバーを構築していた時のことです。最初はフォルダを共有するだけの簡単なことだと思っていました。でも6ヶ月間本番運用してみると、Sambaを安定かつセキュアに保つために気をつけるべき点がかなり多いことに気づきました。

背景とSambaが必要な理由

本質的に、SambaはLinux上でSMB/CIFSプロトコルを実装したソフトウェアです——WindowsがネットワークでファイルをシェアするためのプロトコルがSMBです。これにより、Ubuntu ServerはWindowsマシンと通信でき、クライアント側は追加のソフトウェアをインストールする必要がありません。

私が実際に経験した具体的なケース:Windowsを使う開発チームが、Ubuntu Server上のコードディレクトリに直接アクセスしたいという要望がありました——SSHも不要、ファイルのコピーも不要です。Sambaはこの問題をスマートに解決してくれました。

代表的なユースケースをいくつか挙げます:

  • Windowsを使うオフィス向けの社内ファイルサーバー
  • Linux VMとWindowsホスト間のフォルダ共有(VMware、VirtualBox)
  • Synology/QNAPの代替となるセルフホスト型NAS
  • ネットワーク経由でWindowsマシンからのバックアップ先

UbuntuへのSambaインストール

Ubuntu 22.04 LTSで検証・運用しています。インストールは比較的速く、複雑な依存関係もありません:

sudo apt update
sudo apt install samba samba-common-bin -y

バージョンとサービスの状態を確認します:

smbd --version
sudo systemctl status smbd

サービスが起動していない場合は、起動してシステム起動時に自動起動するよう設定します:

sudo systemctl start smbd nmbd
sudo systemctl enable smbd nmbd

nmbdはNetBIOS Name Serviceです——WindowsマシンがIPアドレスを覚えなくてもホスト名でサーバーを見つけられるようになります。これを省略しても、IPアドレスで接続することは可能ですが、「ネットワーク」にサーバーが表示されなくなります。

Sambaの詳細設定

メインの設定ファイルは/etc/samba/smb.confにあります。編集する前にバックアップを取りましょう——初めて設定を壊してしまい、復元に半日かかった経験から学んだ習慣です:

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup

[global]セクションの設定

[global]セクションには、サーバー全体に適用される設定が含まれています——ワークグループ、セキュリティモード、ログ設定、パフォーマンスチューニングなどです。ファイルを開いて編集します:

sudo nano /etc/samba/smb.conf
[global]
   workgroup = WORKGROUP
   server string = Ubuntu File Server
   security = user
   map to guest = bad user
   dns proxy = no

   # ログ設定
   log file = /var/log/samba/log.%m
   max log size = 1000
   logging = file

   # パフォーマンスチューニング
   socket options = TCP_NODELAY IPTOS_LOWDELAY
   read raw = yes
   write raw = yes
   max xmit = 65535

見落としがちなポイント:workgroup = WORKGROUPはWindowsマシンのワークグループと一致させる必要があります。Windows側で確認するには:「PC」を右クリック → プロパティ → システムの詳細設定 → コンピューター名。

共有フォルダの作成

実際の例として、2つの共有を作成します——チーム全員が読み書き可能なパブリック共有と、管理者専用のプライベート共有です:

# ディレクトリを作成する
sudo mkdir -p /srv/samba/public
sudo mkdir -p /srv/samba/private

# パブリックフォルダのパーミッション設定
sudo chown -R nobody:nogroup /srv/samba/public
sudo chmod -R 0775 /srv/samba/public

# プライベートフォルダのパーミッション設定
sudo chown -R root:root /srv/samba/private
sudo chmod -R 0770 /srv/samba/private

smb.confの末尾に追加します:

[Public]
   comment = Public Share - Team Access
   path = /srv/samba/public
   browsable = yes
   writable = yes
   guest ok = yes
   read only = no
   create mask = 0664
   directory mask = 0775

[Private]
   comment = Private - Admin Only
   path = /srv/samba/private
   browsable = yes
   writable = yes
   guest ok = no
   valid users = sambaadmin
   create mask = 0660
   directory mask = 0770

Sambaユーザーの作成

Sambaは独自のユーザーデータベースを使用します——/etc/passwdを直接使用しません。ユーザーはまずLinuxシステムに存在している必要があり、その後Sambaに追加します:

# システムユーザーを作成する(ログインシェル不要)
sudo useradd -M -s /usr/sbin/nologin sambaadmin

# Sambaデータベースに追加してパスワードを設定する
sudo smbpasswd -a sambaadmin

# ユーザーを有効化する
sudo smbpasswd -e sambaadmin

小さな注意点:CentOS/RHELでは/sbin/nologinを使うことが多いですが、Ubuntuでは/usr/sbin/nologinを使います。現代のUbuntuでは/sbin/usr/sbinへのシンボリックリンクなので両方とも動作しますが、一貫性のために/usr/sbin/nologinを使うのが良いでしょう。

ファイアウォールの設定

Sambaのポートを開放するコマンドは一つだけです:

sudo ufw allow samba
sudo ufw status

ufw allow sambaは自動的にポート137、138(UDP)と139、445(TCP)を開放します。本番環境では、内部サブネットのみに制限することをお勧めします——はるかに安全です:

sudo ufw allow from 192.168.1.0/24 to any app samba

確認とモニタリング

再起動前の設定ファイル検証

サービスを再起動する前に必ずシンタックスを確認しましょう——設定ファイルに誤りがあるとsmdbが起動できず、すべての共有がダウンしてしまいます:

testparm

Loaded services file OKという行が表示されたら、安心して再起動できます:

sudo systemctl restart smbd nmbd

ローカルからの接続テスト

# すべての共有を一覧表示する
smbclient -L localhost -U sambaadmin

# プライベート共有に接続する
smbclient //localhost/Private -U sambaadmin

# パブリック共有に匿名で接続する
smbclient //localhost/Public -N

アクティブな接続のモニタリング

smbstatusはトラブルシューティング時に最もよく使うコマンドです——誰が接続しているか、どのファイルをロックしているか、どのIPからアクセスしているかを表示できます。「ファイルが開けない」と報告があった時に非常に便利で、9割がたは他の誰かがそのファイルをロックしているのが原因です。

# セッションと開いているファイルを確認する
smbstatus

# より詳細な情報を表示する
smbstatus --verbose

# ログをリアルタイムで監視する
sudo tail -f /var/log/samba/log.smbd

よくあるエラーと対処法

NT_STATUS_LOGON_FAILURE:ユーザーはLinuxに存在しますが、Sambaデータベースに追加されていません。sudo smbpasswd -a usernameを実行してください。

NT_STATUS_ACCESS_DENIED:ディレクトリのパーミッションが正しくありません。chownchmodがsmb.confのvalid usersと一致しているか確認してください。

ネットワーク上にサーバーが表示されない:nmdbが起動していないかクラッシュしています。sudo systemctl status nmbdを実行し、必要に応じて再起動してください。

Windowsマシンからの接続

ファイルエクスプローラーを開いて、アドレスバーに以下を入力します:

\\192.168.1.100\Public

192.168.1.100はUbuntu ServerのIPアドレスに置き換えてください。ドライブレターにマップすると便利です——特にUNCパスに慣れていないユーザーには:

# Windows(コマンドプロンプトまたはPowerShell)で実行する
net use Z: \\192.168.1.100\Public /persistent:yes

# 認証あり
net use Z: \\192.168.1.100\Private /user:sambaadmin /persistent:yes

約20人のWindowsユーザーが同時接続する環境で6ヶ月運用した結果、Ubuntu 22.04上のSambaはかなり安定しています。メモリ使用量は予想より低く——smbd + nmbd で50〜80MB程度のRAMしか消費しません。唯一のデメリット:ネットワークインターフェースが変更された際にnmdbを手動で再起動する必要が生じることがありますが、数ヶ月に一度程度しか起きません。

Share: