¿Puedo permitir que un usuario no root inicie sesión cuando / etc / nologin existe?

8

Supongamos que un usuario no root con privilegios de sudo ejecuta un apagado retrasado ( shutdown +10o lo que sea) y cierra la sesión. Luego, antes de que ocurra el apagado, quiere volver a iniciar sesión y cancelar el apagado. El problema es que shutdowncrea /etc/nologin, y loginsolo permite que root inicie sesión cuando ese archivo existe ... ¿es posible crear una excepción de esto para un usuario?

Si no, ¿cuál sería la mejor manera de permitir que un usuario inicie un apagado retrasado, luego inicie sesión y cancele en un momento posterior?

suszterpatt
fuente
Tal vez se podría usar shutdown nowcon el atplanificador como solución alternativa.
jw013

Respuestas:

14

Si su sistema usa PAM , /etc/nologinel pam_nologinmódulo activa la denegación de inicio de sesión cuando existe .

Puede omitir la pam_nologininvocación para usuarios que coincidan con ciertos criterios pam_succeed_if. Por ejemplo, si desea permitir que los usuarios del admgrupo inicien sesión en una consola de texto, incluso si /etc/nologinexiste, agregue la siguiente línea /etc/pam.d/loginjusto antes de la línea con auth requisite pam_nologin.so:

auth [default=ignore success=1] pam_succeed_if.so quiet user ingroup adm
Gilles 'SO- deja de ser malvado'
fuente
2

La respuesta de Gilles anterior es muy buena, pero tenga en cuenta que debe hacer coincidir el "tipo" con el tipo pam_nologin.so. Entonces, por ejemplo, en mi sistema RHEL5:

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

... si usara auth, como lo solicitó la otra respuesta, no funcionaría.

Ryan Novosielski
fuente
2

La versión de Vesa K de la respuesta de Ryan Novosielski funciona para mí, pero las líneas están en:

/etc/pam.d/sshd

no:

/etc/pam.d/login

En mi caso, solo quiero que UID 1000 en Ubuntu 14.04 LTS pueda iniciar sesión a través de 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
fuente
1

No estoy seguro de si es posible anular la /etc/nologincreación / uso sin trucos sucios. Pero para su propósito, puede usar una función como esta:

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

Al volver a iniciar sesión, eliminar el archivo /tmp/GOING-DOWNevitará el apagado.

editar : se agregó una forma simple de cancelar el apagado.

rozcietrzewiacz
fuente
0

Intenté la regla de Ryan hoy y descubrí que las respuestas de Gils y Ryan tienen reglas de éxito / predeterminadas "invertidas", nologin bloquea solo nx-group. Así es como implementé esta regla (nologin no bloquea el grupo nx).

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