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

8

Suponha que um usuário não root com privilégios sudo execute um desligamento atrasado ( shutdown +10ou o que seja) e efetue logout. Então, antes que o desligamento ocorra, ele deseja efetuar login novamente e cancelar o desligamento. O problema é que ele shutdowncria /etc/nologine loginapenas permite que o root efetue login quando esse arquivo existe ... é possível criar uma exceção para um usuário?

Caso contrário, qual seria a melhor maneira de permitir que um usuário inicie um desligamento atrasado e depois faça login e cancele-o posteriormente?

suszterpatt
fonte
Talvez se possa usar shutdown nowo atagendador como solução alternativa.
Jw013

Respostas:

14

Se o seu sistema usa o PAM , a negação de login quando /etc/nologinexiste é acionada pelo pam_nologinmódulo .

Você pode ignorar a pam_nologinchamada para usuários que correspondem a determinados critérios com pam_succeed_if. Por exemplo, se você deseja permitir que os usuários do admgrupo efetuem login em um console de texto, mesmo que /etc/nologinexista, adicione a seguinte linha /etc/pam.d/loginantes da linha com auth requisite pam_nologin.so:

auth [default=ignore success=1] pam_succeed_if.so quiet user ingroup adm
Gilles 'SO- parar de ser mau'
fonte
2

A resposta de Gilles acima é muito boa, mas observe que você deve combinar 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.

Ryan Novosielski
fonte
2

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 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
Tony Travis
fonte
1

Não tenho certeza se é possível substituir a /etc/nologincriação / uso 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 novamente, a exclusão do arquivo /tmp/GOING-DOWNimpedirá o desligamento.

editar : adicionada uma maneira simples de cancelar o desligamento.

rozcietrzewiacz
fonte
0

Tentei a regra de Ryan hoje e descobri que as respostas de Gils e Ryan têm regras de sucesso / padrão "revertidas", o nologin bloqueia apenas o 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
Vesa K
fonte