[Asianux3] Samba 3.0 : security = user についてのあれこれ | Server OS Cafe

Server OS Cafe

Server OSの紹介等

今回はユーザーレベルセキュリティ(smb.confの[global]セクションでsecurity = userとした場合)の

Tipsをいくつかまとめてみました。


■ユーザーの登録

Sambaで使用するユーザーの登録はpdbeditコマンド で行います。


# pdbedit -a smbuser1

New SMB password:

Retype new SMB password:


パスワードの設定も同時に行われます。

上記の例で使用しているsmbuser1ユーザーはUnixユーザーとして登録されている必要があります。


smb.confのpassdb backendパラメータでSAMデータベースを指定していない場合は

/etc/samba/smbpasswdファイルにユーザーの情報が登録されます。


smbpasswdファイルの中身

smbuser1:512:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX: C663B7EA03E886E2A2A09D22EA61AA3A:[U ]:LCT-47385EAE


":"で区切られた各セクションの意味については以下のサイトを参照。(smbpasswd(5)のmanと同じ)

http://www.samba.gr.jp/project/translation/3.0/htmldocs/smbpasswd.5.html


[簡単にメモ]

左から以下を意味しています。


name ユーザーの名前

uid UnixのユーザーID


Lanmanパスワードハッシュ

ユーザーのパスワードから生成されたLanmanハッシュ

(Win9x系のパスワードと同じ)

NTパスワードハッシュ

ユーザーのパスワードから生成されたWindowsNTハッシュ

(NT系Windowsのパスワードと同じ)

AccountFlag

U - Userアカウント

N - アカウントがパスワードを持っていない

D - アカウントが無効

W - Workstation Trustアカウント

SambaのPDC機能でNT系WindowsをPDCによるドメインに参加させる為に使用

Last Change Time

アカウントの最終更新時間(1970年からの経過秒数)


この情報はpdbedit -L -wで参照できます。


■ユーザーの削除

# pdbedit -x smbuser1


■パスワードの変更

パスワードの変更にはsmbpasswdコマンド を使用します。


rootの場合

# smbpasswd smbuser1

New SMB password:

Retype new SMB password:


一般ユーザーの場合

# smbpasswd

New SMB password:

Retype new SMB password:


■UNIXユーザーのパスワードとの変更の同期

UnixユーザーとしてパスワードとSambaのパスワードは別に管理されてますが

(別々のパスワードを割り当てることが可能)

管理が煩雑になる場合は以下の方法で同期をとることができます。


1./etc/samba/smb.confの[global]セクションに以下のように設定します。


[global]

・・・・・・・

unix password sync = Yes
passwd program = /usr/bin/passwd %u
passwd chat = *New*password* %n\n *new*password* %n\n *updated*

passwd chat timeout = 10

・・・・・・・


[解説]

unix passwod:YesにするとSambaパスワードの変更時にUnixパスワードも変更されるようになります

passwd program : Unixパスワードの変更に使用するプログラムです。

自マシンのpasswdプログラムをフルパスで指定します。

%uにユーザー名が渡されます。


passwd chat :passwdのルールの定義。

ここが一番重要できちんと定義しないとエラーになります。

Asianuxではpasswdコマンド実行時に以下のように応答が返ってきましたので

New Unix password:

Retype new UNIX password:

passwd: all authentication tokens updated successfully.

"*New*password* %n\n *new*password* %n\n *updated*"と定義しています。

(*は任意の文字列、%nはパスワード入力、\nは改行を意味します)


passwd char timeout:Unixのパスワード変更を待機する時間(秒)

デフォルトは2秒ですが少し短いので10秒にしました。


  参照:@IT:Sambaユーザーのパスワード管理


2. Sambaを再起動してsmbpasswdを実行してSambaのパスワードを変更すると

Unixユーザーのパスワードも同時に同じ値に変更されます。


$ smbpasswd

Old SMB password:

New SMB password:

Retype new SMB password:

Password changed for user smbuser1


※ただしsmbpasswdは一般ユーザーで実行する必要があります

(rootだと同期が行われずSambaのパスワードのみが変更されます)


ちなみにpasswd chatの値が間違っている場合は以下の様なエラーメッセージが出ます。


$ smbpasswd

Old SMB password:

New SMB password:

Retype new SMB password:

machine 127.0.0.1 rejected the password change: Error was : RAP86 : The specified password is invalid.

Password changed for user smbuser1

この場合はUnixユーザーのパスワードは変更されてSambaのパスワードは変更されていない状態になります。

なお、この設定だけだとsmbpasswdでSambaのパスワードを変更した場合のみパスワードが同期されて

passwdでUnixユーザーのパスワードを変更した場合はパスワードの同期が行われません。

そこでさらにpam_smbpass.soというPAMモジュールを使用してUnixユーザーのパスワードを変更した場合にも

Sambaのパスワードとの同期が行われるようにします。


1. Asianuxではpam_smbpass.soはSambaインストール時に/lib/securityにインストールされています。


# rpm -ql samba-common-3.0.24-6AX | grep pam_smbpass.so

/lib/security/pam_smbpass.so


2. AsianuxではPAMの認証の設定は/etc/pam.d/system-authに記述されているので

system-authの以下の部分を変更します。


[変更前]

・・・・・・・

password requisite pam_cracklib.so try_first_pass retry=3

password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok

password required pam_deny.so

・・・・・・・


[変更後]

・・・・・・・

password requisite pam_cracklib.so try_first_pass retry=3

#password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok

password required pam_unix.so md5 shadow nullok try_first_pass use_authtok
password sufficient pam_smbpass.so use_authtok try_first_pass debug

password required pam_deny.so

・・・・・・・


3. この状態でpasswdでUnixユーザーのパスワードを変更するとSambaのパスワードも同時に変更されました。


# passwd smbuser1

New Unix password:

Retype new UNIX password:

passwd: all authentication tokens updated successfully.


■Windows側とSamba側のユーザーのマッピング

/etc/samba/smbusersを使用してWindowsのユーザーとSambaのユーザーをマッピングすることができます。


1. /etc/samba/smb.confの[global]セクションに以下の様に記述します。



[global]

・・・・・・・

username map = /etc/samba/smbusers
・・・・・・・



2. /etc/smaba/smbusersを開きます

デフォルトではWindowsのAdministratorをLinuxのrootとマッピングする設定と

WindowsのGuestをLinuxのnobodyとマッピングする設定が入っています。


# Unix_name = SMB_name1 SMB_name2...

root = administrator admin

nobody = guest pcguest smbguest


3. 他にもマッピングしたいユーザーがある場合はこの下に追記します。

ここではLinuxのsmbuser1とWindowsのsmbuser2をマッピングする設定を追加しています。


# Unix_name = SMB_name1 SMB_name2...

root = administrator admin

nobody = guest pcguest smbguest

smbuser1 = smbuser2