Estou usando su
(não estou interessado sudo
para os propósitos desta pergunta) e observando o seguinte comportamento:
$ su USER -s /bin/bash -c "echo hi"
hi
$ printf "" | su USER -s /bin/bash -c "echo hi"
Password: su: Authentication failure
$ su USER -s /bin/bash -c "echo hi" < /dev/null
Password: su: Authentication failure
$ su USER -s /bin/bash -c "echo hi" < /dev/tty
Password:
$ su USER -s /bin/bash -c "echo hi" < /dev/tty1
hi
Pela minha vida, não entendo por que o redirecionamento de stdin faz com que um prompt de senha apareça. Estou usando su
em um contexto onde o stdin já está redirecionado, então não posso evitar isso.
Qual é o motivo disso e como evito o prompt su
quando o stdin é redirecionado?
Para esclarecer, o OP comentou que a conta USER não possui senha definida.
De
man pam_unix
( pam_unix é o módulo referenciado abaixo):Acho que suas configurações do PAM estão usando
nullok_secure
. Esse é o caso do Debian 10.Basta substituir
nullok_secure
pornullok
para que funcione. No Debian isso seria/etc/pam.d/common-auth
, diferentes distribuições Unixes ou Linux podem colocá-lo em outro lugar (por exemplo, em um arquivo específico parasu
)Nota adicional: para que o comando seja bem-sucedido sem senha ao usar
nullok_secure
, ele precisa ser executado em um TTY presente/etc/securetty
ou na ausência de/etc/securetty
(o que torna a instrução "PAM_TTY é definida como um dos valores encontrados em /etc/securetty" sempre verdadeira ). Sem TTY, isso não importa e sempre falhará.