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 = nowrite 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. 実践ステップ:基本的な共有サーバーの構築
- パッケージインストール
yum install -y samba samba-client samba-common - 共有ディレクトリ作成
mkdir -p /srv/share/public chmod 777 /srv/share/public - smb.confに共有定義を追加
[public] path = /srv/share/public public = yes writable = yes guest ok = yes browseable = yes - 構文チェックとサービス再起動
testparm systemctl restart smb nmb - 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/以下のログファイルを参照