Puis-je autoriser un utilisateur non root à se connecter lorsque / etc / nologin existe?

8

Supposons qu'un utilisateur non root avec les privilèges sudo exécute un arrêt différé ( shutdown +10ou autre) et se déconnecte. Puis, avant l'arrêt, il souhaite se reconnecter et annuler l'arrêt. Le problème est que cela shutdowncrée /etc/nologinet loginne permet à root de se connecter que lorsque ce fichier existe ... est-il possible de créer une exception à partir de cela pour un utilisateur?

Sinon, quelle serait la meilleure façon de laisser un utilisateur initier un arrêt différé, puis de se connecter et de l'annuler ultérieurement?

suszterpatt
la source
On pourrait peut-être utiliser shutdown nowle atplanificateur comme solution de contournement.
jw013

Réponses:

14

Si votre système utilise PAM , le refus de connexion lorsqu'il /etc/nologinexiste est déclenché par le pam_nologinmodule .

Vous pouvez ignorer l' pam_nologinappel pour les utilisateurs répondant à certains critères avec pam_succeed_if. Par exemple, si vous souhaitez autoriser les utilisateurs du admgroupe à se connecter sur une console de texte même si elle /etc/nologinexiste, ajoutez la ligne suivante /etc/pam.d/loginjuste avant la ligne avec auth requisite pam_nologin.so:

auth [default=ignore success=1] pam_succeed_if.so quiet user ingroup adm
Gilles 'SO- arrête d'être méchant'
la source
2

La réponse de Gilles ci-dessus est très bonne, mais notez que vous devez faire correspondre le "type" avec le type de pam_nologin.so. Ainsi, par exemple, sur mon système RHEL5:

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

... si j'utilisais l'auth, comme l'autre réponse le demandait, ça ne marcherait pas.

Ryan Novosielski
la source
2

La version de Vesa K de la réponse de Ryan Novosielski fonctionne pour moi, mais les lignes sont en:

/etc/pam.d/sshd

ne pas:

/etc/pam.d/login

Dans mon cas, je veux juste que l'UID 1000 sous Ubuntu 14.04 LTS soit autorisé à se connecter via 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
Tony Travis
la source
1

Je ne sais pas s'il est possible de remplacer la /etc/nologincréation / l'utilisation sans trucs sales. Mais pour votre objectif, vous pouvez utiliser une fonction comme celle-ci:

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

Lors de la reconnexion, la suppression du fichier /tmp/GOING-DOWNempêchera l'arrêt.

modifier : Ajout d'un moyen simple pour annuler l'arrêt.

rozcietrzewiacz
la source
0

J'ai essayé la règle de Ryan aujourd'hui et j'ai découvert que les réponses des robots de Gils et de Ryan ont des règles de réussite / par défaut "inversées", nologin bloque uniquement le groupe nx. C'est ainsi que j'ai implémenté cette règle (le groupe nx n'est pas bloqué par nologin).

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