SSHユーザーがログインしたときにシャットダウンを防ぐ方法


20

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


編集(追加情報):

ネットワークには、Mandriva 2009、Mandriva 2010.2、Mandriva 2011、Ubuntu 11.04の4つのOSがあります。私が言及している特定のケースでは、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にログインしていないことを確認しました。ShutdownGDMの「アクション」メニューから選択すると、他のユーザーがログインしているので認証なしではできないことを通知する待望のポリシーメッセージが表示されます。ただし、GDMを使用してローカルにログインして選択した場合GNOMEのメニューからボックスをシャットダウンするには、以前と同様にSSHセッションが上書きされます。これはどのように可能ですか?shutdownGDMからリクエストを開始するときと、a 内からリクエストを開始するときの動作は異なりgnome-sessionますか?それは私に問題を解決するのを助けることができる何かを誰かに伝えますか?


実行しているOSについてのヒントを提供できれば、おそらく役立つでしょう。
ジェニーD

ネットワークには、Mandriva 2009、Mandriva 2010.2、Mandriva 2011、Ubuntu 11.04の4つのOSがあります。これがOS固有のものだとは思いませんでした。私の質問を編集しています...
ジョセフR.

2
SSHよりもOSの方が重要だと思います。私が実行しているUnixで私が突き当たったものではありません。しかし、再び、私は通常、ルートとしてシャットダウンします。
ジェニーD

@JennyD:解決策は、ユーザーがUIからシャットダウンするのを防ぐことです。しかし、それは彼らにとってかなり面倒だと思います。
ジョセフR.

2
SSHの問題ではなく、PAMの構成(シャットダウンされるホスト上)の問題の可能性があります。PAMがシャットダウンしてログインしているユーザーを判別し、システムをシャットダウンしようとしているユーザーに同じ警告を提供する方法を検討しましたか?
ロブ・ギブソン

回答:


3

netstatやを介してアクティブなSSH接続をチェックする小さなプログラムを作成しますpsshutdownコマンドの代わりにドロップします。

他に誰もマシンを使用していない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

本当にいいですね。より堅牢な方法はsession、ユーザーがSSH経由でログインするときにファイルに触れ、ユーザーがログアウトするときにファイルを削除し、提案されたプログラムが存在するかどうかを確認するプログラムでSSH PAM チェーンを強化することですこれらのファイル。これが機能する場合、私はあなたの答えを受け入れています。
ジョセフR.

1
それはうまくいくはずです。1つの考え:ログアウトせずに切断するとどうなりますか?SSHセッションが終了しただけの場合、ファイルは変更されますか?あなたがそれを確認したいでしょう
kmort

うーん。それは...確かに思考のための食品である
ジョセフ・R.

1
おそらく、who代わりにの出力を解析することで、アプローチを簡素化できます。どのユーザーが接続されており、どのホストから接続されているかを示します。
ジョセフR.

1
可能性が非常に高い。私が最も使用するシェルでwhoは、あまり出力しませんが、他のほとんどのシェルは出力します。(Silly組み込みシステム...)いずれにせよ、使用したい場合、netstat必要な列を取得するのは非常に簡単ですawknetstat -a | awk '{print $4}'(少なくとも私のシェルでは)の線に沿って何か
-kmort

2

あなたは実際に正しい情報を見つけました。少なくとも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以降、このポリシーは完全に無視されます。これまでのところ、何がそれを置き換えるのかを教えてくれませんでした(もしあれば)。

また、再起動用のエントリ(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


0

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

このようなもの?

「とにかくシャットダウンしますか?」などのプロンプトが表示されるように、おそらく読み取り変数を挿入します。「シャットダウンしますか?」

次に、エイリアスまたは類似物として使用できます。


これにより、着信接続のみがチェックされます。言及するだけです。
ジャマダーニ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.