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-bugs@samba.org によって作成された。
現在 Samba は、Samba Team によって、Linux カーネルの開発と同様に、
オープンソース・プロジェクトとして開発されている。
オリジナルの Samba マニュアルは、Karl Auer によって執筆された。
マニュアルのソースは Jeremy Allison samba-bugs@samba.org
によって YODL 形式に変換され、Samba 2.0 リリース用に更新された。
(YODL はオープンソース・ソフトウェアの優れた作品である -
ftp://ftp.icce.rug.nl/pub/unix/
から入手可能)
日本語訳