是否有非 root shell 命令可以告诉我某个用户的帐户是否被禁用?
请注意,LOCKING 和 DISABLED 之间有细微的区别:
- LOCKING 是将
!
或*
或添加!!
到 /etc/passwd 文件的密码字段中。在隐藏密码的 Linux 系统上,此标记标志可以放置在 /etc/shadow 而不是 /etc/passwd 中。密码锁定可以通过(password -l username
以 root 身份)在 shell 提示符下完成,以锁定用户名的帐户,使用该选项-u
将解锁它。 - 禁用帐户是通过将用户帐户的到期时间设置为过去的某个时间点来完成的。这可以通过 来完成
chage -E 0 username
,它将到期日期设置为 Unix 纪元后的 0 天。将其设置为 -1 将禁用到期日期的使用。
锁定的效果是防止登录过程使用提供的密码对保存的哈希进行正确的哈希运算(因为前置的标记字符不是哈希的有效输出字符,因此不可能使用任何可能的输入来生成与其匹配的哈希)。禁用的效果是防止任何进程使用帐户,因为帐户的到期日期已经过去。
就我的情况而言,使用锁定是不够的,因为用户可能仍然能够登录,例如使用 ssh 身份验证令牌,并且该用户下的进程仍然可以生成其他进程。因此,我们有启用或禁用的帐户,而不仅仅是锁定的帐户。我们已经知道如何禁用和启用帐户 - 它需要 root 访问权限和使用chage
,如上所示。
重复我的问题:是否有一个可以在没有 root 权限的情况下运行的 shell 命令,可以输出给定用户的此帐户到期信息的状态?
如果有帮助的话,这适用于 Red Hat Enterprise 5.4 系统。输出将返回到 Java 进程,然后该进程可以根据需要解析输出,或利用返回代码。
答案1
您可以将以下内容添加到/etc/sudoers
:
%admin ALL = NOPASSWD: /usr/bin/chage -l *
这将使admin
组中的任何人都能够运行这样的命令,而无需输入密码:
sudo chage -l username
如果您想通过 cron 作业或类似程序运行它,您需要将以下内容添加到/etc/sudoers
:
Defaults:%admin !requiretty
(不要/etc/sudoers
直接编辑;而是运行sudo visudo
)
答案2
不,没有。作为非特权用户,允许此类用户访问 /etc/shadow 也存在潜在的安全风险。我相信,对于所有现代 Linux 发行版,密码哈希和其他帐户信息已从 /etc/passwd 移至 /etc/shadow,以消除安全漏洞。如果您的系统使用影子密码,则密码哈希开头的“!”将仅在 /etc/shadow 中可见和存在,因此普通的非特权用户无法访问。
答案3
您可以使用文本编辑器读取 /etc/passwd 文件来查看谁的帐户被锁定。