Posso permitir que um usuário não-root efetue login quando existe o / etc / nologin?

8

Suponha que um usuário não-root com privilégios sudo execute um desligamento atrasado ( shutdown +10 ou qualquer outro) e efetue logout. Então, antes que o desligamento ocorra, ele quer logar novamente e cancelar o desligamento. O problema é que shutdown cria /etc/nologin e login apenas permite que a raiz efetue login quando esse arquivo existe ... é possível criar uma exceção para um usuário?

Se não, qual seria a melhor maneira de permitir que um usuário inicie um desligamento atrasado, fazendo login e cancelando-o posteriormente?

    
por suszterpatt 02.08.2011 / 18:04

5 respostas

14

Se o seu sistema usa o PAM , a negação de login quando o /etc/nologin existe é acionado pelo pam_nologin module .

Você pode ignorar a invocação de pam_nologin para usuários que correspondem a determinados critérios com pam_succeed_if . Por exemplo, se você quiser permitir que usuários no grupo adm façam login em um console de texto, mesmo se /etc/nologin existir, adicione a seguinte linha a /etc/pam.d/login antes da linha com auth requisite pam_nologin.so :

auth [default=ignore success=1] pam_succeed_if.so quiet user ingroup adm
    
por 03.08.2011 / 00:21
2

A resposta de Gilles acima é muito boa, mas note que você deve combinar com o "tipo" com o tipo de pam_nologin.so. Por exemplo, no meu sistema RHEL5:

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

... se eu usasse auth, como a outra resposta solicitou, não funcionaria.

    
por 25.07.2014 / 22:32
1

Não tenho certeza se é possível substituir o /etc/nologin creation / usage sem truques sujos. Mas para o seu propósito, você pode usar uma função como esta:

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

Após o login, a exclusão do arquivo /tmp/GOING-DOWN impedirá o desligamento.

edit : adicionada uma forma simples de cancelar o encerramento.

    
por 02.08.2011 / 19:31
1

A versão de Vesa K da resposta de Ryan Novosielski funciona para mim, mas as linhas estão em:

/etc/pam.d/sshd

não:

/etc/pam.d/login

No meu caso, eu só quero que o UID 1000 no Ubuntu 14.04 LTS tenha permissão para fazer o login 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
    
por 09.11.2015 / 17:54
0

Eu tentei a regra de Ryan hoje e descobri que as respostas de Gils e Ryan têm regras de sucesso / default "invertidas", nologin bloqueia apenas nx-group. Foi assim que implementei essa regra (o grupo nx não é bloqueado pelo nologin).

account [success=1 default=ignore] pam_succeed_if.so quiet user ingroup nx
account required     pam_nologin.so
    
por 07.11.2015 / 12:12