stdin이 리디렉션되면 su가 비밀번호를 요구하는 이유는 무엇입니까? 이것을 어떻게 피할 수 있습니까?

stdin이 리디렉션되면 su가 비밀번호를 요구하는 이유는 무엇입니까? 이것을 어떻게 피할 수 있습니까?

나는 ( 이 질문의 목적에 su관심이 없음 ) 다음 동작을 관찰하고 있습니다.sudo

$ 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

표준 입력을 리디렉션하면 암호 프롬프트가 나타나는 이유를 평생 이해할 수 없습니다. 나는 sustdin이 리디렉션된 컨텍스트에서 이를 사용하고 있으므로 이를 피할 수 없습니다.

그 이유는 무엇이며, sustdin이 리디렉션될 때 프롬프트를 피하는 방법은 무엇입니까?

답변1

명확히 하기 위해 OP는 USER 계정에 비밀번호가 설정되어 있지 않다고 언급했습니다.

~에서man pam_unix(pam_unix아래에 참조된 모듈입니다):

누록

이 모듈의 기본 작업은 공식 비밀번호가 비어 있는 경우 사용자가 서비스에 액세스하는 것을 허용하지 않는 것입니다. nullok 매개변수는 이 기본값을 무시하고 빈 암호를 가진 모든 사용자가 서비스에 액세스할 수 있도록 허용합니다.

nullok_secure

이 모듈의 기본 작업은 공식 비밀번호가 비어 있는 경우 사용자가 서비스에 액세스하는 것을 허용하지 않는 것입니다. nullok_secure 매개변수는 이 기본 설정을 무시하여 PAM_TTY 값이 /etc/securetty의 값 중 하나로 설정되어 있는 한 null 비밀번호를 가진 모든 사용자가 서비스에 액세스할 수 있도록 허용합니다.

귀하 nullok_secure의 PAM 설정이 .

작동하게 하려면 nullok_secure다음으로 바꾸십시오 . nullokDebian에서는 /etc/pam.d/common-auth다른 Unix 또는 Linux 배포판에 따라 다른 위치(예: 특정 파일 su) 에 배치될 수 있습니다.

추가 참고 사항: 명령을 사용할 때 암호 없이 성공하려면 다음 nullok_secure위치에 있는 TTY에서 실행해야 합니다./etc/securetty 또는누락됨 /etc/securetty(이로 인해 "PAM_TTY가 /etc/securetty에 있는 값 중 하나로 설정됨"이 항상 true가 됩니다). TTY가 없으면 이는 중요하지 않으며 항상 실패합니다.

관련 정보