Czasami jest to w kodzie. Na przykład w połowie hwclock.c
znajdziesz:
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."));
[...]
co zmieni zachowanie programu, jeśli jesteś rootem lub nie.
W większości innych przypadków jest to domniemane; delegowane do jądra. Na przykład, jeśli program wywoła wywołanie systemowe, które pozwala na ponowne uruchomienie systemu, będzie działać tylko wtedy, gdy jesteś rootem. Jeśli nie jesteś rootem, pojawi się błąd „odmowa uprawnień”, który aplikacja (jeśli jest dobrze napisana) po prostu zgłasza. Lub próbujesz usunąć plik; jeśli masz do tego odpowiednie uprawnienia, plik się powiedzie; jeśli nie, zależy to od tego, czy jesteś rootem czy nie --- kiedy rm
wywołania unlink()
jądro sprawdzi uprawnienia.
Więc nie, w zasadzie nie można powiedzieć, że patrząc tylko na uprawnienia pliku wykonywalnego, jeśli program wymaga uprawnień roota, czy nie. Wiele programów będzie wymagało ich tylko do niektórych operacji, więc zrobienie czegoś takiego będzie naprawdę trudne. Sprawa hwclock
jest jeden (każdy może czytać zegar ale tylko root może to zmienić), ale są ich setki ( kill
, rm
, cat
...)
Potem jest powiązany i interesujący świat programów setuidowych ...
/bin
lub z/sbin
katalogów. Problem polega na tym, że niektóre z tych programów działają inaczej w zależności od tego, który użytkownik je uruchamia.