出于合规性目的,需要获取有关 UNIX 计算机上的本地(用户和非用户)帐户创建日期的信息。
有没有什么方法(即使不是最可靠或最准确的方法)来收集此类信息?
例如,作为替代方案,我搜索home
目录创建日期(针对用户帐户),但我发现对于 POSIX 兼容系统,文件创建时间戳不可用。
答案1
帐户创建可能会被记录。在 Linux 下(如果使用通用影子实用程序套件),useradd
在该工具下创建一个日志条目auth.info
。该日志通常位于/var/log/secure
或/var/log/auth.log
(取决于分布)。
您可以检查您的备份/etc/passwd
并查看哪个是没有此帐户的最新备份。我使用并推荐等等管理员跟踪 的变化/etc
,这样git annotate /etc/passwd
会给我答案。 (实际上git annotate
会告诉我上次更改用户条目的时间;进一步挖掘其自动化超出此答案的范围会告诉我该条目是何时添加的。)
如果您缺乏审核日志、备份和修订历史记录,您将不得不求助于启发式方法。一个很好的线索是 inode 更改时间 (ctime) 最旧的文件。这种启发式方法可以是双向的:如果一个目录被移动到用户的主目录,它可能包含具有旧 ctime 的文件(但对于比用户更旧的文件,它们的 uid 不必是用户的 uid 作为更改) uid 涉及更新 ctime,因此您可以跳过那些不属于用户的文件);相反,某些事件可以更改文件的 ctime(例如,如果整个系统是从备份恢复的)。您可以从用户的主目录(ls -Alctr ~bob
| sed -n 2p)开始,其中可能包含/etc/skel
用户从未修改过的文件(.bash_logout
这是常见的),然后查看是否有扩展名为 .sed 的旧文件find ~bob ! -cnewer ~bob/.bash_logout -user bob
。使用 zsh,运行ls -ld ~bob/**/*(Doc[1]u:bob:)
.
答案2
如果已创建且未被触及自用户创建以来,您可以使用该.bash_logout
文件来确定日期。以 root 身份运行:
ls -l /home/<username>/.bash_logout
或者,如果用户有主目录,您可以检查该目录的上次修改日期:
ls -ld /home/username/
仅获取您可以使用的日期awk
:
ls -ld /home/username/ | awk '{ print $6,$7,$8 }'
答案3
对于本地用户,您可以查看他们的主目录出生记录它的系统和文件系统(Linux、大多数 BSD、至少 macOS)的时间。具体操作方法因系统而异。
对于 LDAP 目录中的用户,您可以查看其相应 LDAP 条目的createTimestamp
(或可能的)属性:whenCreated
ldapsearch -LLL -x -H ldaps://ldap.example.com -s sub \
-b dc=example,dc=com 'uid=username' createTimestamp whenCreated
答案4
这会检查密码更改日期。
chage -l fred