System is booting up. See pam_nologin(8)

发布时间 2023-07-04 10:46:15作者: 腐汝

1、问题

System is booting up. See pam_nologin(8) ? 这是什么锤子问题?,快下班的时候隔壁老王找我说他登录不上线上机器了,我试了一下root用户可以,然后普通用户不行,然后我就让他先临时用root用一下,我先查查问题。

1)完整报错是这个样子的

[root@xxx~]# ssh xxx@10.10.1.1
System is booting up. See pam_nologin(8)
Authentication failed.

关于这个服务器基础的日志也都查了,没有什么异常之处。百度或谷歌的都是没关系的结果,我也没有随便试,线上机器谨慎操作。

2、查找问题

1) 摘抄自chatgpt的一个无用的答案,但是给我提供了一个思路。

pam_nologin(8)是一个用于Linux系统的PAM(Pluggable Authentication Modules)模块,它允许管理员在系统维护期间阻止用户登录。当系统启动时,PAM会检查是否存在/etc/nologin文件,如果该文件存在且不为空,则PAM将拒绝所有非特权用户的登录请求,并显示其中指定的消息。

通常情况下,/etc/nologin文件只有在系统重启期间才被创建,并在系统重启后自动删除。因此,如果你看到了类似"See pam_nologin(8)"的消息,但系统没有重启,那可能是由于某些原因导致/etc/nologin文件未能正确地删除。

你可以通过以下步骤解决这个问题:

以root身份登录到系统。
检查/etc/nologin文件是否存在:ls -l /etc/nologin
如果存在,请删除该文件:rm /etc/nologin
执行上述步骤后,再次尝试登录应该就不会出现"See pam_nologin(8)"的消息了。

2) 权限啥的我都没有动过,visudo文件也没有异常,然后我就全局找nologin文件,搞不好有什么隐藏的nologin。

[root@xxx run]# find / -name nologin -type f
/usr/sbin/nologin
/run/nologin

这个/run/nologin是哪个疙瘩来的,然后发现看了一下文件的内容。

[root@xxx run]# cat /run/nologin
System is booting up. See pam_nologin(8)[root@xxx run]# 

我靠,这不就是报错的输出。

3)删除这个 /run/nologin 这个文件是否有什么危害?不删我得普通用户都登录不了了,随即我就删了这个文件(为啥会想删除这个文件,因为上面的/etc/nologin也是可以删除的,并且考虑了删除可能会有的影响),然后测试普通用户可以登录了。

  1. 非特权用户能够登录:/run/nologin 文件的存在会阻止非特权用户登录系统。如果你删除了该文件,那么非特权用户将能够登录系统。
  2. 安全性降低:/run/nologin 文件的目的是在系统维护期间防止非特权用户登录,以确保系统安全。如果你删除了该文件,系统可能会更容易受到未经授权的访问。

3、现在就是考虑为啥会出现这个问题了

1) 我看这个文件的创建时间是在5月30号,然后我想到5月30日我干了一件事情,我改了 /usr/lib/tmpfiles.d/tmp.conf ,有个所谓的架构师在线上发布了一个应用,将pid放在了/tmp 下面,然后跟我说线上应用发布失败了,不成功。我一查发现pid进程文件的内容改了,pid对不上,最后查出来是因为/tmp 自动清了pid文件。然后我就想忽略掉这个配置文件。

2)但是改这个配置文件,还需要重启 systemd-tmpfiles-setup.service,结果发现这个服务不给重启,还得去修改/usr/lib/systemd/system/systemd-tmpfiles-setup.service 的RefuseManualStop=yes,一顿操作后就好了,/tmp下面排除的文件到现在都没有删除。直至昨晚都没有什么问题。

3)最后确定就是由 重启 systemd-tmpfiles-setup.service导致的。

 

总结:

在Systemd中,systemd-tmpfiles-setup.service是负责在系统引导过程中创建临时文件和目录的服务。而创建/run/nologin文件的目的是为了防止用户登录系统。

当系统处于维护模式或需要禁止用户登录时,管理员可以创建一个名为/run/nologin的文件。如果该文件存在,用户试图登录系统时将收到一个拒绝登录的消息,并且登录请求会被拒绝。

重启systemd-tmpfiles-setup.service服务可能会重新生成临时文件和目录,并且在这个过程中也会重新创建/run/nologin文件。这样做的目的是确保在系统引导期间始终存在这个阻止用户登录的标志文件。

请注意,对/run/nologin文件的具体使用可能因操作系统版本和配置而有所不同。

 

可以参考,别人遇到类似的问题,但是不多:

https://bbs.archlinux.org/viewtopic.php?id=155281

https://bugzilla.redhat.com/show_bug.cgi?id=1507501

 

最后说一句,生产环境谨慎操作,还在运维路上前行的老兵们继续加油。