当 /run/nologin 存在时,是否可以远程取消计划的关机?

Rav*_*ina 6 shutdown ssh

考虑这个场景:

  1. 用户ssh进入系统并做他/她想做的任何事情。
  2. 然后安排一个shutdown使用:

    sudo shutdown -h +1
    
    Run Code Online (Sandbox Code Playgroud)
  3. 最后关闭ssh会话

现在/run/nologin已经创建,没有人可以再登录了,但是出现了一些事情,我们想ssh在它崩溃之前回到系统。

当我们不再被允许登录时,是否可以远程取消预定的关机?

Rav*_*ina 11

除了使用“root”帐户建立新ssh连接外,我们实际上还可以使用 PAM 来允许特定用户或组登录。

PAM 配置sshd位于:/etc/pam.d/sshd它们负责您要查找的内容。

通过编辑此文件并使用pam_succeed_if.so我们可以允许特定用户或组即使/run/nologin存在于机器上也可以登录。

pam_succeed_if.so 旨在根据属于被验证用户的帐户的特征或其他 PAM 项目的值来成功或失败验证。一种用途是根据此测试选择是否加载其他模块。

因此,我们使用它来pam_nologin.so根据您的用户名或用户组检测是否应该加载模块。

使用您喜欢的文本编辑器打开文件:

$ sudo vi /etc/pam.d/sshd
Run Code Online (Sandbox Code Playgroud)

并找到这些行:

# Disallow non-root logins when /etc/nologin exists.
account    required     pam_nologin.so
Run Code Online (Sandbox Code Playgroud)

在它们之间添加这一行:

account  [default=1 success=ignore] pam_succeed_if.so quiet user notingroup sudo
Run Code Online (Sandbox Code Playgroud)

所以现在这些行应该是这样的:

# Disallow non-root logins when /etc/nologin exists.
account  [default=1 success=ignore] pam_succeed_if.so quiet user notingroup sudo
account  required     pam_nologin.so
Run Code Online (Sandbox Code Playgroud)

现在sudo组中的用户即使/run/nologin存在也可以登录。

并允许特定用户:

account [default=2 success=ignore] pam_succeed_if.so quiet user != username
Run Code Online (Sandbox Code Playgroud)

如需更灵活的条件结帐:

man pam_succeed_if
Run Code Online (Sandbox Code Playgroud)