A partir da saída de ldd /bin/su
, o binário su
é compilado com as bibliotecas pam
( libpam*
), portanto a autenticação, gerenciamento de conta, material de iniciação de sessão etc serão gerenciados por pam
. / p>
O seguinte é como um su
típico do sistema Ubuntu é gerenciado por pam
, você deve encontrar uma abordagem similar se estiver usando outra distro.
As regras pam
para su
estão definidas no arquivo /etc/pam.d/su
. Esse arquivo também inclui os arquivos common-auth
, common-passwd
, common-session
do mesmo diretório dos modelos comuns para cobrir as tarefas sugeridas pelo seu nome (e usados em outros serviços pam
enabled).
No meu sistema, na parte inferior de /etc/pam.d/su
i:
@include common-auth
@include common-account
@include common-session
As linhas anteriores não lidam com a verificação de senha nula, é principalmente o trabalho de pam_unix
module.
Agora /etc/pam.d/common-auth
tem:
auth [success=1 default=ignore] pam_unix.so nullok_secure
De man pam_unix
:
nullok
The default action of this module is to not permit the user access to a service if their official password is blank. The nullok argument overrides this default and allows any user with a blank password to access the service.
nullok_secure
The default action of this module is to not permit the user access to a service if their official password is blank. The nullok_secure argument overrides this default and allows any user with a blank password to access the service as long as the value of PAM_TTY is set to one of the values found in /etc/securetty.
Como você pode ver se a opção nullok_secure
está definida, a menos que a variável de ambiente PAM_TTY
esteja definida da maneira mencionada, o usuário com a senha nula não terá permissão para efetuar login usando su
.
Portanto, para permitir que qualquer usuário com senha nula execute su
, você precisa ter o argumento nullok
no módulo pam_unix
:
auth [success=1 default=ignore] pam_unix.so nullok
isso é inseguro, pois o arquivo common-auth
é usado por muitos outros serviços, mesmo por apenas su
, isso não deve ser feito. (Para testar você pode configurá-lo uma vez e voltar ao original. Embora se você quiser fazer o teste, é melhor incorporar todas as lógicas no arquivo /etc/pam.d/su
, e emendar quaisquer alterações depois, em vez de mexer com qualquer common-*
file)