루트가 아닌 사용자로 비밀번호를 변경하려고 합니다.
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
이므로 root
이 setuid
비트로 인해 프로그램이 루트 권한으로 실행됩니다. 따라서 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 라이브러리의 일부입니다.