추가 읽기

추가 읽기

최소한의 시스템 정보를 표시하기 위해 tty 로그인 프롬프트를 단순화/강화하려고 실험 중입니다. 수정 /etc/issue하고 /etc/motd비어 있도록 이동했습니다 ~/.hushlogin. 거의 모든 것이 지워집니다!

내 로그인 경험은 다음과 같습니다.

hostname login: user
Password:
user@hostname:~$ 

로그인 프롬프트에 호스트 이름을 표시하는 것이 마음에 들지 않아서 추적했습니다. 이것이 나를 만든다매뉴얼 페이지agetty, 서비스 파일을 수정했습니다.

/lib/systemd/system/[email protected], 그리고

/lib/systemd/system/[email protected],

--nohostname다음과 같이 ExecStart 줄에 옵션을 추가합니다 .

[Service]
ExecStart=-/sbin/agetty --nohostname --keep-baud 115200,38400,9600 %I $TERM

이것은 훌륭하게 작동합니다.와는 별개로, 사용자가 잘못된 비밀번호를 입력한 경우. 그런 다음 이전 프롬프트로 돌아가서 호스트 이름을 표시합니다.

성공적 로그인:

login: user
Password:
user@hostname:~$

로그인 실패:

login: user
Password:

Login incorrect
hostname login:

더 이상한 점은 잘못 로그인한 후 약 60초 동안 콘솔을 방치하면 "login"이라는 단어의 절반이 인쇄되고 일시 중지된 다음 올바른 로그인 프롬프트가 표시된다는 것입니다.

login: user
Password:

Login incorrect
hostname login:
Log
login:

이 동작을 설명하는 방법에 대한 아이디어가 있습니까? agetty의 소스 코드와 Shadow의 소스 코드(login.c)를 살펴본 결과 로그인 프롬프트가 실패 후 다시 표시되는 위치를 알 수 있지만 PAM을 참조하므로 Linux 시스템의 해당 부분을 잘 이해하지 못합니다. .

이 문제는 2015년 CentOS에서도 보고되었습니다.

답변1

이 동작은 쉽게 설명되며 수십 년 전 Unix의 첫 번째 버전으로 거슬러 올라갑니다. getty첫 번째 로그인 프롬프트가 인쇄되지만, 인증이 실패하면 프로그램은 두 번째 및 후속 프롬프트를 인쇄하며 logingetty시점에서 자신을 덮어씁니다.

프로그램 login에는 종료하고 프로세스 #1에 의해 로그인 서비스가 다시 시작되기 전에 로그인 시도 횟수에 제한이 있습니다. 원격 실제 터미널이 있는 시스템에서는 터미널 장치가 종료되어 DTR이 0으로 설정되고 연결된 모뎀의 연결이 끊어집니다. 아이디어는 원격 연결을 통해 암호와 계정을 무차별 대입하는 것을 어렵게 만드는 것입니다. (여러 전화 통화에 따라 다르며 이는 현지 요금으로도 공격자에게 비용이 많이 듭니다.) 동일한 원인이 되는 비활성 타이머도 있습니다. (아이디어는 약간 다릅니다. 아직 세션에 로그인하지 않은 원격 터미널에 의해 전화 회선이 무기한 할당되는 것을 방지하는 것입니다.)

가상 터미널 또는 실제 터미널에서현지의, 모뎀도 없고, 전화선도 없고, 전화를 끊을 통신업체도 없습니다. 로그인 프롬프트를 반복하고 감시 장치를 설정하는 이러한 메커니즘은 기본적으로 의미가 없습니다. login감시자 없이 무기한 기다릴 수 있으며 로그인 서비스를 저렴하게 종료하고 재활용할 수 있습니다.모든확인에 실패했습니다. 그러나 그들은 여전히 ​​​​존재하고 있으며 여전히 고용되어 있습니다.

불행하게도 agettyutil-linux의 프로그램에서는 최소한 프롬프트의 이 부분을 구성할 수 있지만 loginShadow의 프로그램에서는 그렇지 않습니다. 로그인 프롬프트는 프로그램 코드에 내장되어 있습니다.

이는 일반적이지 않습니다. 예를 들어, FreeBSD 시스템에서 프로그램이 실행하는 프롬프트는 의 설정을 통해 구성 login할 수 있습니다 .login_prompt/etc/login.conf

추가 읽기

관련 정보