Como impedir que um usuário entre, mas permita "su - user" no Linux?

93

Como você permite que um usuário efetue login usando " su - user ", mas impede que o usuário efetue login usando SSH?

Eu tentei definir o shell para, /bin/falsemas quando eu tento sunão funciona.

Existem várias maneiras de permitir apenas logins por su?

O SSH é AllowUsero caminho a seguir? (como eu faria isso se for o caminho a percorrer)

NoozNooz42
fonte

Respostas:

113

Você pode usar AllowUsers / AllowGroups se tiver apenas alguns usuários / grupos com permissão para fazer login via ssh ou DenyUsers / DenyGroups se tiver apenas alguns usuários / grupos que não têm permissão para fazer login. Observe que isso apenas restringe o login via ssh, outras formas de login (console, ftp, ...) ainda são possíveis. Você precisa adicionar essas opções ao seu arquivo / etc / ssh / sshd_config para a maioria das instalações ssh.

Se você configurou o shell de login como / bin / false, pode usar su -s /bin/bash user(substitua / bin / bash pelo shell de sua escolha)

Florian Diesch
fonte
muito obrigado a todos. Eu não esperava receber mais de 2 votos na minha pergunta :) Gosto muito da construção "su -s ..." e o console / ftp é um bom ponto. Eu estava realmente atrás de algo como "su-s".
No9Nooz42
3
O truque su -s é ouro. Eu o uso o tempo todo para contas do sistema que eu preciso testar permissões para, por exemplo, apache, ninguém, etc. Geralmente eu su - user -s / bin / bash. O argumento opcional - pode ser usado para fornecer um ambiente semelhante ao que o usuário esperaria se o usuário estivesse conectado diretamente.
dmourati
2
Se você precisar que variáveis ​​de ambiente (por exemplo, de / etc / profile) sejam carregadas, passar um traço extra fará com que:su - -s /bin/bash user
Leons
13

Se você ainda deseja que o su funcione, é possível usá-lo sudo -u [username]ou transmiti -s /bin/bash-lo como um shell temporário. Ambos fazem o mesmo na ausência de uma concha /etc/passwd.

Loke
fonte
7

Se uma conta não tiver uma senha ( passwd -d nome de usuário ), ela não poderá efetuar login interativamente (console, SSH etc.). Se eles tiverem um shell válido, o su continuará funcionando. Observe o "interativamente"; se alguém decidir configurar um par de chaves SSH para a conta, isso funcionará!

astrostl
fonte
o usuário precisa ter um shell válido para su? Tenho certeza de que você ainda está no mesmo shell original depois de usar o comando para outro usuário ... na verdade, você não entra como o outro usuário ... Então, basta definir o shell para / dev / null. também.
Brian Postow
Sim, ele ainda precisa de um shell válido: [root @ localhost ~] # su daemon Esta conta não está disponível no momento. [root @ localhost ~] # su - daemon Esta conta não está disponível no momento. (Sistema RHEL, shell do daemon é / sbin / nologin)
astrostl
3

Em sshd_config, adicione uma linha DenyUser [username]

Observe que isso não impedirá que o usuário efetue login através do console.

Chris S
fonte
1
Isso deve ser DenyUsers, com um 's'.
David G
2

Além do que foi mencionado acima (desativar e / ou não definir a senha do usuário), o módulo pam_access (consulte a página de manual em pam_access e access.conf) pode ser usado para controlar o acesso ao login.

abz
fonte
1

como outros disseram;

DenyUser usernameou DenyGroup groupnameem sshd_configimpediria o login do par de chaves / senha via ssh.

embora eu costumo fazer algo assim AllowGroup sshou algo nesse sentido e adicionar explicitamente pessoas que precisam de acesso ssh a esse grupo.

então, você pode fazer o que os outros disseram: passwd -d usernameesvaziar a senha dos usuários, para que eles não possam efetuar login no console ou de outra maneira. ou melhor ainda, passwd -l usernamepara 'bloquear' a conta. é possível que o ssh negue o acesso a uma conta bloqueada, mesmo com chaves, mas não sou positivo.

cpbills
fonte
1
Na verdade, o ssh permitirá que você efetue login usando a autenticação de chave, mesmo quando a senha da conta está bloqueada.
Richard Holloway
1

Como mencionei em um comentário, acho que você ainda pode criar uma conta com um shell inválido. Portanto, se você definir o shell do usuário como / dev / null ou qualquer que seja o shell do bin, ainda poderá processar o usuário ... mas qualquer tentativa de efetuar logon de qualquer forma fará com que você saia ...

Brian Postow
fonte
1

edite o / etc / shadow adicionando! até o início do hash da senha.

username:!<hash>:#####:#:#####:#:::

Ao proteger uma nova instalação, é a primeira coisa que faço depois de instalar o sudo, para que ninguém possa usar o usuário root para efetuar login ou ssh no sistema, os usuários do sudo ainda podem executar como usuário root.

snic.io
fonte
0

Não especifique uma senha para o usuário não autorizado a efetuar login ou excluí-la.

# passwd -d myuser
François Feugeas
fonte
0

Supondo que você queira apenas su usuário da conta root e desabilite todos os outros acessos:

Use isto (execute como root):

usermod -e 1 -L user

Isso desativa o login com senha (como muitas outras respostas recomendaram), mas também expira a conta . Você não pode acessar uma conta expirada, por exemplo, com chaves SSH. Você ainda pode su user, apesar de exibir um aviso de que a conta expirou.

artfulrobot
fonte
0

Saber qual mecanismo é melhor depende dos requisitos. Se você conhece os requisitos, pode escolher o mecanismo apropriado. Todas as respostas acima são válidas para algum conjunto de requisitos.

Deseja restringir apenas o acesso SSH? Você precisa de acesso para métodos mail ou ssh? O acesso é apenas a partir da raiz?

su - userexigirá uma senha para o usuário se for executada, seja um usuário que não seja root. No entanto, sudo -u user -inão requer uma senha para o usuário.

BillThor
fonte