はじめに

LPIC202 のトピック 209「ファイル共有」より、Sambaサーバの設定についての学習メモをまとめる。
シラバスは公式サイトを参照。

そもそもSambaサーバとは

Samba は Windows のファイル共有プロトコル SMB/CIFS を Linux 上で実装し、
Linux を Windows ネットワークのファイルサーバ・プリンタサーバとして振る舞わせるソフトウェア。
CIFS(Common Internet File System)は SMB の実装名で、「SMB = CIFS」と捉えてよい。

重要ポイント:Samba は単一プロセスではなく、役割の異なる 3 つのデーモン が協調して動く。

デーモン担当頭文字での連想
smbdファイル共有・プリンタ共有・ユーザ認証(SMB/CIFS 本体)Share → smbd
nmbdNetBIOS 名前解決・ブラウジング(一覧表示)・WINSNaming → nmbd
winbinddWindows ドメインのユーザ/グループを Linux 側で利用可能にするWindows 情報 → winbindd
  • 「ファイル・プリンタ共有・認証を担う基本デーモン」= smbd
  • 「ブラウジング+ WINS(NetBIOS 名解決)を担う」= nmbd(NetBIOS Name Daemon)。
  • 「NSS / PAM 経由で Windows ユーザ情報を Linux に取り込む」= winbindd
    • 向きは Windows → Linux(「Samba ユーザを Windows 側で使う」という逆向きの説明は罠)。

★ 別レイヤーの話: Samba4 を AD ドメインコントローラ(AD DC) として動かすときは、上記 3 デーモンを個別起動するのではなく統合デーモン sambasystemctl start samba)を使う。管理ツールは samba-tool。「起動は samba、管理は samba-tool」とセットで覚える。

Samba3 と Samba4 の差分

Samba4 で初めて実装された機能は「AD ドメインコントローラ機能 + それを支える LDAP 内蔵DNS サーバ内蔵」の 3 点セット。
一方、WINS サーバ機能と NT ドメイン DC 機能は Samba3 時代から存在する(新機能ではない)。

設定ファイル smb.conf の構造

Samba の設定ファイルは /etc/samba/smb.conf
INI 形式で、セクションは大きく分けて以下の構成。

[global]
    workgroup = WORKGROUP
    server string = Samba Server Version %v
    netbios name = SAMBA
    security = user

[homes]
    comment = Home Directories
    browseable = no
    writable = yes

[printers]
    path = /var/spool/samba
    printable = yes

[data]
    path = /srv/samba/data
    valid users = alice bob
    writable = yes
セクション用途
[global]サーバ全体の動作(ワークグループ・認証方式・WINS・ログ等)
[homes]ログインユーザのホームディレクトリを自動共有する特殊セクション
[printers]プリンタ共有の特殊セクション(printable = yes 必須)
[print$]プリンタドライバの自動ダウンロード(Point and Print)用の置き場
[共有名]任意のファイル共有セクション(path 必須)

変数(マクロ)置換

パラメータ値の中で % 始まりの変数が実行時に展開される。

変数展開先連想
%Uセッション(接続)ユーザ名User
%vSamba のバージョン文字列version
%mクライアントの NetBIOS 名(マシン名)machine

log file = /var/log/samba/log.%m は「クライアントごとにログファイルを分ける」設定(%m を「月=month」と読むのは罠)。
logon script = %U.bat は「接続ユーザ名の .bat を実行」の意味。

smb.conf の主要パラメータ([global] / 共有)

[global] セクション

