보려고 해요passwd 및 gpasswd 프로그램의 소스 코드. 이러한 도구는 실행을 성공적으로 완료하기 위해 0으로 설정된 유효한 UID를 확인합니다. 하지만 저는 C 멍청한 놈이고 프로세스가 UID == 0으로 실행되는지 확인하는 코드 줄을 찾을 수 없습니다. 어떤 조언이나 해결책이라도 감사하겠습니다.
답변1
"shadow-utils" 구현을 언급하는 경우 passwd
테스트를 찾을 수 있습니다.여기:
/*
* The program behaves differently when executed by root than when
* executed by a normal user.
*/
amroot = (getuid () == 0);
에서 gpasswd
테스트는 다음 두 단계로 정의됩니다.UID가 저장됨:
/*
* Make a note of whether or not this command was invoked by root.
* This will be used to bypass certain checks later on. Also, set
* the real user ID to match the effective user ID. This will
* prevent the invoker from issuing signals which would interfere
* with this command.
*/
bywho = getuid ();
그런 다음amroot
거시적인:
/* Indicate if gpasswd was called by root */
#define amroot (0 == bywho)