
私はネットワーク環境を管理していますが、昨日は興味深い状況が発生しました。一般ユーザーがホストにシャットダウンを要求すると、他のユーザーがローカルにログインすると、ホストはシャットダウンを拒否します。ただし、他のユーザーが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.policy
)org.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
このような?
いくつかの読み取り変数を挿入して「まだ閉じますか?」そして、「閉じますか?」などのメッセージを表示できます。
その後、別名または同様のものとして使用できます。