이것이 추상적인 질문이라면 사과드립니다. 최대한 구체적으로 답변해 드리겠습니다.
bash 쉘에서 다른 계정으로 전환하면 su - foo
비밀번호를 입력하라는 메시지가 표시됩니다. 이 비밀번호 프롬프트에 입력하는 문자는 화면에서 숨겨지며, 입력 중인 문자 수나 내용이 표시되지 않습니다. bash(또는 일반적으로 Linux)는 이를 어떻게 수행합니까?
답변1
입력한 내용은 터미널이 "반향"하기 때문에 터미널에 나타납니다. 비밀번호를 요청하면 에코가 꺼집니다. help read
해당 옵션 도 참조하세요 -s
.
답변2
나는 su
그것이 켜져 있고 /dev/tty
터미널 드라이버 설정을 에코 없음으로 변경한 다음 /dev/tty
.
이 믿음을 테스트하기 위해 strace -o su.out su -
Arch Linux 노트북에서 실행했습니다. 출력의 관련 부분 strace
:
ioctl(0, SNDCTL_TMR_CONTINUE or TCSETSF, {B38400 opost isig icanon -echo ...}) = 0
write(2, "Password: ", 10) = 10
read(0, "hahanotthis\n", 511) = 7
ioctl(0, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig icanon echo ...}) = 0
제가 100% 틀린 것은 아닙니다. su
실제로 stdin에서 읽지만 터미널 제어를 사용하여 stdin에서 에코를 끕니다 ioctl()
. 비밀번호를 입력한 후 su
시스템 호출을 통해 에코를 다시 켜십시오.ioctl()
다른 프로그램, ftp
특히 클라이언트는 읽기 암호를 사용한다는 것을 알고 있습니다 /dev/tty
. 즉, 명령줄에 암호를 입력할 수 없거나 "여기 문서"에 몇 가지 속임수를 사용해야 한다는 의미입니다.