Sambaによるファイル共有サーバーの構築と管理

1. Sambaとは

Sambaは、異なるOS間でファイルやプリンターを共有するためのオープンソースソフトウェアです。SMB(Server Message Block)プロトコルまたはその拡張版であるCIFS(Common Internet File System)を使用して通信を行い、主にLinux/Unix系システム上で動作しながら、Windowsクライアントとの互換性を実現します。これにより、ネットワーク内の異機種混在環境でもシームレスなリソース共有が可能になります。

2. SMBとCIFSの違い

SMBはもともとMicrosoftが開発したローカルネットワーク向けのプロトコルですが、インターネット時代の要請に応じて標準化・拡張されたものがCIFSです。CIFSは認証方式や大容量転送のサポートなど、より高度な機能を持ち、HTTPのようにTCP/IP上での利用を前提としています。Sambaはこれら両方のプロトコルに対応しており、最新バージョンではSMB2/SMB3にも対応しています。

3. 基本構成要素

  • 使用プロトコル:SMB/CIFS
  • 主要サービス:
    • smbd:ファイルおよび印刷サービスの提供(ポート139, 445)
    • nmbd:NetBIOS名前解決(ポート137, 138)
  • 主な設定ファイル:
    • /etc/samba/smb.conf:メイン設定ファイル
    • /etc/samba/smbusers:ユーザー別名定義ファイル
    • /var/lib/samba/private/passdb.tdb:Samba専用ユーザー情報データベース

4. 認証モード(セキュリティレベル)

モード 説明 用途例
user ユーザー名とパスワードによる認証。デフォルト設定。 内部ネットワークにおける個人用ホームディレクトリ共有
share 共有ごとにパスワードが必要。接続時に指定。 一時的な公開フォルダ(匿名アクセス可)
server 外部の認証サーバー(他のSambaやWindowsサーバー)に委任 既存ドメイン環境への統合

ユーザー管理にはpdbeditコマンドを使用します:

# 新規Sambaユーザー追加(既存Linuxユーザーが必要)
pdbedit -a -u takashi

# ユーザー一覧表示
pdbedit -L

# ユーザー削除
pdbedit -x -u taro

5. 設定ファイルの構造と主なパラメータ

[global] セクション

[global]
  workgroup = MYGROUP
  server string = Samba Server %v
  interfaces = lo eth0 192.168.100.0/24
  bind interfaces only = yes
  hosts allow = 127.0.0.1 192.168.100.
  log file = /var/log/samba/log.%m
  max log size = 500
  security = user
  passdb backend = tdbsam
  load printers = no
  printing = bsd

[homes] セクション(自動ホームディレクトリ共有)

[homes]
  comment = Home Directories
  browseable = no
  writable = yes
  valid users = %S

[printers] セクション(非推奨だが残っている)

[printers]
  comment = All Printers
  path = /var/spool/samba
  printable = yes
  browseable = no
  guest ok = no

カスタム共有設定例

[documents]
  comment = Company Documents
  path = /srv/share/docs
  public = no
  writable = yes
  browseable = yes
  valid users = @staff
  create mask = 0664
  directory mask = 0775
  force group = staff

6. アクセス制御と権限管理

書き込み権限の細かい制御には以下の組み合わせが有効です:

  • writable = yes または read only = no
  • write list = jiro,@engineers:特定ユーザー/グループのみ書き込み可
  • ディレクトリのPOSIX権限:chmod 2775 /srv/share/docs(SGIDビットで継承)
  • ACLによる柔軟な制御:setfacl -m u:hanako:rwx /srv/share/docs

7. サービス管理

# サービス起動
systemctl start smb nmb

# 自動起動設定
systemctl enable smb nmb

# 設定ファイルの構文チェック
testparm

# 全オプションの一覧表示
testparm -v

8. クライアントからの接続方法

Linuxクライアント

# 共有リストの確認
smbclient -L //192.168.100.10 -U kenji

# 対話型シェルでの接続
smbclient //192.168.100.10/documents -U kenji

# CIFSでマウント(一時的)
mount -t cifs -o username=kenji,password=pass //192.168.100.10/documents /mnt/docs

# 永続マウント(/etc/fstab)
//192.168.100.10/documents /mnt/docs cifs credentials=/etc/samba/cred.file,iocharset=utf8 0 0

Windowsクライアント

# ファイラーのアドレスバーまたは「Win+R」で入力
\\192.168.100.10\documents

# ネットワークドライブの割当
net use Z: \\192.168.100.10\documents /user:kenji

# 接続の解除
net use Z: /delete

9. ファイアウォール設定

Samba動作に必要なポートを開けます:
firewall-cmd --permanent --add-service=samba
firewall-cmd --reload
必要ポート:TCP 139, 445、UDP 137, 138

10. 実践ステップ:基本的な共有サーバーの構築

  1. パッケージインストール
    yum install -y samba samba-client samba-common
  2. 共有ディレクトリ作成
    mkdir -p /srv/share/public
    chmod 777 /srv/share/public
  3. smb.confに共有定義を追加
    [public]
      path = /srv/share/public
      public = yes
      writable = yes
      guest ok = yes
      browseable = yes
  4. 構文チェックとサービス再起動
    testparm
    systemctl restart smb nmb
  5. SELinux対応(有効の場合)
    setsebool -P samba_export_all_rw on
    chcon -t samba_share_t /srv/share/public

11. トラブルシューティングのヒント

  • 接続タイムアウト:ファイアウォール、SELinux、ホスト名解決(/etc/hosts確認)
  • 認証失敗:ユーザーがSambaデータベースに登録されているか(pdbedit -L
  • 書き込み不可:ファイルシステム権限とSamba設定の両方を確認
  • ログ確認:/var/log/samba/以下のログファイルを参照

タグ: samba linux file-sharing cifs smb

5月23日 09:41 投稿