共有定義を追記する場所を間違えると、それ以降に書いてある
[global] 用の設定が全部その共有の一部として解釈される。
エラーにはならない。静かに効かなくなるだけ。
$ testparm -s /etc/samba/smb.conf
Global parameter log file found in service section!
Global parameter map to guest found in service section!
Global parameter obey pam restrictions found in service section!
...(12件)
実効値を見ると、書いてあるのに効いていないことが確認できる。
$ testparm -s --parameter-name="log file" /etc/samba/smb.conf
← 空。書いてあるのに効いていない
Ubuntu が配る smb.conf は、[global] の下に
200行近い解説コメントが延々と続く構造をしている。
[global]
workgroup = WORKGROUP
...
#### Networking ####
↑ ここに共有定義を差し込んでしまった
# The specific set of interfaces...
log file = /var/log/samba/log.%m ← 以降ぜんぶ
server role = standalone server ← 共有セクションの
obey pam restrictions = yes ← 一部になる
[printers]
ファイルの途中に [home] と [ssd] を追記した結果、
[global] として効いていたのは最初の16行だけになっていた。
残りは全部、最後に追記した共有セクションの中身として扱われていた。
ついでに、同じ [home] が2箇所に完全に同一の内容で存在していた。
おそらく過去に追記した位置を忘れて、もう一度末尾に書いたのだと思う。
12行を個別に移動するより、共有定義のほうを末尾に動かすほうが安全で確実。
それだけで [global] が連続する。
[global]
(解説コメント込みで全部ここ)
[printers]
[print$]
[home] ← 重複していた片方を削除して
[ssd] ← 末尾に移動
差分としては共有定義のブロックが移動するだけで、内容は一切変わらない。
「無視されていた設定が効くようになる」ということは、 厳しい側に倒れていたものが、書いてある値に戻るということでもある。
| 設定 | 修正前(無視) | 修正後(書いてある値) |
|---|---|---|
map to guest | Never | Bad User |
usershare allow guests | No | Yes |
どちらも Ubuntu の既定値なので「間違い」ではないが、 たまたま厳しい側で動いていたものが緩む。うちでは現状維持を選び、 その2つだけ明示的に厳しい値を書いた。
obey pam restrictions が新たに有効になる。
PAM 側にアカウントの制限があると SMB ログインが通らなくなる可能性がある。
適用したら必ず実際に接続を試すこと。
修正スクリプトで、値の横に注釈を付けたら Samba が起動しなくなった。
map to guest = never # Ubuntu 既定は bad user
WARNING: Ignoring invalid value 'never # Ubuntu 既定は bad user'
for parameter 'map to guest'
Error loading services.
smb.conf は行末コメントを解釈しない。
# と ; は行頭でしかコメントにならず、
それ以外の位置では値の一部として読まれる。注釈は必ず独立した行に置く。
最初の適用は成功したのに、19秒後に元に戻っていた。ログを見たら理由がわかった。 スクリプトの最後に
戻す場合: sudo cp /etc/samba/smb.conf.bak-... /etc/samba/smb.conf
と出力していたので、それをそのまま実行してしまっていた。 成功メッセージの直後にコピペ可能な取り消しコマンドを置いてはいけない。 枠で囲って「今は実行しないこと」と書き、最後は「次にやること」で終わらせるようにした。