SSH 用户登录时如何防止关机?

Jos*_* R. 20 shutdown ssh pam ubuntu mandriva

我正在管理一个网络环境,昨天我遇到了一个有趣的情况。当普通用户要求主机关闭时,如果其他用户在本地登录,则主机拒绝这样做。但是,当其他用户通过 SSH 登录时,情况并非如此。如果一个用户在本地登录并且一个用户通过 SSH 登录,并且本地登录的用户尝试关闭它甚至没有警告就成功了,并且另一个用户的 SSH 连接突然终止。我的问题是,有没有办法像针对本地用户的政策那样防止这种情况发生?我已经查看了手册页,sshd_config但找不到任何似乎相关的内容。


编辑(附加信息。):

网络上有 4 个操作系统:Mandriva 2009、Mandriva 2010.2、Mandriva 2011 和 Ubuntu 11.04。我所指的具体情况是 SSH 用户位于 Mandriva 2009 主机上,本地用户位于 Mandriva 2011 主机上。

Mandriva 2009 主机使用 GNOME 2.28 环境,2010.2 主机使用 GNOME 2.32,2011 主机使用 KDE Plasma,Ubuntu 11.04 主机使用 Unity。


更新

正如我在这个问题中所指出的,我查看了下面的polkit操作/usr/share/polkit-1/actions/并发现(在文件中org.freedesktop.consolekit.policy)一个称为org.freedesktop.consolekit.system.stop-multiple-users抛出消息的操作

System policy prevents stopping the system when other users are logged in
Run Code Online (Sandbox Code Playgroud)

我在想(由于org.freedesktop.*命名约定)这是通过 D-BUS 发送到 DM 的某种信号。我想如果我能找出触发这个polkit动作的信号,我应该能够修改它的行为。有任何想法吗?


更新 2

我今天尝试了一个小实验,它给了我非常奇怪的结果。我尝试通过 SSH 登录到一个盒子,并确保没有其他用户登录到任何 VT。如果我Shutdown从 GDM 的“操作”菜单中选择,我会收到期待已久的策略消息,通知我没有身份验证是不可能的,因为其他用户已登录。但是,如果我使用 GDM 本地登录并选择要从 GNOME 的菜单中关闭该框,SSH 会话会像以前一样被破坏。这怎么可能?shutdown从 GDM发起请求时的行为与从gnome-session. 这是否告诉任何人可以帮助我解决问题的任何信息?

kmo*_*ort 3

netstat我会编写一个小程序,通过和/或 来检查任何活动的 SSH 连接ps。将其放在shutdown命令的位置。

如果没有其他人使用该机器,请shutdown在用户尝试使用时致电。如果有人正在使用该机器,只需警告发出该shutdown命令的用户即可。

.sshNetstat 会给你这样的输出,并且很容易在输出中查找。

netstat -a
Active Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        State
tcp        0     52  10.5.6.xx.ssh          10.6.6.yy.51400        ESTABLISHED
tcp        0      0  *.ssh                  *.*                    LISTEN
udp        0      0  *.syslog               *.*
Run Code Online (Sandbox Code Playgroud)

ps会给你这样的输出,但这有点困难,因为你必须确保不担心出站连接。Netstat也许是正确的方法。

  ps -e | grep ssh
      10084366 ?        00:00:07 /opt/sbin/sshd
        282647 ?        00:00:00 /opt/sbin/sshd
Run Code Online (Sandbox Code Playgroud)