Como usuário privilegiado, estou tentando definir a sudo
senha para outra que não seja a usada no login.
Eu fiz algumas pesquisas, mas não encontrei uma resposta. Será que sudo
suporte esse tipo de configuração?
Se você perder sua senha, você perde tudo. Alguém poderia fazer login e promover-se root
com a mesma senha.
sudo
tem uma opção para solicitar root
senha em vez da senha de usuário invocada, ( rootpw
), mas o compartilhamento de root
senha definitivamente não é uma opção, é por isso que configuramos sudo
.
Eu fiz config 2FA
no passado, funcionou muito bem, mas também derrota o objetivo de automação. Por exemplo, se você deseja executar um comando privilegiado em uma dúzia de servidores com um expect
script, a adição 2FA
não permite que você faça isso.
A solução mais próxima que encontrei é permitir apenas a chave privada SSH e a frase secreta de configuração com uma chave diferente da sudo
senha (login). Ainda assim, não é confortável, porque em uma situação de emergência você não pode fazer login com um PC onde não possui essa chave.
Respostas:
Se você deseja solicitar a senha root, em oposição à senha do usuário, há opções que você pode inserir
/etc/sudoers
.rootpw
em particular, fará com que solicite a senha de root. Existerunaspw
etargetpw
também; veja a página de manual do sudoers (5) para detalhes.Fora isso, o sudo faz sua autenticação (como tudo o mais) através do PAM. O PAM suporta a configuração por aplicativo. A configuração do Sudo está (pelo menos no meu sistema Debian)
/etc/pam.d/sudo
e se parece com isto:Em outras palavras, por padrão, ele se autentica como tudo no sistema. Você pode alterar essa
@include common-auth
linha e fazer com que o PAM (e, portanto, o sudo) use uma fonte de senha alternativa. As linhas não comentadas em common-auth se parecem com (por padrão, isso será diferente se você estiver usando, por exemplo, LDAP):Você pode usar, por exemplo, em
pam_userdb.so
vez depam_unix.so
, e armazenar suas senhas alternativas em um banco de dados Berkeley DB.exemplo
Eu criei o diretório
/var/local/sudopass
, proprietário / gruporoot:shadow
, modo2750
. Dentro dele, criei um arquivo de banco de dados de senhas usandodb5.1_load
(que é a versão do Berkeley DB em uso no Debian Wheezy):Esse hash foi gerado com
mkpasswd -m des
, usando a senha "password". Muito altamente seguro! (Infelizmente, o pam_userdb parece não suportar nada melhor que ocrypt(3)
hash antigo ).Agora, edite
/etc/pam.d/sudo
e remova a@include common-auth
linha e, em vez disso, coloque isso no lugar:Observe que o pam_userdb adiciona uma
.db
extensão ao banco de dados passado, portanto, você deve deixá-.db
lo desativado.De acordo com dannysauer em um comentário , talvez você precise fazer a mesma edição
/etc/pam.d/sudo-i
também.Agora, para sudo, devo usar em
password
vez da minha senha de login real:fonte
crypt(3)
hashing antigo " nas versões modernas do glibc suporta o sha-512, por exemplo.mkpasswd -m sha-512
. O pam_userdb.so pode lidar com isso muito bem.Para Redhat / Centos, o requisito pode ser alcançado com as seguintes etapas:
Crie usuário personalizado e passe:
Edite o arquivo sudo pam.d para que fique parecido com:
Ainda estou procurando a maneira de configurar, para que apenas um determinado usuário / grupo seja autenticado por esse método personalizado, outros ainda possam ser autenticados pelo método normal de autenticação do sistema. Alguém pode me dar alguns conselhos?
fonte
[user_unknown=ignore,success=ok,default=bad]
... mas você vai ter que jogar com isso (e ler os docs PAM) para obtê-lo direitopam_succeed_if
para pular um módulo, se o usuário estiver em uma lista de grupos, ou pular dois módulos, se não estiver.Eu não acho que o sudo suporte essa configuração. O objetivo do prompt da senha do sudo é garantir que a pessoa que emite o comando sudo seja a mesma pessoa que efetuou login, e a maneira mais fácil de fazer isso é solicitar que o usuário conectado no momento se autentique novamente.
Em outras palavras, o objetivo do prompt de senha do sudo não é estabelecer autoridade , é estabelecer identidade . Com base na identidade estabelecida e na configuração do sudo, é possível decidir se o usuário em questão possui a autoridade ou direitos de acesso necessários.
fonte
Sua preocupação é que a senha da sua conta possa ser divulgada. A solução é não usar a senha de login de uma maneira que possa ser divulgada. Com o ssh, a senha é criptografada na conexão, então tudo bem. As pessoas desativam a autenticação de senha com ssh para impedir ataques de adivinhação de senha, não para proteger a confidencialidade da senha. Se você estiver usando a mesma senha da conta para qualquer outra coisa, verifique se está usando um canal criptografado e seguro para fornecer a senha. Se você estiver preocupado com um keylogger ou qualquer outra coisa, pare de usar máquinas não confiáveis para fazer login.
Se alguém pode obter sua senha ssh, provavelmente também pode obter a senha sudo alternativa, portanto, é melhor investir tempo para tornar suas conexões mais seguras do que gastar tempo apenas complicando as coisas apenas pela ilusão de mais segurança.
fonte
Não tenho acesso imediato a um sistema onde posso testar isso e resolver os detalhes, mas tenho uma ideia:
shau
.)shau2
. (Não tenho certeza se você deseja que ele tenha o mesmo UID queshau
.)shau2
para ter privilégios sudo com NOPASSWD.su shau2 -c sudo "$@"
. Isso deve pedirshau2
a senha de. Se isso for inserido corretamente, ele será executadosudo
comoshau2
(que não deve solicitar uma senha).shau
os privilégios sudo.Infelizmente, você teria que repetir isso para todos os usuários com privilégios de sudo.
fonte
Obrigado @ Shâu Shắc pela resposta ! Essa solução também funciona para o LinuxMint 17.1 Cinnamon 32bit (eu instalei apenas o
db-util
pacote para executardb_load
).Mas estou muito confuso com o
passwd.db
arquivo resultante . Fiz o mesmo que em sua resposta (mas usei David e Jones , eles parecem mais atraentes):Mas as credenciais inseridas são armazenadas dentro do arquivo hash como texto sem formatação:
Você também pode ver david e jones via mcedit :
Sim, é possível restringir as permissões de
/usr/local/etc/passwd.db
. Mas de qualquer maneira, nome de usuário e senha armazenados como texto sem formatação são ruins.Mesmo com a senha sudo separada, existem algumas falhas de segurança em potencial (por configuração padrão da distribuição). Portanto, uma senha separada não é aplicável ao su (portanto, é possível iniciar a sessão raiz usando uma
su
senha de login). Além disso, a senha separada não é respeitada pelo Kit de Políticas (é possível iniciar o Synaptic usando asynaptic-pkexec
senha de login. Depois, exclua os pacotes ...). Esses problemas podem ser eliminados pelo ajuste adicional dos arquivos de configuração.Em geral, parece que uma senha sudo separada segura pode ser obtida apenas com a ajuda do módulo PAM personalizado (talvez, esse módulo compare a senha e a leitura de hash SHA-512 do arquivo) ou a funcionalidade SELinux.
PS: desculpe, deve ser um comentário. Mas funciona como resposta por causa do formato de texto. Obrigado pela compreensão.
fonte