Se você quiser solicitar a senha de root, ao contrário da senha do usuário, há opções que você pode colocar em /etc/sudoers
. rootpw
em particular fará com que ele peça a senha de root. Há runaspw
e targetpw
também; veja o sudoers (5) manpage para detalhes.
Além disso, o sudo faz sua autenticação (como todo o resto) através do PAM. O PAM suporta a configuração por aplicativo. A configuração do Sudo está em (pelo menos no meu sistema Debian) /etc/pam.d/sudo
, e é assim:
$ cat sudo
#%PAM-1.0
@include common-auth
@include common-account
@include common-session-noninteractive
Em outras palavras, por padrão, ele autentica como tudo o mais no sistema. Você pode alterar essa linha @include common-auth
e fazer com que o PAM (e, portanto, o sudo) use uma fonte de senha alternativa. As linhas não comentadas na autenticação comum são semelhantes a (por padrão, isso será diferente se você estiver usando, por exemplo, LDAP):
auth [success=1 default=ignore] pam_unix.so nullok_secure
auth requisite pam_deny.so
auth required pam_permit.so
Você poderia usar, por exemplo, pam_userdb.so
em vez de pam_unix.so
e armazenar suas senhas alternativas em um banco de dados do Berkeley DB.
exemplo
Eu criei o diretório /var/local/sudopass
, proprietário / grupo root:shadow
, modo 2750
. Dentro dele, eu fui em frente e criei um arquivo de banco de dados de senhas usando db5.1_load
(que é a versão do Berkeley DB em uso no Debian Wheezy):
# umask 0027 # db5.1_load -h /var/local/sudopass -t hash -T passwd.db anthony WMaEFvCFEFplI ^D
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 do que o antigo hashing crypt(3)
).
Agora, edite /etc/pam.d/sudo
e remova a linha @include common-auth
e, em vez disso, coloque isso em prática:
auth [success=1 default=ignore] pam_userdb.so crypt=crypt db=/var/local/sudopass/passwd
auth requisite pam_deny.so
auth required pam_permit.so
Observe que o pam_userdb adiciona uma extensão .db
ao banco de dados passado, portanto você deve deixar o .db
off.
De acordo com dannysauer em um comentário , você pode precisar fazer a mesma edição para /etc/pam.d/sudo-i
também.
Agora, para sudo, devo usar password
em vez da minha senha de login real:
anthony@sudotest:~$ sudo -K anthony@sudotest:~$ sudo echo -e '\nit worked' [sudo] password for anthony: passwordRETURN it worked