루트가 아닌 계정에 대해 성공적으로 passwd 명령을 수행하는 방법

루트가 아닌 계정에 대해 성공적으로 passwd 명령을 수행하는 방법

루트가 아닌 사용자로 비밀번호를 변경하려고 합니다.

passwd 

데이터는 /etc/shadow에서 업데이트되지만 내가 받은 권한을 확인하세요.

---------- 1 root root 6076 Jan 27 17:14 /etc/shadow
cat /etc/shadow
cat: /etc/shadow: Permission denied

분명히 passwd 명령이 성공하더라도 파일에 대한 권한이 아무도 없으며 권한이 없는 리소스(섀도 파일)에 데이터를 간접적으로 업데이트하고 있는 것입니다! 그렇다면 백그라운드 업데이트 메커니즘을 누가 설명할 수 있습니까? 시스템콜에 대한 설명을 참고하시면 도움이 될 것입니다.

답변1

유틸리티 passwd가 설치되었습니다 setuid. 이는 실행될 때 실행된다는 의미입니다.파일을 소유한 사용자로서, 사용자가 호출하는 것이 아니라. 이 경우 passwd이므로 rootsetuid비트로 인해 프로그램이 루트 권한으로 실행됩니다. 따라서 passwd및 파일을 shadow변경할 수 있습니다 .

유틸리티의 권한을 살펴보면 passwd다음과 같은 내용이 표시됩니다.

-r-sr-xr-x  2 root  wheel   8.2K 19 Jan 17:24 /usr/bin/passwd

이것은 내 FreeBSD 시스템에서 가져온 것입니다. 표시되는 내용은 사용 중인 운영 체제에 따라 다릅니다. s이 비트는 소유자 실행 위치(열 4)로 표시됩니다 setuid.

추가 참조를 위해 시스템 호출은 setuid표준 C 라이브러리의 일부입니다.

관련 정보