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

18

Estou configurando algumas ubuntu boxes e usando chef do opscode como uma 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 sudo privileges, o que, por padrão, requer 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 privileges, isso significa que também devo configurar os usuários com NOPASSWD: ALL em visduo ou existe uma maneira que um usuário pode alterar sua própria senha, se eles só têm autenticação de chave pública?

    
por cwd 30.04.2012 / 17:42

5 respostas

18

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

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 os privilégios de root no servidor. O invasor pode plantar um keylogger na conta, mas esse keylogger seria detectável por outros usuários e poderia até ser assistido automaticamente.

Normalmente, um usuário precisa saber sua senha atual para alterá-la para uma senha diferente. O programa passwd verifica isso (pode ser configurado para não, mas isso não é útil ou de todo desejável em seu cenário). No entanto, o root pode alterar a senha de qualquer usuário sem conhecer o antigo; portanto, um usuário com poderes sudo pode alterar sua própria senha sem inseri-la no prompt passwd executando sudo passwd $USER . Se sudo estiver configurado para exigir a senha do usuário, o usuário deverá digitar a senha para sudo mesmo assim.

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 na maioria dos unices modernos (incluindo o Ubuntu) usa o PAM para configurar os métodos de autenticação. No Ubuntu, os arquivos de configuração do PAM vivem em /etc/pam.d . Para desabilitar a autenticação de senha, comente a linha auth … pam_unix.so em /etc/pam.d/common-auth . Além disso, certifique-se de ter PasswordAuthentication no em /etc/ssh/sshd_config para desativar a autenticação de senha integrada 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 poderia dizer o quão fora do topo da minha cabeça; faça uma pergunta separada se precisar de ajuda.

    
por 01.05.2012 / 03:15
7

Você pode usar o módulo pam_ssh_agent_auth . É muito simples compilar e depois é só 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, cada usuário pode se autenticar em sudo por meio de um agente SSH (encaminhado ou local) ou de sua senha. Pode ser sensato pedir a seus usuários que usem ssh-add -c para que cada chamada de sudo exija pelo menos alguma confirmação.

    
por 08.01.2013 / 10:41
1

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

Basicamente, você faz o seguinte:

$ sudo -i

Agora, somos a raiz. Nós temos acesso a tudo.

# passwd $username

$ username pode ser o nome de usuário de qualquer pessoa.

Enter new UNIX password:

Retype new UNIX password: passwd: password updated successfully

Boom, senha alterada. Novamente, incrivelmente inseguro porque você pode mudar qualquer um, mas funciona, mas funciona. Eu não recomendo, mas sim oferecer esta resposta como um exemplo do que não fazer.

    
por 30.04.2012 / 18:08
0

O objetivo da senha é garantir que os hackers que obtêm a chave de um usuário ou localizem um terminal autônomo não obtenham acesso root. Por essa razão, eu não recomendaria nenhuma solução que envolvesse sudo sem senha.

Sugiro que você mantenha as coisas simples: talvez envie um email para o usuário com a senha padrão com instruções estritas para alterá-lo o mais rápido possível, ou insira um script em .profile ou .login ou algo assim que exija uma nova senha primeiro login. Ele poderia se desativar quando concluído e você poderia usar expect para inserir a senha existente para que eles nunca precisem conhecê-la.

    
por 01.05.2012 / 21:04
0
#% 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 possam efetuar login usando apenas chaves públicas e não use senhas para login. No entanto, ele será forçado a mudar a senha na primeira vez que entra ... mas sem ter que lhe dizer alguma senha na frente ... Os usuários serão simplesmente pediu para redefinir a senha e, posteriormente, eles podem usá-lo apenas para o sudo mas não poderá efetuar login (ssh) usando essa senha. Note que o truque aqui é não ter dito aos usuários alguma senha fictícia que eles seriam então obrigados a inserir no momento do login, uma vez que eles são obrigados a alterar sua senha ... No nut shell nenhuma comunicação do admin (root) para o usuário real é necessário.

Espero que ajude

    
por 27.01.2014 / 21:01