Kann ich einem Nicht-Root-Benutzer erlauben, sich anzumelden, wenn / etc / nologin vorhanden ist?

8

Angenommen, ein Nicht-Root-Benutzer mit Sudo-Berechtigungen führt ein verzögertes Herunterfahren ( shutdown +10oder was auch immer) aus und meldet sich ab. Bevor das Herunterfahren erfolgt, möchte er sich erneut anmelden und das Herunterfahren abbrechen. Das Problem ist, dass root shutdownerstellt /etc/nologinund sich loginnur dann anmelden kann, wenn diese Datei vorhanden ist. Ist es möglich, für einen Benutzer eine Ausnahme davon zu erstellen?

Wenn nicht, wie kann ein Benutzer am besten ein verzögertes Herunterfahren einleiten, sich dann anmelden und zu einem späteren Zeitpunkt abbrechen?

suszterpatt
quelle
Man könnte vielleicht shutdown nowmit dem atScheduler als Workaround verwenden.
jw013

Antworten:

14

Wenn Ihr System PAM verwendet , wird die Anmeldeverweigerung, falls /etc/nologinvorhanden, vom pam_nologinModul ausgelöst .

Sie können den pam_nologinAufruf für Benutzer überspringen, die bestimmten Kriterien entsprechen pam_succeed_if. Wenn Sie beispielsweise Benutzern in der admGruppe erlauben möchten, sich an einer Textkonsole anzumelden, auch wenn diese /etc/nologinvorhanden ist, fügen Sie die folgende Zeile /etc/pam.d/loginunmittelbar vor der Zeile mit hinzu auth requisite pam_nologin.so:

auth [default=ignore success=1] pam_succeed_if.so quiet user ingroup adm
Gilles 'SO - hör auf böse zu sein'
quelle
2

Gilles 'Antwort oben ist sehr gut, aber beachten Sie, dass Sie den "Typ" mit dem Typ von pam_nologin.so abgleichen müssen. So zum Beispiel auf meinem RHEL5-System:

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

... wenn ich auth verwenden würde, wie die andere Antwort verlangt, würde es nicht funktionieren.

Ryan Novosielski
quelle
2

Vesa Ks Version von Ryan Novosielskis Antwort funktioniert für mich, aber die Zeilen sind in:

/etc/pam.d/sshd

nicht:

/etc/pam.d/login

In meinem Fall möchte ich nur, dass sich UID 1000 unter Ubuntu 14.04 LTS über SSH anmelden kann.

# 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
Tony Travis
quelle
1

Ich bin mir nicht sicher, ob es möglich ist, die /etc/nologinErstellung / Verwendung ohne schmutzige Tricks zu überschreiben . Für Ihren Zweck können Sie jedoch eine Funktion wie die folgende verwenden:

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

Wenn Sie die Datei erneut anmelden, /tmp/GOING-DOWNwird das Herunterfahren verhindert.

Bearbeiten : Es wurde eine einfache Möglichkeit hinzugefügt, das Herunterfahren abzubrechen.

rozcietrzewiacz
quelle
0

Ich habe heute Ryans Regel ausprobiert und herausgefunden, dass die Antworten von Gils und Ryan auf Erfolgs- / Standardregeln "umgekehrt" sind. Nologin blockiert nur die NX-Gruppe. So habe ich diese Regel implementiert (nx group wird nicht von nologin blockiert).

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