你如何判断一个用户是否被允许在Linux上login?

问题很简单,我想列出所有可以login到我的系统的用户帐户,但我不确定/ etc / passwd中的所有用户是否是“可以login”的用户?

细节:

我可以在/etc/passwd看到其shell被设置为/usr/sbin/nologin/bin/false ,这是否意味着他们无法login?

我也知道,我可以将用户的encryption密码设置为*!/etc/shadow中禁用一个帐号,所以“禁用的用户”也应该当作“无法login”的用户吧?

这很大程度上取决于您的“login”的定义 – 从技术上讲, 存在/etc/passwd/etc/shadow中的任何用户都是“有效用户”,理论上可以在正确的环境下login。

您所谈论的方法分为以下几个大类:

  • 拥有“locking”帐户的用户
    用户的密码设置为* ! ,或者其他一些永远不会匹配的散列被“locking”(在太阳日,这个约定通常是*LK* ,“Locked”)。
    这些用户无法通过input密码来login ,但仍可以使用其他身份validation机制(例如,SSH密钥)进行login。

  • 具有“非交互式”shell的用户
    其帐户具有“非交互式shell”( /bin/false/sbin/nologin )的用户无法以交互方式login – 即无法在shell提示符下运行命令(这也会阻止SSH命令如果用户在系统上有SSH密钥,则执行)。
    这些用户可能仍然可以login来执行诸如读取/发送电子邮件(通过POP / IMAP&SMTP AUTH)。 为不需要使用shell(以及大多数“服务帐户”)的用户设置非交互式shell是通常的做法。

因此,根据“能够login”的标准,您可能需要检查其中一项或两项。

禁用用户和将shell设置为/ bin / false或类似之间是有区别的。

将shell设置为/ bin / false将阻止用户获取shell,但是如果本地用户用于其他用途(邮件validation,ftp等),则仍可以login到系统。 禁用用户使他无法使用使用本地用户的服务器的任何服务。

除了上述情况之外,即使使用多种不同的方法使用户的密码input正确,用户也可能被系统locking。

/etc/security/access.conf可以用来限制谁可以login。

有许多PAM模块可以configuration为限制特定用户,或根据需要修改login行为。 (即服务器上的主目录不允许login。)