desenv-web-rp.com

Um usuário do linux pode alterar sua senha sem saber a senha atual?

Estou configurando algumas caixas ubuntu e usando chef do opscode como ferramenta de configuração. Seria bastante fácil instalar chaves públicas para cada usuário em cada um desses servidores e desativar a autenticação de senha.

No entanto, os usuários também devem ter privilégios Sudo, que, por padrão, exigem uma senha.

Se eu quiser usar as chaves públicas dos usuários como um método de gerenciamento de acesso e permitir aos usuários Sudo privilégios, isso significa que eu também devo configurar os usuários com NOPASSWD: ALL em visduo, ou existe uma maneira de um usuário alterar sua própria senha se tiver apenas autenticação de chave pública?

26
cwd

Sudo, em sua configuração mais comum, requer que o usuário digite sua senha. Normalmente, o usuário já usou sua senha para se autenticar na conta, e digitar a senha novamente é uma maneira de confirmar que o usuário legítimo não abandonou o console e foi invadido.

Na sua configuração, a senha do usuário seria usada apenas para autenticação no Sudo. Em particular, se a chave SSH de um usuário for comprometida, o invasor não poderá elevar para privilégios de root no servidor. O invasor pode plantar um registrador de chaves na conta, mas esse registrador de chaves seria detectável por outros usuários e poderia ser monitorado automaticamente.

Um usuário normalmente precisa saber sua senha atual para alterá-la para uma senha diferente. O programa passwd verifica isso (ele pode ser configurado para não, mas isso não é útil ou de todo desejável no seu cenário). No entanto, o root pode alterar a senha de qualquer usuário sem conhecer a antiga; portanto, um usuário com poderes Sudo pode alterar sua própria senha sem digitá-la no prompt passwd executando Sudo passwd $USER. Se Sudo estiver configurado para exigir a senha do usuário, o usuário deverá ter digitado a senha para Sudo de qualquer maneira.

Você pode desativar a autenticação de senha seletivamente. Na sua situação, você desabilitaria a autenticação de senha no ssh e possivelmente em outros serviços. A maioria dos serviços nas organizações mais modernas (incluindo o Ubuntu) usa PAM para configurar métodos de autenticação. No Ubuntu, os arquivos de configuração do PAM estão em /etc/pam.d. Para desativar a autenticação por senha, comente a linha auth … pam_unix.so Em /etc/pam.d/common-auth. Além disso, verifique se você possui PasswordAuthentication no Em /etc/ssh/sshd_config Para desativar a autenticação de senha interna do sshd.

Você pode permitir que alguns usuários administrativos efetuem login com uma senha ou permitir a autenticação de senha no console. Isso é possível com o PAM (é bastante flexível), mas eu não sabia dizer o que estava acontecendo; faça uma pergunta separada se precisar de ajuda.

21

Você pode usar o módulo pam_ssh_agent_auth . É bem simples de compilar e, em seguida, basta adicionar a entrada

auth       sufficient pam_ssh_agent_auth.so file=~/.ssh/authorized_keys

antes das outras entradas auth (ou include) em /etc/pam.d/Sudo

e

Defaults    env_keep += "SSH_AUTH_SOCK"

para /etc/sudoers (via visudo).

Agora, todo usuário pode se autenticar em Sudo por meio de um agente SSH (encaminhado ou local) ou sua senha. Pode ser aconselhável solicitar que seus usuários usem ssh-add -c de modo que cada chamada Sudo exija pelo menos alguma confirmação.

8
Tobias Kienzler

Sim, é incrivelmente inseguro e também permite que um usuário acesse as senhas de outros usuários, mas como eles têm Sudo, não há muito o que fazer.

Basicamente, você faz o seguinte:

$ Sudo -i

Agora, somos raiz. Temos acesso a tudo.

# passwd $username

$ username pode ser o nome de qualquer pessoa.

Digite a nova senha do UNIX:

Digite novamente a nova senha UNIX: passwd: senha atualizada com sucesso

Boom, senha alterada. Novamente, incrivelmente inseguro, porque você pode mudar qualquer um, mas funciona, mas funciona. Não o recomendo, mas ofereça essa resposta como um exemplo do que não fazer.

1
jrg
#% useradd -g somegroup someuser
#% usermod -p "" someuser
#% chage -d 0 someuser
#% sed -i "s/^.*PasswordAuthentication .*/PasswordAuthentication no/" /etc/sshd/sshd_config
#% /sbin/service sshd restart
#% cp -r ~/.ssh `echo ~someuser`
#% chown -R someuser `echo ~someuser`/.ssh
#% chgrp -R somegroup `echo ~someuser`/.ssh
#% echo "%somegroup  ALL=(ALL)   ALL" >> /etc/sudoers

> Isso deve permitir que você tenha usuários que podem fazer login apenas usando chaves públicas e não podem usar senhas para fazer login. No entanto, ele será forçado a alterar a senha na primeira vez em que fizer o login ... mas sem ter que lhe dizer uma senha boa antecipadamente ... Os usuários serão solicitados a redefinir a senha e, posteriormente, poderão usá-la apenas para Sudo mas não poderá fazer login (ssh) usando essa senha. Observe que o truque aqui é não ter informado aos usuários uma senha fictícia que eles deverão inserir no momento do login, uma vez que sejam obrigados a alterar sua senha ... No nut Shell, nenhuma comunicação do admin (root) para o usuário real é necessário.

0
hardeep

O objetivo da senha é garantir que hackers que obtêm a chave de um usuário ou encontrem um terminal autônomo não possam obter acesso root. Por esse motivo, eu não recomendaria nenhuma solução que envolvesse Sudo sem senha.

Sugiro que você mantenha a simplicidade: talvez envie a senha padrão por e-mail a um usuário com instruções estritas para alterá-la o mais rápido possível, ou então insira um script em sua .profile ou .login ou algo que exija uma nova senha no primeiro login. Ele pode se desativar quando concluído, e você pode usar expect para inserir a senha existente para que eles nunca precisem saber.

0
ams