smbpasswd は Samba の暗号化パスワードファイルである。
このファイルは Samba システムの一部である。
smbpasswd は Samba の暗号化パスワードファイルである。 このファイルには、ユーザ名、UNIX ユーザ ID と ユーザの SMB ハッシュ化パスワード、さらにアカウントのフラグ情報と パスワードの最終変更時間が含まれている。 このファイルの形式は Samba とともに拡張されており、 以前のバージョンとはいくつか異なる形式になっている。
Samba 2.0 における smbpasswd ファイルの形式は、 一般的な UNIX の passwd (5) ファイルと非常によく似ている。 これは、各ユーザごとに 1 行が割り当てられている ASCII ファイルである。 各行のそれぞれのフィールド同士は、コロン ':' で区切られる。 エントリが '#' で始まっていると、その行は無視される。 smbpasswd ファイルには、各ユーザごとに以下の情報が含まれている:
ユーザの名前である。 これは、標準の UNIX passwd ファイルにも存在している名前で なければならない。
UNIX の ユーザ ID である。 この値は、標準の UNIX passwd ファイル内の同名のユーザが持つ ユーザ ID フィールドの値と一致しなければならない。 一致していないと、Samba は smbpasswd ファイルのエントリの 識別を拒否し、有効なユーザとして認めない。
これは、ユーザ・パスワードから生成した LANMAN 版のハッシュである。
32 桁の 16 進数でエンコードされている。
LANMAN ハッシュは、ユーザのパスワードをキーとして用い、
ある一定の文字列を DES で暗号化することで生成される。
これは、Windows 95/98 マシンで利用されるパスワードと同一である。
このパスワードハッシュは辞書攻撃に弱いと見なされており、
2 人のユーザが同じパスワードを持つ場合、このエントリも同一に
なってしまう (すなわち、パスワードが UNIX パスワードのように
"加工(salted)" されない)。
ユーザが null パスワードを持つ場合、このフィールドの先頭の
16 進数文字列の部分に "NO PASSWORD"
という文字が入る。
16 進数文字列が 32 個の 'X'
文字と等しい場合、
このユーザ・アカウントは無効であると見なされ、
ユーザは Samba サーバにログオンすることはできない。
警告!! SMB/CIFS 認証プロトコルはチャレンジ/レスポンス方式であるため、 パスワードハッシュさえ知っていれば、誰でもネットワーク上で ユーザになりすますことができる。 このため、これらハッシュは「暗号化されていないテキストに相当」し、 root ユーザ以外には絶対に漏らしてはならない。 これらのパスワードを保護するため、smbpasswd ファイルは root ユーザだけが読み取り/検索アクセスできるディレクトリに置き、 smbpasswd ファイル自身は root だけに読み書きアクセス権を与える べきである。
これは、ユーザパスワードから生成した Windows NT 版の ハッシュである。 32 桁の 16 進数でエンコードされている。 Windows NT ハッシュは、ユーザのパスワードを 16 ビット/ リトルエディアンの UNICODE で表現したものに対し、 MD4 ハッシュアルゴリズム (RFC1321 を参照) を 適用することで生成される。
このパスワードハッシュはパスワードの大文字/小文字を保持しており、 また、より高い品質のハッシュアルゴリズムを使用するため、 Lanman パスワードハッシュ に比べて より安全であると見なされる。 しかし、2 人のユーザが同じパスワードを持つとハッシュ値も同じに なるため(すなわち、UNIX パスワードのように "加工(salted)" されない)、それでもなお安全とは言えない。
警告!! SMB/CIFS 認証プロトコルはチャレンジ/レスポンス方式であるため、 パスワードハッシュさえ知っていれば、誰でもネットワーク上で ユーザになりすますことができる。 このため、これらハッシュは「暗号化されていないテキストに相当」し、 root ユーザ以外には絶対に漏らしてはならない。 これらのパスワードを保護するため、smbpasswd ファイルは root ユーザだけが読み取り/検索アクセスできるディレクトリに置き、 smbpasswd ファイル自身は root だけに読み書きアクセス権を与える べきである。
ここにはユーザ・アカウントの属性を表すフラグが含まれている。
Samba 2.0 では、このフィールドはブラケット ('['
と ']'
)
で括られており、長さは常に 13 文字になる ('['
と ']'
も含む)。
このフィールドの中には、以下のような文字が入る。
将来にコードが拡張されれば、そのほかのフラグが追加されるだろう。 このフィールドの残った部分は空白文字で埋められている。
このフィールドは、アカウントが更新された最終時間を保持する。
このフィールドには文字列 LCT-
("Last Change Time" を意味する) に
続けて、最後に更新が行われた UNIX 時間 (西暦 1970 年からの経過秒数) を
数字で表した文字列をつける。
コロンで区切られた他のフィールドは、現在ではすべて無視される。
以前のバージョンの Samba (特に 1.9.18 シリーズ) では、 このファイルにはアカウントフラグと 最終更新時間のフィールドが含まれていなかった。 Samba 2.0 のコードは古い形式のパスワードファイルの読み書きを行えるが、 古いエントリを修正して新たなフィールドを追加することはできない。 ただし、smbpasswd (8) により新規のエントリを 追加すると、追加されたアカウントには新しいフィールドが含まれる。 よって、古い形式の smbpasswd ファイルを Samba 2.0 で用いると、 新しいフィールドが含まれるアカウントと含まれないアカウントが混在 することになる。
古い形式の smbpasswd ファイルを新しい形式に変換するには、
convert_smbpasswd スクリプトを実行すること。
このスクリプトは Samba の bin/
ディレクトリにインストールされている
(smbd と nmbd バイナリが
インストールされるディレクトリと同じ場所)。
動作例を以下に示す。
cat old_smbpasswd_file | convert_smbpasswd > new_smbpasswd_file
convert_smbpasswd スクリプトは標準入力から読み込み、標準出力に書き込む。 間違ってファイルを上書きしてしまうことはない。
一度このスクリプトを実行したら、
新しい smbpasswd ファイルの中身を調べて
変換スクリプト(awk を利用している)によって損傷していないことを確認し、
<古い smbpasswd ファイル>
を<新しい smbpasswd ファイル>
に
置き換えること。
このマニュアルは、Samba システムのバージョン 2.0 に適用される。
smbpasswd (8), samba (7), RFC1321 (MD4 アルゴリズムの詳細)
オリジナルの Samba ソフトウェアと関連するユーティリティは、 Andrew Tridgell samba@samba.org によって作成された。 現在 Samba は、Samba Team によって、Linux カーネルの開発と同様に、 オープンソース・プロジェクトとして開発されている。
オリジナルの Samba マニュアルは、Karl Auer によって執筆された。 マニュアルのソースは Jeremy Allison samba@samba.org によって YODL 形式に変換され、Samba 2.0 リリース用に更新された。 (YODL はオープンソース・ソフトウェアの優れた作品である - ftp://ftp.icce.rug.nl/pub/unix/ から入手可能)
日本語訳