web-dev-qa-db-ja.com

/ etc / nologinが存在する場合、root以外のユーザーにログインを許可できますか?

Sudo特権を持つ非rootユーザーが遅延シャットダウン(shutdown +10など)を実行してログアウトするとします。次に、シャットダウンが発生する前に、再度ログインしてシャットダウンをキャンセルしたいと考えています。問題は、shutdown/etc/nologinを作成し、loginはrootがそのファイルが存在する場合にのみログインを許可するということです...これに対してユーザーに対して例外を作成することは可能ですか?

そうでない場合、ユーザーが遅延シャットダウンを開始し、ログインして後でキャンセルできるようにするための最良の方法は何でしょうか。

8
suszterpatt

システムが [〜#〜] 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を使用した場合、それは機能しません。

2

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
2
Tony Travis

汚いトリックなしで/etc/nologinの作成/使用をオーバーライドできるかどうかはわかりません。ただし、目的に応じて、次のような関数を使用できます。

off () { 
   touch /tmp/GOING-DOWN
   Sudo sh -c "sleep ${1-1} && [ -f /tmp/GOING-DOWN ] && /sbin/poweroff"
}

再ログイン時に、ファイル/tmp/GOING-DOWNを削除すると、シャットダウンが防止されます。

編集:シャットダウンをキャンセルする簡単な方法を追加しました。

1
rozcietrzewiacz

今日ライアンのルールを試したところ、ギルスとライアンの回答ボットには成功/デフォルトのルールが「逆」になっていて、nologinはnx-groupのみをブロックしていることがわかりました。これが私がこのルールを実装した方法です(nxグループはnologinによってブロックされません)。

account [success=1 default=ignore] pam_succeed_if.so quiet user ingroup nx
account required     pam_nologin.so
0
Vesa K