Sudo特権を持つ非rootユーザーが遅延シャットダウン(shutdown +10
など)を実行してログアウトするとします。次に、シャットダウンが発生する前に、再度ログインしてシャットダウンをキャンセルしたいと考えています。問題は、shutdown
は/etc/nologin
を作成し、login
はrootがそのファイルが存在する場合にのみログインを許可するということです...これに対してユーザーに対して例外を作成することは可能ですか?
そうでない場合、ユーザーが遅延シャットダウンを開始し、ログインして後でキャンセルできるようにするための最良の方法は何でしょうか。
システムが [〜#〜] pam [〜#〜] を使用している場合、/etc/nologin
が存在する場合のログイン拒否は、 pam_nologin
モジュール によってトリガーされます。
pam_nologin
で特定の条件に一致するユーザーのpam_succeed_if
呼び出しをスキップできます。たとえば、/etc/nologin
が存在する場合でも、adm
グループのユーザーがテキストコンソールにログインできるようにする場合は、/etc/pam.d/login
の行の直前のauth requisite pam_nologin.so
に次の行を追加します。
auth [default=ignore success=1] pam_succeed_if.so quiet user ingroup adm
上記のGillesの回答は非常に優れていますが、「タイプ」をpam_nologin.soのタイプと一致させる必要があることに注意してください。たとえば、私のRHEL5システムでは次のようになります。
account [default=1 success=ignore] pam_succeed_if.so quiet user ingroup nx
account required pam_nologin.so
...他の回答が要求したように、authを使用した場合、それは機能しません。
VesaKのRyanNovosielskiの答えのバージョンは私には有効ですが、次のようになります。
/etc/pam.d/sshd
ない:
/etc/pam.d/login
私の場合、Ubuntu 14.04 LTSの下でUID 1000にSSH経由でのログインを許可するだけです。
# Disallow non-root logins when /etc/nologin exists.
account [success=1 default=ignore] pam_succeed_if.so quiet uid eq 1000
account required pam_nologin.so
汚いトリックなしで/etc/nologin
の作成/使用をオーバーライドできるかどうかはわかりません。ただし、目的に応じて、次のような関数を使用できます。
off () {
touch /tmp/GOING-DOWN
Sudo sh -c "sleep ${1-1} && [ -f /tmp/GOING-DOWN ] && /sbin/poweroff"
}
再ログイン時に、ファイル/tmp/GOING-DOWN
を削除すると、シャットダウンが防止されます。
編集:シャットダウンをキャンセルする簡単な方法を追加しました。
今日ライアンのルールを試したところ、ギルスとライアンの回答ボットには成功/デフォルトのルールが「逆」になっていて、nologinはnx-groupのみをブロックしていることがわかりました。これが私がこのルールを実装した方法です(nxグループはnologinによってブロックされません)。
account [success=1 default=ignore] pam_succeed_if.so quiet user ingroup nx
account required pam_nologin.so