日本 Samba ユーザ会 (Samba Users Group Japan)
Samba 暗号化パスワード問題
Samba 暗号化パスワード問題
2002.04.15改定
解説
クライアントからサーバのファイル/プリンタを使用するために接続する時、ユーザ名とパスワードがクライアントからサーバへ送られますが、この送り方には以下の2つの方法があります。
- 平文パスワード(Plain Text Password)
TELNETやFTPと同じように、ネットワーク上にパスワードをそのまま流します。
ネットワーク上のパケットを盗聴することでパスワードを知ることが容易にできます。
- 暗号化パスワード(Encrypt Password)
ネットワーク上にパスワードを暗号化して流します。
(Windows 2000同士の認証ではKerberos(ケルベロス)認証が使われることがありますが、
SambaやWindows NT/9x/Meでの認証は公開キーによる暗号化ではなく、LANMAN(MD4)ハッシュが使用されます)
ネットワーク上のパケットを盗聴してもすぐにパスワードが判るわけではありませんが、LANMANハッシュは単純な暗号方法なので安易なパスワードを使用していると解析されてしまう可能性があります。
Windows 95/98/Me/NT/2000/XP は暗号化パスワードと平文パスワードの両方で認証が可能
ですが、しかし、Sambaのデフォルト設定である
encrypt passwords = noでは平文パスワードでしか認証できない
という事実があります。
初期のWindows (95やNT3.51など)は、(Samba)サーバが平文でしか認証できないと応答を返すと平文パスワードを送信しました。
このためUNIX側の/etc/passwd(shadow)を使って認証ができました。
これではパケットを盗聴されるとパスワードが漏洩するため、Windows NT4.0SP3 以降からデフォルトでは平文パスワードを送信せず、暗号化パスワードしか送信しないように修正されました。
これにより、Sambaの設定がencrypt passwords = noのままでは、WindowsNT4.0の場合、接続で
「そのアカウントは、このワークステーションからのログインを許可されていません」
というエラーになります。
よってデフォルトのSamba設定で接続できるクライアントは以下だけになります。
- 平文パスワード(Plain Text Password)を送信可能なクライアント
- パスワードセキュリティ強化の修正情報(*注1)を適用していない初期の
Windows 95 , Windows 95 OSR2 , Windows 95 OSR2.1
- WindowsNT 4.0 SP2 以前のもの
- WindowsNT 3.51以前
- Winodws3.1 の LANMANクライアント
*注1) http://www.microsoft.com/japan/win95/security/
にあるパッチはWin95で暗号化パスワードを使用できるようにするパッチではなく、デフォルトで平文パスワードを送信しないようにするパッチです。
(もともとWin95/NTは暗号化パスワードに対応しているのです)
つまり最近のWindowsクライアントは暗号化パスワードしか送信しないので、Sambaを使用できるようにするには、以下の2つうちいずれかの対処をする必要があります。
対処方法1. Samba
側で暗号化されたパスワードを扱うことができるようにする
Samba 側で
暗号化したパスワードを認証できるようにします。 この方法をとっても古いWindows
95/NT3.51などからSambaが使用できなくなることはありません。 平文パスワードが送信可能なWindows 95などでも、サーバ側から要求されない限り、平文パスワードを送信することはないからです。
どんなWindowsも最初の送信は、常に暗号化パスワード前提で行なわれます。
その際にサーバ側が平文パスワードを要求するフラグをセットしてレスポンスを返却すると、平文パスワード送信が可能なクライアントは、改めて平文でパスワードを送信します。 (Samba
1.9.17以前の場合は、以下の方法は適用されません)
- smb.conf を変更する
[global] セクションに以下の
行を追加して下さい。
- パスワードファイルを用意する
encrypt passwords
= yes とした場合、Samba側のユーザ認証は UNIX
の認証方法を用いず、 Windows認証が使用されます。その為、Samba専用のパスワードファイルを用意する必要があります。
コンパイル時に SMB_PASSWD_FILE
で指定したファイルを作成します。
(デフォルトは、/usr/local/samba/private/smbpasswd です。
RedHat系Turbo系Linuxの場合は /etc/smbpasswd で、
RedHat7.x以降は/etc/samba/smbpasswdです。)
UNIX のパスワードファイルから、Samba
用のパスワードファイルを作成するスクリプトが用意されています。
作成は root ユーザになって、Samba の source/script ディレクトリにある
mksmbpasswd.sh を使って行います。
# cat /etc/passwd | sh mksmbpasswd.sh > /usr/local/samba/private/smbpasswd |
これにより、smbpasswd
ファイルとして以下の様な内容のファイルが生成されます。
(*注:Samba 1.9.18と2.0では以下の形式が異なります)
foo:111:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:user foo:/home/foo:/bin/csh
bar:112:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:user bar:/home/bar:/bin/sh
|
- smbpasswd ファイルはrootユーザ以外からはアクセスできないようにする
# chown -R root /usr/local/samba/private
# chmod 500 /usr/local/samba/private
# chmod 600 /usr/local/samba/private/smbpasswd |
Linuxの場合は以下です。
# chmod 600 /etc/samba/smbpasswd
または
# chmod 600 /etc/smbpasswd |
- smppasswdファイルを作成したら、各ユーザのパスワードを設定
パスワードの設定を行うには、SMB_PASSWD
で指定したパスワード変更プログラムにより、各ユーザのパスワードを設定します。
(デフォルトは、/usr/local/samba/bin/smbpasswd です。Linuxでは、/usr/bin/smbpasswdです)
# smbpasswd ユーザ名
New SMB Password: <パスワードの入力>
Repeat New SMB Password: <パスワードの再入力> |
対処方法2. WindowsドメインにSambaサーバを参加させる
この方法は、Windows NT/2000 Serverによって構築されたWindowsドメインに認証してもらう方法です。
Samba 2.0以降でないと適用できないので注意下さい。
以下を参照下さい。
Samba 2.0
ドメイン・クライアント・サポート
この方法で認証はWindowsサーバにしてもらうことができますが、UNIX/Linuxアカウントは別途作成する必要があります。
これを解決するのが、Samba 2.2.3a以降でサポートされたWinbnind機能です。
Windowsサーバにユーザ・アカウントを作成するだけで、Sambaですぐ利用できるのはもちろんUNIX/Linuxもssh,telnet,ftpなどがすぐに利用可能になります。
以下の方法は古い方法なので使用することはお勧めしません
参考情報として掲載します。
参考>対処方法3. WindowsNTにユーザ認証をしてもらう
Sambaではユーザ認証をせずに、WindowsNT(サーバでもワークステーションでもOK)に認証してもらう方法です。
Sambaは、パスワードをWindowsにそのまま渡すだけなので、encrypt passwords = yesとする必要はありませんし、smbpasswdも作成する必要もありません。
(Windowsマシンに登録されておらず、Sambaマシンに登録されているUNIXユーザで認証するなら、encrypt
passwords = yesとして、smbpasswdを作成する必要があります)
smb.confの[global]セクションを以下のように変更します。
security = server
workgroup = DOM
password server = DOMPDC DOMBDC1 DOMBDC2
ここで、DOMはNTドメイン名、DOMPDCはNTのプライマリ・ドメイン・サーバ名、DOMBDC1
DOMBDC2はバックアップ・ドメインコントローラ名です。(NTワークステーションでも1台だけでもOK)
参考>対処方法4. Windows
側で平文パスワードを送信可能にする
望ましいやり方とはいえませんが、Windows
側で平文パスワードを送信可能にできます。
以下の方法によって、暗号化パスワードが送信されなくなるようなことはありません。 先に述べたようにサーバ側から要求されない限り、平文パスワードを送信することはありません。
最初の送信は、常に暗号化パスワード前提で行なわれます。
その際にサーバ側が平文パスワードを要求するフラグをセットしてレスポンスを返却すると、平文パスワード送信が可能なクライアントは、改めて平文でパスワードを送信します。 設定は以下のようにします。
- Windows 2000 / XPの場合
Samba ソースを展開してできる samba-xxxx/docs/Registry/Win2000_PlainPassword.reg
をエクスプローラから実行するかREGEDITで取り込みます。
- Windows Me の場合
Samba ソースを展開してできる samba-xxxx/docs/Registry/WinME_PlainPassword.regをエクスプローラから実行するかREGEDITで取り込みます。
- Windows 98 の場合
Samba ソースを展開してできる samba-xxxx/docs/Registry/Win98_PlainPassword.reg
をエクスプローラから実行するかREGEDITで取り込みます。
- Windows NT 4.0 の場合
Samba ソースを展開してできる samba-xxxx/docs/Registry/NT4_PlainPassword.reg
をエクスプローラから実行するかREGEDITで取り込みます。
- Windows 95 の場合
Samba ソースを展開してできる samba-xxxx/docs/Registry/Win95_PlainPassword.reg
をエクスプローラから実行するかREGEDITで取り込みます。
この場合、Samba と Windows
間で接続時にパスワードが暗号化されずにネットワーク上を流れます。
そして、この方法には加えて以下の問題があります。
- WindowsNTおよびWindows2000で Samba
のホームディレクトリをネットワークドライブに割り当て、「ログイン時に再接続」チェックを有効にしても、Windows
を再起動してネットワークドライブにアクセスしようとすると、エラーになったり、パスワードが違います、と言われてしまう。
- Samba
プリンタの使用で毎回パスワードの入力が必要になる。
- Samba
マシンがブラウジングできない(ネットワークコンピュータ一覧に表示されない)ことがある。
セキュリティの面や操作性などでいろいろな問題がでるのでこの方法はお勧めしません。
小田切 耕司 odagiri@samba.gr.jp
|