■Samba3ユーザ管理
$ pdbedit -L | grep "許可"
tdb(/var/lib/samba/passdb.tdb): tdb_open_ex: could not open file /var/lib/samba/passdb.tdb: 許可がありません
Could not open tdb: 許可がありません
$ sudo pdbedit -L | grep ":.*:"
labunix:1000:labunix
■smbpasswdで追加した場合
$ sudo smbpasswd -a labunix && sudo smbpasswd -e labunix
New SMB password:
Retype new SMB password:
$ sudo pdbedit -L -v -u labunix
Attempting to register passdb backend ldapsam
Successfully added passdb backend 'ldapsam'
Attempting to register passdb backend ldapsam_compat
Successfully added passdb backend 'ldapsam_compat'
Attempting to register passdb backend NDS_ldapsam
Successfully added passdb backend 'NDS_ldapsam'
Attempting to register passdb backend NDS_ldapsam_compat
Successfully added passdb backend 'NDS_ldapsam_compat'
Attempting to register passdb backend IPA_ldapsam
Successfully added passdb backend 'IPA_ldapsam'
Attempting to register passdb backend smbpasswd
Successfully added passdb backend 'smbpasswd'
Attempting to register passdb backend tdbsam
Successfully added passdb backend 'tdbsam'
Attempting to register passdb backend wbc_sam
Successfully added passdb backend 'wbc_sam'
Attempting to find a passdb backend to match tdbsam (tdbsam)
Found pdb backend tdbsam
pdb backend tdbsam has a valid init
tdbsam_open: successfully opened /var/lib/samba/passdb.tdb
Forcing Primary Group to 'Domain Users' for labunix
Unix username: labunix
NT username:
Account Flags: [U ]
User SID: S-1-5-21-3265833510-197033004-3638118188-1003
Primary Group SID: S-1-5-21-3265833510-197033004-3638118188-513
Full Name: labunix
Home Directory: \\lpic3\labunix
HomeDir Drive:
Logon Script:
Profile Path: \\lpic3\labunix\profile
Domain: LPIC3
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: never
Kickoff time: never
Password last set: 金, 03 5月 2013 13:00:27 JST
Password can change: 金, 03 5月 2013 13:00:27 JST
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
$ sudo smbpasswd -x labunix
■pdbeditで追加した場合
$ sudo pdbedit -a labunix
new password:
retype new password:
$ sudo pdbedit -L -v -u labunix
...
Unix username: labunix
NT username:
Account Flags: [U ]
User SID: S-1-5-21-3265833510-197033004-3638118188-1004
Primary Group SID: S-1-5-21-3265833510-197033004-3638118188-513
Full Name: labunix
Home Directory: \\lpic3\labunix
HomeDir Drive:
Logon Script:
Profile Path: \\lpic3\labunix\profile
Domain: LPIC3
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: never
Kickoff time: never
Password last set: 金, 03 5月 2013 13:04:14 JST
Password can change: 金, 03 5月 2013 13:04:14 JST
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
■削除すると、UIDが増分を割り当てられるので、以下のように指定する。
RHEL系のUIDと同じには出来ない。間違っても500を割り当てないように。
$ sudo pdbedit -x labunix
$ sudo pdbedit -a labunix -U S-1-5-21-3265833510-197033004-3638118188-1000
...
new password:
retype new password:
tdbsam_open: successfully opened /var/lib/samba/passdb.tdb
pdb_getsampwnam (TDB): error fetching database.
Key: USER_labunix
lookup_global_sam_rid: looking up RID 1005.
pdb_getsampwrid (TDB): error looking up RID 1005 by key RID_000003ed.
Forcing Primary Group to 'Domain Users' for labunix
Storing (new) account labunix with RID 1005
Forcing Primary Group to 'Domain Users' for labunix
Storing account labunix with RID 1005
Forcing Primary Group to 'Domain Users' for labunix
Storing account labunix with RID 1000
Forcing Primary Group to 'Domain Users' for labunix
Unix username: labunix
NT username:
Account Flags: [U ]
User SID: S-1-5-21-3265833510-197033004-3638118188-1000
Primary Group SID: S-1-5-21-3265833510-197033004-3638118188-513
Full Name: labunix
Home Directory: \\lpic3\labunix
HomeDir Drive:
Logon Script:
Profile Path: \\lpic3\labunix\profile
Domain: LPIC3
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: never
Kickoff time: never
Password last set: 金, 03 5月 2013 13:11:48 JST
Password can change: 金, 03 5月 2013 13:11:48 JST
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
■アカウントの無効、有効の切り替え
$ sudo smbpasswd -d labunix
$ sudo smbpasswd -e labunix
$ sudo pdbedit -c [D] -u labunix
$ sudo pdbedit -c -r [D] -u labunix
■pdbeditならロック、アンロックも可能
$ sudo pdbedit -c "[L]" -u labunix
$ sudo pdbedit -c -r "[L]" -u labunix
■他にもフラグがある。
$ man pdbedit | grep "・"
・ N: No password required
・ D: Account disabled
・ H: Home directory required
・ T: Temporary duplicate of other account
・ U: Regular user account
・ M: MNS logon user account
・ W: Workstation Trust Account
・ S: Server Trust Account
・ L: Automatic Locking
・ X: Password does not expire
・ I: Domain Trust Account
■パスワード同期の設定の確認
Windows認証はtdbで行う。
UNIXパスワード認証をPAM認証で連携する設定がされている。
idmapはNFS連携用である。
「/etc/samba/smbpasswd」ファイルは無い。
smbpasswdは互換性の為に残されている。
「pam password change = Yes」なので、「passwd progrm」のパラメータを無視して
PAMと連携したパスワード変更が可能。
$ testparm -s 2>&1 | grep "passw\|baackend"
pam password change = Yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
unix password sync = Yes
$ testparm -s -v 2>&1 | grep "passw\|backend"
encrypt passwords = Yes
null passwords = No
password server = *
smb passwd file = /etc/samba/smbpasswd
passdb backend = tdbsam
pam password change = Yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
passwd chat debug = No
passwd chat timeout = 2
check password script =
password level = 0
unix password sync = Yes
machine password timeout = 604800
ldap passwd sync = no
idmap backend = tdb
idmap config * : backend = tdb
■「ldap pssword sync = no」なのは、LDAP認証サーバの設定が空だから。
$ testparm -s -v 2>&1 | grep ldap
client ldap sasl wrapping = plain
ldap admin dn =
ldap delete dn = No
ldap group suffix =
ldap idmap suffix =
ldap machine suffix =
ldap passwd sync = no
ldap replication sleep = 1000
ldap suffix =
ldap ssl = start tls
ldap ssl ads = No
ldap deref = auto
ldap follow referral = Auto
ldap timeout = 15
ldap connection timeout = 2
ldap page size = 1024
ldap user suffix =
ldap debug level = 0
ldap debug threshold = 10
■WindowsのadministratorユーザはUNIXユーザのnobodyになる。
「!」によって以降の行は読み込まないので、
administrator以外のWindowsユーザはUNIXユーザのguestにマッピングされる。
ただし、UNIXユーザへのマッピングは、
Windowsからのアクセス時にWindowsユーザで認証に成功した場合に限る。
また、guestを許可しないのにguestにマッピングしようとすると
smbdの起動に失敗する。
$ cat /etc/samba/smbusers
!nobody = administrator
guest = *
$ echo | sudo tee /etc/samba/smbusers
■guestを禁止するには以下のように「map to guest = Never」とする。
$ testparm -s -v 2>&1 | grep "guest"
map to guest = Never
guest account = nobody
usershare allow guests = No
guest only = No
guest ok = No
■どうしてもpdbからsmbpasswd形式に変更したい場合
ユーザIDは変えないとダメですね。
$ sudo pdbedit -i tdbsam:/var/lib/samba/passdb.tdb -e smbpasswd:/etc/samba/smbpasswd
$ sudo cat /etc/samba/smbpasswd
labunix:0:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:A1A9521XXXA81A8417950EDF0E360892:[U ]:LCT-51833904:
$ sudo pdbedit -L -w -u labunix | grep ^labunix
labunix:1000:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:A1A9521XXXA81A8417950EDF0E360892:[U ]:LCT-51833904:
■smbpasswdのユーザIDを修正してpasswd.pdbを作成
逆も全く同じにはなりませんが、違いは「store test」や「transaction test」なので
問題なさそうです。
$ sudo pdbedit -i smbpasswd:/etc/samba/smbpasswd -e tdbsam:/tmp/passwd.tdb
$ sudo tdbdump /tmp/passwd.tdb
$ sudo tdbdump /tmp/passwd.tdb | wc -c
801
$ sudo tdbdump /var/lib/samba/passdb.tdb | wc -c
907
$ sudo rm /tmp/passwd.tdb
■pdbeditにファイル指定が無いようなので、tdbtoolで。
$ tdbtool
tdb> ?
database not open
tdbtool:
create dbname : create a database
open dbname : open an existing database
transaction_start : start a transaction
transaction_commit : commit a transaction
transaction_cancel : cancel a transaction
erase : erase the database
dump : dump the database as strings
keys : dump the database keys as strings
hexkeys : dump the database keys as hex values
info : print summary info about the database
insert key data : insert a record
move key file : move a record to a destination tdb
store key data : store a record (replace)
show key : show a record by key
delete key : delete a record by key
list : print the database hash table and freelist
free : print the database freelist
check : check the integrity of an opened database
repack : repack the database
speed : perform speed tests on the database
! command : execute system command
1 | first : print the first record
n | next : print the next record
q | quit : terminate
\n : repeat 'next' command
tdb> open /tmp/passwd.tdb
tdb_open_ex: could not open file /tmp/passwd.tdb: Permission denied
Could not open /tmp/passwd.tdb: Permission denied
tdb> quit
labunix@lpic3:~$ sudo tdbtool
tdb> open /tmp/passwd.tdb
tdb> check
Database integrity is OK and has 5 records.
tdb> quit
$ sudo tdbtool
tdb> open /var/lib/samba/passdb.tdb
tdb> check
Database integrity is OK and has 7 records.
tdb> quit
■tdbのバックアップとリストア
「.bak」を退避するなどしておけば良さそうです。
$ man tdbbackup | grep -A 2 "\-v\$"
-v
The -v will check the database for damages (currupt data) which if
detected causes the backup to be restored.
$ cd /var/lib/samba/; \
for list in *.tdb;do
sudo tdbbackup "$list";
sudo tdbbackup -v "$list";
done
■Windowsで言うローカルアカウントのGuestユーザとlabunixユーザ
pdbeditでほぼカバー出来るようですね。
> net user Guest
ユーザー名 Guest
フル ネーム
コメント コンピュータ/ドメインへのゲスト アクセス用
(ビルトイン アカウント)
ユーザーのコメント
国コード 000 (システム既定)
アカウント有効 Yes
アカウントの期限 無期限
最終パスワード変更日時 2013/05/03 18:49
パスワード有効期間 無期限
パスワード次回変更可能日時 2013/05/03 18:49
パスワードあり No
ユーザーによるパスワード変更可能 No
ログオン可能なワークステーション すべて
ログオン スクリプト
ユーザー プロファイル
ホーム ディレクトリ
最終ログオン日時 2012/08/13 3:22
ログオン可能時間 すべて
所属しているローカル グループ *Guests
所属しているグローバル グループ *なし
コマンドは正常に終了しました。
> net user labunix
ユーザー名 labunix
フル ネーム
コメント
ユーザーのコメント
国コード 000 (システム既定)
アカウント有効 Yes
アカウントの期限 無期限
最終パスワード変更日時 2012/01/19 17:47
パスワード有効期間 無期限
パスワード次回変更可能日時 2012/01/19 17:47
パスワードあり No
ユーザーによるパスワード変更可能 Yes
ログオン可能なワークステーション すべて
ログオン スクリプト
ユーザー プロファイル
ホーム ディレクトリ
最終ログオン日時 2013/05/03 17:00
ログオン可能時間 すべて
所属しているローカル グループ *Administrators
所属しているグローバル グループ *なし
コマンドは正常に終了しました。