나는 ( 이 질문의 목적에 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
표준 입력을 리디렉션하면 암호 프롬프트가 나타나는 이유를 평생 이해할 수 없습니다. 나는 su
stdin이 리디렉션된 컨텍스트에서 이를 사용하고 있으므로 이를 피할 수 없습니다.
그 이유는 무엇이며, su
stdin이 리디렉션될 때 프롬프트를 피하는 방법은 무엇입니까?
답변1
명확히 하기 위해 OP는 USER 계정에 비밀번호가 설정되어 있지 않다고 언급했습니다.
~에서man pam_unix
(pam_unix아래에 참조된 모듈입니다):
누록
이 모듈의 기본 작업은 공식 비밀번호가 비어 있는 경우 사용자가 서비스에 액세스하는 것을 허용하지 않는 것입니다. nullok 매개변수는 이 기본값을 무시하고 빈 암호를 가진 모든 사용자가 서비스에 액세스할 수 있도록 허용합니다.
nullok_secure
이 모듈의 기본 작업은 공식 비밀번호가 비어 있는 경우 사용자가 서비스에 액세스하는 것을 허용하지 않는 것입니다. nullok_secure 매개변수는 이 기본 설정을 무시하여 PAM_TTY 값이 /etc/securetty의 값 중 하나로 설정되어 있는 한 null 비밀번호를 가진 모든 사용자가 서비스에 액세스할 수 있도록 허용합니다.
귀하 nullok_secure
의 PAM 설정이 .
작동하게 하려면 nullok_secure
다음으로 바꾸십시오 . nullok
Debian에서는 /etc/pam.d/common-auth
다른 Unix 또는 Linux 배포판에 따라 다른 위치(예: 특정 파일 su
) 에 배치될 수 있습니다.
추가 참고 사항: 명령을 사용할 때 암호 없이 성공하려면 다음 nullok_secure
위치에 있는 TTY에서 실행해야 합니다./etc/securetty
또는누락됨 /etc/securetty
(이로 인해 "PAM_TTY가 /etc/securetty에 있는 값 중 하나로 설정됨"이 항상 true가 됩니다). TTY가 없으면 이는 중요하지 않으며 항상 실패합니다.