/usr/bin/agetty -
터미널 에뮬레이터의 bash에서 호출을 시도했습니다 (둘 다 내 원래 bash 프로모션입니다.
agetty는 systemd
ttyx 장치를 사용하는 서비스로 시작되므로 로그인이 으로 구성되어 시스템 세션을 생성하므로 execve(/usr/bin/login)
로그인 업그레이드가 제공됩니다 . pam_systemd
하지만 위와 같이 직접 실행하면 얻을 수 있는 것이 아니며 agetty -
, 확인할 때 새 세션이 생성되지 않습니다 systemctl status
.
그런 다음 agetty가 일반 사용자로 실행되고 있기 때문에 자체 EUID 등을 확인할 수 있다고 생각했지만 이로 인해 사용자 이름을 입력한 후 bash가 종료됩니다.
다시 확인해 systemctl status
보니 systemd가 이 프로그램을 실행한다고 합니다 /sbin/agetty -o -p -- \u --noclear tty2 linux
. tty2에 루트로 로그인하여 실행했는데 agetty -o -p -- \u --noclear - linux
처음과 똑같은 상황이 발생했습니다. 다시 bash로 돌아왔습니다.
나는 이러한 실험 결과를 이해해야 합니다.
저는 ArchLinux를 사용하고 /usr/bin/login
있으며 /usr/bin/agetty
둘 다 packages 에서 왔습니다 util-linux 2.33-2
.
답변1
분명히 "재귀 login
"는 몇 가지 유용한 작업을 수행하는 데 사용되었지만 이제는 한동안 Linux에서 작동하지 않을 것으로 예상됩니다.
현재 시스템에 대해 더 잘 이해되고 문서화되어 있으므로 non-recursive login
, OR su
및 Error 와 같이 더 일반적으로 사용되는 기술을 고수하는 것이 좋습니다 .sudo
가능하다면 su
이를 사용 하지 마십시오 su -l
. 이렇게 하면 깔끔한 환경 변수 세트가 제공됩니다.
그래요아니요설명하는 특정 결과가 나타나는 이유를 알아보세요. 그러나 "재귀"의 동작을 이해해야 한다면 login
그것이 어떻게 잘못될 수 있는지에 대해 알아야 할 두 가지 특정 사항을 생각해 볼 수 있습니다.
실수
문서화되지 않은 BSD -r 옵션은 지원되지 않습니다. 이는 일부 rlogind(8) 프로그램에서 필요할 수 있습니다.
예전에는 재귀 로깅이 더 이상 대부분의 목적에 작동하지 않았으므로 su(1)이 만족스러운 대체 방법입니다. 실제로 보안상의 이유로 로그인은 vhangup() 시스템 호출을 수행하여 tty에서 가능한 모든 수신 프로세스를 제거합니다. 이는 비밀번호 스니핑을 방지하기 위한 것입니다. 명령을 사용하여 로그인하면 주변 쉘은 더 이상 tty의 실제 소유자가 아니기 때문에 vhangup()에 의해 종료됩니다.
--
man login
systemd를 사용하면 로그인 세션을 추적하지만 중첩되는 것을 허용하지 않습니다. 이것은의도적인 선택시스템 로그인 세션이 audit
"세션"과 상호 작용하는 방법에 대해 설명합니다. su
/ sudo
현재 " audit
세션"을 탈출하지 마십시오.
현재 나는 실행할 때마다 systemd가 이 디자인을 시끄럽게 기록하는 것을 볼 수 있습니다 sudo
. 이것이 왜 바람직하다고 생각되는지 묻지 마십시오 ...
sudo[1079]: pam_systemd(sudo:session): Cannot create session: Already running in a session
전체 공개: 인용문은 man login
계속됩니다:
명령을 사용하여 로그인하면 주변 쉘은 더 이상 tty의 실제 소유자가 아니기 때문에 vhangup()에 의해 종료됩니다. 이는
exec login
최상위 쉘이나 xterm에서 사용 하면 피할 수 있습니다.