passwd ファイルにコメント行や空行は許されるか

Solaris 7 で,NIS の passwd ファイルに「#」でコメント行をつけてからマップを make しようとしたらエラーが出た (ちなみに最終行の場合はエラー出なかった.謎).あれ,コメント行ってダメなんだっけ?



調べてみたところ,/etc/passwd に関してはコメント行 OK だという OS とダメという OS がある.NIS の passwd についての記述は見当たらなかったけど,/etc/passwd に準ずると考えていいのかな?

さらに,コメント行がダメな場合,空行もダメらしい! 不正な行と見なされるんだそうだ.なぬー,知らんかった(ぉ



結局真相はよくわからないのだが,空行,コメント行は入れないに越したことはないのかも.



以下,コメント行,空行 OK だお派.FreeBSD passwd(5).


Lines whose first non-whitespace character is a pound-sign (#) are comments, and are ignored. Blank lines which consist only of spaces, tabs or newlines are also ignored.

最初の空白文字でない文字がポンド記号 (#) であるような行は注釈であり、無視されます。スペース、タブ、改行だけからなる空行もまた無視されます。
ちなみに FreeBSD 4.4 で getpwent(3) すると

/etc/passwd A Version 7 format password file
となる.が,Version 7 UNIX の passwd(5) には特に空行やコメント行の記述はない.

コメント行,空行ダメだお派.Sun Solaris 9 の passwd(4) には

Blank lines are treated as malformed entries in the passwd file and cause consumers of the file , such as getpwnam(3C), to fail.
とある.ただし,Solaris 8 以前の man には一切そのような記述はなかった.

また,SCO UnixWare 7 の場合,passwd(4) には以下のように書いてある.

Comment lines (lines preceded by the # (hash) character) are not allowed in the /etc/passwd file.
以下のメーリングリストアーカイブでは,

Blank lines are a definite no-no.
とある.また,コメント書きたいなら GCOS 欄があるじゃんってことらしい.

以下のサイトでは,不正アクセスに対するチェック事項の一つとして,/etc/passwd の空行を調べるようにとある.

/etc/passwd ファイルが変更されていないかを調べます。 知らないユーザまたは空行が加えられていないか。
ただし,このチェックリストのオリジナル版と思われる以下の文書には,空行云々は書いてないので,日本語版の空行云々の根拠は不明.

Examine the /etc/passwd file on the system and check for modifications to that file. In particular, look for the unauthorized creation of new accounts, accounts with no passwords, or UID changes (especially UID 0) to existing accounts.
Linux では,passwd をコメントアウトした時の謎の挙動が報告されている.

しかし、今回、私がこの作業を行ってわかった単純なミスがあったので紹介したいと思います。
これが直接の原因でLDAPを使って認証できなかったのではないかもしれないのですが・・・

/etc/passwd が '#' でコメントアウトできないということ。

私が勝手に勘違いしていたのですが
http://www.linux.or.jp/JM/html/shadow/man5/passwd.5.html
とか見ても/etc/passwd は'#' でコメントアウトできると書いてありません。

私は、LDAPだけの認証でログインしようとするとき、
/etc/passwd にあるユーザを'#' でコメントアウトしてからログインしていたのですが
それでは今までログインできませんでした。
そこで思い切って/etc/passwd ごと消してしまったら見事にログインできました。

なのですが、1回ログインできるようになってから同じように
/etc/passwd にあるユーザを'#' でコメントアウトしてログインしてもちゃんとログインできてしまいました。
なのでこれが原因であるかは謎です・・・
Mandriva Linux のドキュメントにはこうある.

vi /etc/passwd

Have a look at this file. It mustn't contain any blank lines, comments or non-ASCII characters. If you find them, delete them.
さらに調べて行くと,決定的な文書を発見.

Blank lines in password file could cause system operation problems
適用されるプラットフォームは Various: Unix Any version だそうだ.一応 "Low Risk" らしいが….



うーむ.悩ましいな.