언젠가는 코드에 있습니다. 예를 들어의 중간에 hwclock.c
다음이 있습니다.
if (getuid() == 0)
permitted = TRUE;
else {
/* program is designed to run setuid (in some situations) */
if (set || systohc || adjust) {
warnx(_("Sorry, only the superuser can change "
"the Hardware Clock."));
[...]
루트 여부에 관계없이 프로그램의 동작이 변경됩니다.
대부분의 경우 암시 적입니다. 커널에 위임되었습니다. 예를 들어, 프로그램이 시스템 을 재부트 할 수 있는 시스템 호출 을 호출 하면 루트 인 경우에만 작동합니다. 루트가 아닌 경우 응용 프로그램 (잘 작성된 경우)이 단순히 사용자에게보고하는 "권한 거부"오류가 발생합니다. 또는 파일을 삭제하려고합니다. 파일에 대한 올바른 권한이 있으면 성공합니다. 그렇지 않은 경우, 루트인지 아닌지에 따라 다릅니다. --- rm
호출 할 때 unlink()
커널이 권한을 확인합니다.
따라서 원칙적으로 프로그램에 루트 권한이 필요한지 여부는 실행 파일의 권한을 보는 것만으로는 말할 수 없습니다. 많은 프로그램은 일부 작업에만 필요하므로 그러한 작업을 수행하는 것은 실제로 어려울 것입니다. 의 경우 hwclock
하나 (사람이 시계를 읽을 수 있지만 루트를 설정할 수 있습니다)이지만, 그 중 수백이있다 ( kill
, rm
, cat
...)
그러면 setuid 프로그램 의 관련되고 흥미로운 세계가 있습니다 ...
/bin
또는/sbin
디렉터리를. 문제는 해당 프로그램 중 일부가 실행중인 사용자에 따라 다르게 실행되고 있다는 것입니다.