はじめに
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 |
nmbd | NetBIOS 名前解決・ブラウジング(一覧表示)・WINS | Naming → nmbd |
winbindd | Windows ドメインのユーザ/グループを Linux 側で利用可能にする | Windows 情報 → winbindd |
- 「ファイル・プリンタ共有・認証を担う基本デーモン」=
smbd。 - 「ブラウジング+ WINS(NetBIOS 名解決)を担う」=
nmbd(NetBIOS Name Daemon)。 - 「NSS / PAM 経由で Windows ユーザ情報を Linux に取り込む」=
winbindd。- 向きは Windows → Linux(「Samba ユーザを Windows 側で使う」という逆向きの説明は罠)。
★ 別レイヤーの話: Samba4 を AD ドメインコントローラ(AD DC) として動かすときは、上記 3 デーモンを個別起動するのではなく統合デーモン
samba(systemctl 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 |
%v | Samba のバージョン文字列 | 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 と取り違え注意 |
realm | AD ドメインの 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 sync | Linux と Samba のパスワードを同期するか | linux password sync は造語 |
username map | Windows 名 → Linux 名の 対応ファイルのパス | 値はファイルパス |
log file / log level / max log size | ログのパス/詳細度(数値)/最大サイズ(KB) | 「ログ三兄弟」。スペース区切り |
wins support | 自分が WINS サーバになる(yes) | wins server と同時設定不可 |
wins server | 参照する外部 WINS サーバの IP | support↔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 mode | force create mode |
| ディレクトリ | directory mask / directory mode | force 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 の評価優先度は以下。
hosts allowに一致 → 許可(deny より先に評価される)hosts denyに一致 → 拒否- どちらにも不一致 →
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 等) |
domain | NT ドメインの DC に認証を委任 | password server(委任先) |
ads | Active Directory(Kerberos)に参加 | realm+workgroup |
- 「ユーザ名・パスワードで自己完結」=
security = user。 - 「(NT)ドメインコントローラに任せる」=
security = domain。 - 自サーバ以外の認証サーバに委任する宛先は
password server = <IP>。
passdb backend(パスワードの保管方式)
| 値 | 内容 |
|---|---|
smbpasswd | テキストファイル /etc/samba/smbpasswd(旧式)。場所は smb passwd file(passwd で password ではない)で指定 |
tdbsam | TDB 形式のバイナリ DB(現在の標準・既定) |
ldapsam | LDAP サーバをバックエンドに使う |
security(認証の「方式」)と passdb backend(ユーザ情報の「格納庫」)は別軸。
Samba は /etc/passwd・/etc/shadow だけでは認証できない(これらは Linux の管轄で Samba 認証には使えない)。
Linux ユーザを useradd した上で smbpasswd -a か pdbedit -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 -L | Sambaユーザ一覧表示(一覧はこれが唯一) |
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 の造語誤答に注意(smbtestparm・checkparm は存在しない)。
testparm は独立コマンドであり、samba-tool testparm のようなサブコマンドではない(構文チェックは testparm 一択)。
smbcontrol(稼働中デーモンへのメッセージ送信)
書式は smbcontrol <対象> <メッセージタイプ> [引数]。
- 対象に指定できるのは デーモン名(
smbd/nmbd/winbindd)・PID・allの 3 種。sambaやanyは対象にできない。 - 特定の共有を担うのは
smbdなので、個別クライアント切断・共有クローズは smbd へ送る。
| メッセージタイプ | 動作 |
|---|---|
reload-config | smb.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 = yes+preferred master = yes+os 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 join(net joinやsamba-tool domain joinではない。後者は AD DC 側の操作)。 - 最頻出の罠は
workgroup(NetBIOS 名・短い)とrealm(FQDN・長い)の取り違え。「グループ名は短く、王国(realm)は完全名」と覚える。
Winbind(Windows ユーザを Linux で使う)
winbindd が NSS / PAM と連携し、Windows の SID を Linux の UID/GID にマッピングする(Idmap 機構)。
/etc/nsswitch.conf の passwd/group に winbind を追加して有効化する。
[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 dns | DNS 管理(dns-server/bind は誤り) |
周辺ファイル
/etc/samba/lmhosts… NetBIOS 名 ↔ IP の静的対応表(DNS 名用の/etc/hostsの NetBIOS 版)。- 「lm」は LAN Manager 由来。アクセス制御機能はない。
/etc/samba/smbusers…username 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 経由の取り込み)を追加。