SSHユーザーがログインしたときに終了するのを防ぐ方法は?

SSHユーザーがログインしたときに終了するのを防ぐ方法は?

私はネットワーク環境を管理していますが、昨日は興味深い状況が発生しました。一般ユーザーがホストにシャットダウンを要求すると、他のユーザーがローカルにログインすると、ホストはシャットダウンを拒否します。ただし、他のユーザーがSSHを介してログインしている場合はそうではありません。あるユーザーがローカルにログインし、別のユーザーがSSHを介してログインした場合、ローカルにログインしたユーザーがシャットダウンしようとすると警告なしに成功し、別のユーザーのSSH接続が突然終了します。私の質問は、ローカルユーザーのためのポリシーのようにこれを防ぐ方法はありますか?マニュアルページを見ましたが、sshd_config関連性があると思われるものが見つかりませんでした。


編集(追加情報):

ネットワークには、Mandriva 2009、Mandriva 2010.2、Mandriva 2011、およびUbuntu 11.04の4つのオペレーティングシステムがあります。私が言及する具体的な例は、Mandriva 2009ホストのSSHユーザーと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.policyorg.freedesktop.consolekit.system.stop-multiple-usersメッセージを投げるというタスクを見つけました。

System policy prevents stopping the system when other users are logged in

私は(命名規則のためにorg.freedesktop.*)これがD-BUSを介してDMに送信される信号の一種だと思います。これを引き起こす信号を把握できれば、polkitその行動を修正できるはずだと思います。どんなアイデアがありますか?


アップデート2

今日は少し実験してみましたが、とても奇妙な結果が出ました。 SSH経由で1台のコンピュータにログインし、他のユーザーがVTにログインしていないことを確認しました。 GDMの[アクション]メニューから選択すると、Shutdown他のユーザーがログインしている間に認証なしでこれを実行できないことを長く待っていたポリシーメッセージが表示されます。しかし、、GDMを使用してローカルにログインし、GNOMEメニューでボックスを閉じると、SSHセッションは以前と同じように削除されます。どうやってこれができますか?私の要求はGDMで生成されたときと内部で生成されたときにshutdown異なる動作をしますかgnome-session?これは問題の解決に役立つ人に伝えられますか?

答え1

実際に正しい情報を見つけました。少なくともUbuntu 13.04では動作します。

次のポリシーエントリは、次のように設定された「auth_admin_keep」を使用するときにシャットダウンが発生するのを防ぎます。

<action id="org.freedesktop.consolekit.system.stop-multiple-users">
  <description>Stop the system when multiple users are logged in</description>
  <message>System policy prevents stopping the system when other users are logged in</message>
  <defaults>
    <allow_inactive>no</allow_inactive>
    <allow_active>auth_admin_keep</allow_active>
  </defaults>
</action>

ところが、とにかく13.10からこの政策は完全に無視された。今まで誰もそれを置き換えることができるものが何であるかを教えられませんでした。

また、restart()にはこのような項目があり、org.freedesktop.consolekit.system.restart-multiple-usersこの項目もに設定する必要がありますauth_admin_keep

AskUbuntuの次の質問/回答も参照してください。https://askubuntu.com/questions/1190/how-can-i-make-shutdown-not-require-admin-password

答え2

netstatおよび/またはを介してアクティブなSSH接続を確認する小さなプログラムを作成しますps。命令がある場所に入れてくださいshutdown

他の人がマシンを使用していない場合は、shutdownユーザーがマシンを使用しようとしたときに電話してください。他の人がコンピュータを使用している場合は、コマンドを発行したユーザーに警告してくださいshutdown

Netstatはこのような出力を提供し、.ssh出力で簡単に見つけることができます。

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               *.*

psこのような出力を提供しますが、アウトバウンド接続について心配しないでくださいので、少し難しいです。Netstatおそらくそれは正しいアプローチです。

  ps -e | grep ssh
      10084366 ?        00:00:07 /opt/sbin/sshd
        282647 ?        00:00:00 /opt/sbin/sshd

答え3

SSH接続数をカウントし、接続数が多い場合は閉じます。

SSH_CONS=$(ps x | grep 'sshd:' | grep -v 'grep' | wc -l)

if [ "$SSH_CONS" -gt 1 ]
then
    echo "More than 1 SSH connection..."
else
    echo "Shutting down..."
    # halt
fi

このような?

いくつかの読み取り変数を挿入して「まだ閉じますか?」そして、「閉じますか?」などのメッセージを表示できます。

その後、別名または同様のものとして使用できます。

関連情報