オレンジのトップページ

2015年5月28日木曜日

samba4 - ユーザの最終ログオン日時を取得する

ユーザアカウントのログオン日時がsamba4-ADの属性に記録されない。おかしいなーと思ってググると、本家samba-mlで Samba TeamのMatthieu Patou って人が

(May 8 2011)
not currently in Samba4:

* badPwdCount
* badPasswordTime
* lastLogon
* logonCount
* lastLogonTimestamp

って言っていた。それから4年経っているのに、結局対応できていないってことらしい。WindowsからADSIエディタを使って適当な値の日付を書き込みもできるけど、ユーザがログオンしても更新されない。加えて2008R2からはもうひとつ msDS-LastSuccessfulInteractiveLogonTime って属性も増えたらしいんけど、こちらには書き込みもできない。もちろんsamba4-ADの機能レベルは2008R2相当に上げてある。

ADSIエディタのキャプチャ。lastLogonTimestamp の値が(なし)になってる。


仕方ないので、OS側のwtmpxに書き出すことで代替してみる。サーバの何らかの共有資源アクセス時に発生する履歴になり、対話ログオン以外にPC自体が定期的に行うログオン認証も記録されるけれど、当該ユーザアカウントが使われているかどうかの確認には使える。

1.smb.conf に記述を追加
[global]
 utmp = Yes
 utmp directory = /var/log/sambalogon/

2.ファイルを作成
mkdir /var/log/sambalogon/
touch /var/log/sambalogon/utmpx (現在ログオン中のユーザ)
touch /var/log/sambalogon/wtmpx (ログオン履歴)

3.whoか、last -w -f でwtmpxを表示
lastはユーザ名が先頭8文字しか表示されないが -w をつけると全部出る。
utmpdumpコマンドもあるけどDebianには無いから。

実行
[root@ORANGESV sambalogon]# who wtmpx
ORANGE\shuichi smb/1278243650 2015-05-25 20:27 (192.168.xx.yyy)
ORANGE\shuichi smb/2794094097 2015-05-25 20:27 (192.168.xx.zz)
ORANGE\shuichi smb/3637964028 2015-05-25 20:28 (192.168.xx.zz)
ORANGE\TESTPC1$ smb/200977608 2015-05-25 20:35 (192.168.xx.zz)
ORANGE\shuichi smb/3949000150 2015-05-25 20:37 (192.168.xx.zz)
ORANGE\TESTPC1$ smb/1212155251 2015-05-26 20:24 (192.168.xx.zz)
ORANGE\TESTPC1$ smb/3336455472 2015-05-26 20:27 (192.168.xx.zz)

4.シェルスクリプトで整形
最終ログイン日付を使うようにソート。こんな感じ。
who wtmpx | awk '{print $3" "$4" "$5"\t"$1}'| sort -r -k 4 -k 1 | uniq -3 | sort -k 4

samba-ADが複数台あれば、それぞれのサーバのwtmpx を合計する。
wtmpxファイルのローティションと、ローティションしても過去のログオン履歴をおいかけられる
ようにすればOK。

IPアドレスも記録されているので、PC一覧のチェックにも使えて2度おいしい。

※ samba-4.2.1とsamba-4.2.2で確認