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

25

Estou configurando algumas ubuntucaixas e usando o opscode chefcomo 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 sudoprivilégios, 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 sudoprivilégios, isso significa que eu também devo configurar os usuários com NOPASSWD: ALLin visduo, ou existe uma maneira de um usuário alterar sua própria senha se eles possui apenas autenticação de chave pública?

cwd
fonte
@sr - não se parece esta é uma maneira tradicional de fazê-lo ...
CWD
Por que você deseja que seus usuários tenham privilégios de servidor sudo? Espero que você esteja ciente de que você concede um acesso root por isso. Pode haver uma chance aqui de investir algum tempo e permitir que apenas um subconjunto de comandos seja usado em conexão com o sudo (o que seria talvez menos inseguro). O Go man sudoersfornecerá informações sobre como certos comandos podem ser executados com o sudo sem a senha do usuário necessária. Você pode até adicionar um shellscript ao / etc / sudoers, o que permitiria uma configuração de "auto-senha" por usuário sem a necessidade de uma senha anterior.
humanityANDpeace
@humanityANDpeace - eu percebo isso. Todos os membros da nossa equipe exigem acesso root aos servidores em nuvem que mantemos. Agora estamos usando o chef para gerenciar as chaves públicas dos usuários e temos um grupo sysadmin com o NOPASSWD: ALLqual os membros da equipe fazem parte. Se você pode sugerir uma solução melhor, poste-a como resposta.
Cwd

Respostas:

21

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 estiver 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 passwdprograma verifica isso (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 inseri-la no passwdprompt executando sudo passwd $USER. Se sudoestiver configurado para exigir a senha do usuário, o usuário deverá ter digitado a senha de sudoqualquer 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 o PAM para configurar métodos de autenticação. No Ubuntu, os arquivos de configuração do PAM residem /etc/pam.d. Para desativar a autenticação por senha, comente a auth … pam_unix.solinha /etc/pam.d/common-auth. Além disso, certifique-se de que você tem na autenticação de senha embutida disable do sshd.PasswordAuthentication no/etc/ssh/sshd_config

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.

Gilles 'SO- parar de ser mau'
fonte
Uma forma conveniente de usar PAM em combinação com chave de autenticação SSH é através pam_ssh_agent_auth , que tem a vantagem de substituir a senha imediata do (teoricamente ainda mais seguro) SSH chave de autenticação pode usar qualquer maneira
Tobias KIENZLER
então você está dizendo sudo passwdque mudaria a senha do usuário atual, não do usuário sudo?
still_dreaming_1
1
@ still_dreaming_1 Não, estou dizendo que um usuário que pode executar comandos sudopode alterar sua própria senha. O comando exato realmente não importa, mas para entrar em mais detalhes, seria sudo passwd bobonde bobestá o nome do usuário ou algo equivalente. Sem argumento, de sudo passwdfato alteraria a senha do root.
Gilles 'SO- stop be evil' '' -
7

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 sudoatravés de um agente SSH (encaminhado ou local) ou de sua senha. Pode ser aconselhável solicitar aos usuários que usem de ssh-add -cmodo que cada sudochamada exija pelo menos alguma confirmação.

Tobias Kienzler
fonte
Em um assunto relacionado, há o pam_ssh , que permite usar a senha do SSH em vez da frase unix para o login, iniciando automaticamente um agente e adicionando a chave - fornecendo, assim, uma possibilidade de logon único.
Tobias Kienzler
1

Sim, é incrivelmente inseguro e também permite que um usuário acesse as senhas de outros usuários, mas como eles têm sudo, pouco pode ser feito.

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.

jrg
fonte
parece bom, mas você pode elaborar o que está acontecendo aqui?
Cwd
4
Não é possível fazer sudo -isem a senha do usuário atual.
Kravemir
@Miro. É como você diz. Ainda assim, sudo bashpoderia ser sem senha, dada essa configuração no /etc/sudoersarquivo. Acho @jrg é como disse mais enfocando a questão da insegurança com sudo aqui
humanityANDpeace
1
honestamente, você não precisa fazer isso sudo -i, pode ir direto para o sudo passwd $username@Miro, não precisa saber a senha do usuário atual. Você só precisa saber a senha root para usar o sudo
Antony
0

O objetivo da senha é garantir que os hackers que obtêm a chave do 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 envolva sudo sem senha.

Eu sugiro que você mantê-lo simples: talvez enviar e-mail de um usuário a senha padrão com instruções estritas para mudá-lo o mais rápido possível, ou então inserir um script em sua .profileou .loginou algo tal que exige uma nova senha em seu primeiro login. Ele pode se desativar quando concluído e você pode usar expectpara inserir a senha existente para que eles nunca precisem saber.

ams
fonte
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 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 alguma senha inicial ... 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.

hardeep
fonte