今回はユーザーレベルセキュリティ(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秒にしました。
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