다음 이름의 새 계정을 만듭니다 test
.
$ sudo useradd test
test
현재 비밀번호가 없습니다. 그래서
$ su test
작동하지 않습니다. 시도하면 test
비밀번호를 입력하라는 메시지가 표시됩니다. 하나도 없습니다. 이는 빈 비밀번호와는 다르기 때문에 빈 비밀번호에 대해 Enter를 누르면 "su: Authentication failed"라는 메시지가 나타납니다.
tty로 전환하고 다음으로 로그인을 시도하는 경우에도 마찬가지입니다 test
. 빈 비밀번호는 허용되지 않습니다.
이제 test
빈 비밀번호를 지정하십시오.
$ sudo passwd -d test
test
이제 빈 문자열을 비밀번호로 제공하여 tty에 로그인할 수 있습니다. 그러나 시도하면
$ su test
이번에도 여전히 "su: Authentication failed"라는 메시지가 표시됩니다. 세션이 사용자로 전환되지 않습니다 test
.
왜 이런거야?
답변1
출력 결과로 볼 때 ldd /bin/su
, su
바이너리는 pam
라이브러리( libpam*
)를 사용하여 컴파일되므로 인증, 계정 관리, 세션 시작 등과 같은 작업은 에서 컴파일됩니다 pam
.
다음은 일반적인 Ubuntu 시스템을 관리하는 su
방법 입니다 pam
. 다른 배포판을 사용하는 경우 유사한 방법을 찾아야 합니다.
pam
규칙은 su
파일에 정의되어 있습니다 /etc/pam.d/su
. 이 파일에는 이름에서 알 수 있는 작업을 처리하기 위한(그리고 다른 활성화된 서비스에서 사용하기 위한) 일반 템플릿과 동일한 디렉터리에 common-auth
, common-passwd
, 파일도 포함되어 있습니다.common-session
pam
내 시스템의 /etc/pam.d/su
맨 아래에는 다음이 있습니다.
@include common-auth
@include common-account
@include common-session
처음 몇 줄은 빈 비밀번호 확인을 처리하지 않으며 주로 pam_unix
모듈의 작업입니다.
다음이 /etc/pam.d/common-auth
있습니다:
auth [success=1 default=ignore] pam_unix.so nullok_secure
에서 man pam_unix
:
누록
이 모듈의 기본 작업은 공식 비밀번호가 비어 있는 경우 사용자가 서비스에 액세스하는 것을 허용하지 않는 것입니다. nullok 매개변수는 이 기본값을 무시하고 빈 암호를 가진 모든 사용자가 서비스에 액세스할 수 있도록 허용합니다.
nullok_secure
이 모듈의 기본 작업은 공식 비밀번호가 비어 있는 경우 사용자가 서비스에 액세스하는 것을 허용하지 않는 것입니다. nullok_secure 매개변수는 이 기본값을 무시하고 PAM_TTY 값을 /etc/securetty에 있는 값 중 하나로 설정하여 빈 비밀번호를 가진 모든 사용자가 서비스에 액세스할 수 있도록 허용합니다.
보시다시피, nullok_secure
이 옵션을 설정 하면 위와 같이 환경변수를 설정하지 않는 이상 PAM_TTY
비밀번호가 비어있는 사용자는 허용되지 않습니다 su
.
따라서 빈 비밀번호를 가진 모든 사용자가 이 작업을 수행하도록 허용하려면 모듈 에 매개변수를 제공 su
해야 합니다 .nullok
pam_unix
auth [success=1 default=ignore] pam_unix.so nullok
해당 common-auth
파일은 다른 많은 서비스에서 사용되기 때문에 안전하지 않으며 su
단지 이 작업을 수행하기 위해서라도 수행해서는 안 됩니다. (테스트용으로는 한 번 설정한 후 원래 상태로 되돌릴 수 있습니다. 하지만 테스트하려면 파일을 /etc/pam.d/su
엉망으로 만드는 것보다 모든 로직을 파일로 병합한 다음 변경 사항을 수정하는 것이 좋습니다 common-*
.)
답변2
에서 man useradd
:
-p, --password PASSWORD
The encrypted password, as returned by crypt(3). The default is to disable the password.
Note: This option is not recommended because the password (or encrypted password) will be visible by users listing the processes.
당신은 그것을 사용하고 있지 않으므로 --password
사용자 ID에는 특별한 "비활성화" 비밀번호가 할당됩니다. 빈 비밀번호와 다릅니다.
즉, 이것은 보안 구멍이 될 것입니다.