추가 읽기

추가 읽기

다음을 입력한 후 비밀번호를 묻는 메시지가 나타나면 su:

user@debian:~$ su
Password:

키보드(동일 터미널)에서 send()를 할 수 없습니다 SIGSTOP. 아무 일도 일어나지 않습니다. ctrl+Z따라서 종료하는 유일한 방법은 일부(올바른 또는 잘못된) 비밀번호를 입력하는 것입니다. 왜 su이렇게 일시 중지 할 수 없나요 ?

ctrl+ZUPD: 대기열이 있는 것 같습니다 . 따라서 전송할 때 ctrl+Z아무 일도 일어나지 않지만 Enter입력 신호가 도착하고 su중지된 후에는 발생합니다. 아직도 이 행동을 이해할 수 없습니다. 이 표준 동작은 모든 Unix 계열 시스템에 적용됩니까, 아니면 Linux에만 적용됩니까?

답변1

몇 가지 기본적인 오류를 명확히 해 보겠습니다.

  1. 신호아니요대기줄. 큐잉은 신호와 관련하여 특정한 일이며 이 특정 신호에서는 발생하지 않습니다. 신호는가면을 쓴.
  2. 이 특별한 신호아니요 SIGSTOP. 이 susp문자를 사용하면 라인 규율이 전송됩니다 SIGTSTP.

login1980년대 및 명령 관점과 모순되는 많은 것들과 마찬가지로 su여기서 동작의 근본은 PAM입니다.

su그런 목적으로 만들어진 것이 아닙니다 . 사용하는 것 외에도리눅스 PAM도서관. 예를 들어 OpenPAM 라이브러리를 사용하는 BSD에서는 이런 일이 발생하지 않습니다.

이를 수행하는 것이 Linux PAM에서 제공하는 PAM이라는 모듈입니다 pam_unix. 더 구체적으로 말하면, 이 작업을 수행하는 코드 misc_conv()내부에서 호출되는 라이브러리에서 제공하는 기본 "대화" 기능 입니다 . 메시지가 표시되면 입력 항목을 구체적으로 차단합니다.pam_unixSIGTSTP표면적으로는 도서관을 청소할 수 있도록. 그렇기 때문에 신호가 입력 전에 전달되지 않습니다.

OpenPAM은 pam_unixPAM 모듈도 제공합니다. 이는 OpenPAM 라이브러리에서 제공하는 기본 "대화 상자" 기능을 호출합니다 openpam_ttyconv(). 후자의신호 차단 없음. suFreeBSD 등에서는 비밀번호 프롬프트에서 일시 중지가 가능하다는 사실을 아무도 눈치 채지 못한 것 같습니다 . 그리고 터미널은 에코를 끕니다. 이는 아마도 FreeBSD의 운영 체제에서 제공하는 명령줄 셸에는 모두 프롬프트 입력을 인계받아 자체 에코를 수행할 때 터미널 설정을 즉시 재조정하는 줄 편집 라이브러리가 있기 때문일 것입니다.

추가 읽기

관련 정보