パラメータ役割罠・補足
workgroup所属ワークグループ名/AD の NetBIOS 名(短い名前)AD では realm と取り違え注意
realmAD ドメインの FQDN(Kerberos レルム)kerberos realm/realm name は造語
netbios nameこの Samba サーバの NetBIOS 名省略時はホスト名
server stringブラウジングに出る サーバ全体の説明文共有の comment と別物
security認証方式(後述)nt/windows は造語
encrypt passwords暗号化パスワードを使うか(s 付き)passdb backend と別物
null passwords空パスワードの許可(no で禁止)
unix password syncLinux と Samba のパスワードを同期するかlinux password sync は造語
username mapWindows 名 → Linux 名の 対応ファイルのパス値はファイルパス
log file / log level / max log sizeログのパス/詳細度(数値)/最大サイズ(KB「ログ三兄弟」。スペース区切り
wins support自分が WINS サーバになる(yes)wins server と同時設定不可
wins server参照する外部 WINS サーバの IPsupport↔server の役割が逆
local master / preferred master / os levelブラウザ選定(後述)
hosts allow / hosts deny接続を許可/拒否するホスト(複数形)host allow 単数形は誤り
map to guest / guest accountゲスト扱いの条件/ゲスト時の Linux ユーザ名
passwd program / passwd chatパスワード変更プログラム/その対話スクリプトprogram=実行、chat=対話

共有セクション

パラメータ役割罠・補足
path共有する実ディレクトリのパス(実質必須)directory/dir は造語
commentその共有の説明文(ブラウジング表示)server string([global])と別
writable / read only書き込み可否(表裏の同義パラメータ)writeable/write ok も同義
valid usersアクセス可能なユーザ(空白区切り、@グループ未指定なら全認証ユーザ可
write list書込禁止共有で例外的に書込許可するユーザアクセス可否ではなく書込権限
guest ok / publicゲストアクセス許可(同義語ペア)
browseable(=browsableブラウジング一覧に表示するかno でも直接指定は可
hide files / veto filesファイル非表示(後述で対比)
hide dot files. 始まりの隠しファイルを表示しない
create mask / force create mode作成ファイルのパーミッション上限/最低保証
directory mask / force directory mode作成ディレクトリの上限/最低保証ファイル版と混同注意
force user / force group作成物の所有ユーザ/グループを強制
printable(=print okプリンタ共有の必須スイッチ(同義語)

書き込み制御の組み立て

「共有全体は書込禁止、特定ユーザだけ書込許可」は次のように積み上げる。

[share]
    path = /srv/samba/share
    writable = no          # = read only = yes(同義)
    write list = lpic      # lpic だけ例外的に書込可

パーミッション制御(mask と force)

対象上限を削る(AND マスク)最低限を足す(OR マスク)
ファイルcreate mask / create modeforce create mode
ディレクトリdirectory mask / directory modeforce directory mode

mask = 上限(余分を削る)」「force … mode = 下限(必ず立てる)」。
たとえば「作成ディレクトリを所有者・グループのみ rwx」にするなら
directory mask = 0770(others を削る)+必要に応じ force directory mode を併用する。
所有者そのものを固定したいときは force user / force group(パーミッション値ではなく所有者名)。

非表示・アクセス制御の対比

パラメータブラウジング表示直接ファイル名指定
hide files非表示⭕ アクセス可(隠すだけ)
hide dot files. 始まりを非表示⭕ アクセス可
veto files非表示❌ アクセス不可(拒否権)
browseable = no共有自体を一覧から隠す⭕ 共有名直接指定は可
[共有名$](末尾 $共有自体を一覧から隠す⭕ 直接指定は可

hide = 目隠し(手は届く)/veto = 立入禁止(触れない)」。
共有まるごとを隠すには browseable = no か Windows 流の末尾 $C$ADMIN$ と同じ慣習)。

ホストベースのアクセス制御(評価順)

hosts allow / hosts deny の評価優先度は以下。

  1. hosts allow に一致 → 許可(deny より先に評価される)
  2. hosts deny に一致 → 拒否
  3. どちらにも不一致 → hosts allow が設定されていれば 拒否(許可リスト外は通さない)

つまり「許可リストに載っていないホストは、deny に書いていなくても弾かれる」点が要注意。
allow が deny より優先されるため、hosts allow の範囲に含まれてしまったホストは hosts deny を残しても通ってしまう。
なお smb.conf のパラメータは複数形 hosts allow
TCP Wrapper のファイル /etc/hosts.allow(ドット区切りのファイル名)とは別物。

認証と security パラメータ/ユーザ管理

security の 3 値

認証方式追加で必要な設定
user(既定)スタンドアロン(Samba 自身が認証)passdb backend(tdbsam 等)
domainNT ドメインの DC に認証を委任password server(委任先)
adsActive Directory(Kerberos)に参加realmworkgroup
  • 「ユーザ名・パスワードで自己完結」= security = user
  • 「(NT)ドメインコントローラに任せる」= security = domain
  • 自サーバ以外の認証サーバに委任する宛先は password server = <IP>

passdb backend(パスワードの保管方式)

内容
smbpasswdテキストファイル /etc/samba/smbpasswd(旧式)。場所は smb passwd filepasswd で password ではない)で指定
tdbsamTDB 形式のバイナリ DB(現在の標準・既定)
ldapsamLDAP サーバをバックエンドに使う

security(認証の「方式」)と passdb backend(ユーザ情報の「格納庫」)は別軸。
Samba は /etc/passwd/etc/shadow だけでは認証できない(これらは Linux の管轄で Samba 認証には使えない)。
Linux ユーザを useradd した上で smbpasswd -apdbedit -a -u で Samba 側にも登録が必要。

ゲストアクセス

  • map to guest([global])= 認証失敗時にゲスト扱いにする 条件
    • Never(既定・厳格)< Bad User(存在しないユーザのみ)< Bad Password(パスワード誤りも)。
  • guest account([global])= ゲスト時に割り当てる Linux ユーザ名(例 nobody)。
  • guest ok / public(共有)= その共有でゲストアクセスを許可する スイッチ

smbpasswd(ユーザ管理コマンド)

書式操作連想
smbpasswd lpicパスワード変更(オプションなし)passwd と同じ感覚
smbpasswd -a lpic追加add
smbpasswd -e lpic有効化enable
smbpasswd -d lpic無効化(削除ではないdisable
smbpasswd -x lpic削除expunge

pdbedit(ユーザ DB 操作コマンド)

書式操作
pdbedit -LSambaユーザ一覧表示(一覧はこれが唯一
pdbedit -a -u <user>追加
pdbedit -x -u <user>削除

「一覧は pdbedit -L」「パスワード操作は smbpasswd」と棲み分ける。userdel(Linux 側)では Samba ユーザは消えない(DB が独立しているため)。

クライアント/運用コマンド

クライアント側(Linux から共有へアクセス)

# 共有一覧を表示(-L / --list)
smbclient -L fileserver -U alice

# 共有に接続して対話操作(ftp 風: get / put)
smbclient //fileserver/share -U alice

# 認証不要(ゲスト)でパスワード入力をスキップ
smbclient //fileserver/share -N

# Linux のファイルシステムとしてマウント(現行は cifs)
mount -t cifs //fileserver/share /cifstest
mount.cifs //fileserver/share /cifstest
smbclient オプション意味
-L / --listサーバの共有一覧(List)
-U / --user接続ユーザ指定(大文字)-u/--username は誤り
-Nパスワード入力スキップ(No password)-n は NetBIOS 名指定

マウントは現行カーネルでは mount -t cifs または mount.cifs

サーバ側・運用コマンド

testparm           # smb.conf の構文チェック
testparm -v        # 未定義(デフォルト値)も含めて全表示(verbose)
testparm -s        # 確認プロンプトをスキップして自動表示(suppress-prompt=確認プロンプト抑止)

smbstatus          # 接続中クライアント・共有・ロックを表示

nmblookup name             # NetBIOS 名 → IP(正引き)
nmblookup -A 192.168.1.100 # IP → NetBIOS 名・MAC(逆引き、Address)
nmblookup -M WORK          # ワークグループ WORK のマスターブラウザ(Master)

smbcontrol smbd reload-config   # 稼働中デーモンに設定再読込
smbcontrol all reload-config    # 全デーモンへ一括

testparm の造語誤答に注意(smbtestparmcheckparm は存在しない)。
testparm は独立コマンドであり、samba-tool testparm のようなサブコマンドではない(構文チェックは testparm 一択)。

smbcontrol(稼働中デーモンへのメッセージ送信)

書式は smbcontrol <対象> <メッセージタイプ> [引数]

  • 対象に指定できるのは デーモン名(smbd/nmbd/winbindd)・PID・all の 3 種。sambaany は対象にできない。
  • 特定の共有を担うのは smbd なので、個別クライアント切断・共有クローズは smbd へ送る。
メッセージタイプ動作
reload-configsmb.conf を再読込(ハイフン区切り)
ping対象に ping し、応答した PID を表示
close-share指定共有をクローズ(smbcontrol smbd close-share <共有名>
kill-client-ip指定 IP のクライアントを切断(smbcontrol smbd kill-client-ip <IP>

AD メンバーサーバ(Samba4)で smb.conf を反映する場合は、デーモンを止めずに smbcontrol all reload-config で再読込できる。

マスターブラウザ選定([global] の 3 点)

パラメータ役割
local master選定に 参加するか(yes/no スイッチ)
preferred master起動時に 選挙を要求する(積極的に立候補)
os level選挙での 優先度(数値)。大きいほど有利

「あるサーバをマスターブラウザにする」には local master = yespreferred master = yesos level = 高い値 の 3 つを設定する。
誰がマスターブラウザかは nmblookup -M <ワークグループ> で調べる。

AD・Winbind 連携

Active Directory 参加

[global]
    security = ads
    realm = EXAMPLE.COM        # AD ドメインの FQDN(Kerberos レルム)
    workgroup = EXAMPLE        # AD の NetBIOS 名(短い名前)
    server role = member server
net ads join -U Administrator   # AD ドメインに参加
  • 参加コマンドは net ads joinnet joinsamba-tool domain join ではない。後者は AD DC 側の操作)。
  • 最頻出の罠は workgroup(NetBIOS 名・短い)と realm(FQDN・長い)の取り違え。「グループ名は短く、王国(realm)は完全名」と覚える。

Winbind(Windows ユーザを Linux で使う)

winbindd が NSS / PAM と連携し、Windows の SID を Linux の UID/GID にマッピングする(Idmap 機構)。
/etc/nsswitch.confpasswd/groupwinbind を追加して有効化する。

Windows ドメインの DC が保持する SID を winbindd が UID/GID に変換し、NSS(ユーザ名の解決)と PAM(パスワード認証)経由で Linux 側にアカウントを取り込む連携構造

[global]
    idmap config * : backend = tdb        # マッピングのバックエンド(tdb/rid/ad 等)
    idmap config * : range   = 10000-20000 # 割り当てる UID/GID の範囲
  • バックエンド指定 = idmap config * : backend(試験表記は idmap config backend)。winbind backend は造語。
  • UID/GID 範囲 = idmap config * : range。ローカルユーザの番号帯と重複しない範囲を選ぶ。
  • * はデフォルト(全ドメイン)。コロンの前後にスペースが入る独特の書式。

samba-tool(Samba4 統合管理)

サブコマンド用途
samba-tool userユーザ管理(単数形。users は誤り)
samba-tool domainドメイン管理(参加・プロビジョニング)
samba-tool dnsDNS 管理(dns-server/bind は誤り)

周辺ファイル

  • /etc/samba/lmhostsNetBIOS 名 ↔ IP の静的対応表(DNS 名用の /etc/hosts の NetBIOS 版)。
    • 「lm」は LAN Manager 由来。アクセス制御機能はない。
  • /etc/samba/smbusersusername map が参照する Windows 名 ↔ Linux 名の対応ファイル。

動作確認の流れ

設定変更後は「構文チェック → 反映 → 接続確認」の順で進める。

testparm                         # 構文チェック(Loaded services ... が出るか)
systemctl restart smbd nmbd      # 再起動(または smbcontrol all reload-config で無停止反映)
pdbedit -L                       # Samba ユーザが登録されているか
smbclient -L localhost -U alice  # 共有が見えるか
smbstatus                        # 接続中クライアントの確認

変更履歴

  • 2026-06-22: LPIC202 209「Sambaサーバの設定」の自習メモを整理。
  • 2026-06-22: 「Winbind」節に Winbind 連携構造の図(SID→UID/GID 変換と NSS/PAM 経由の取り込み)を追加。