Skąd możesz wiedzieć, czy wykonanie programu wymaga roota?


10

Rozumiem, że to trochę fundamentalne i być może głupie pytanie, ale nie udało mi się znaleźć odpowiedzi.

Rozumiem, że każdy plik ma "Executable"trochę.

Założyłem, że programy, które wymagają root, które są własnością rootużytkownika i rootgrupy, nie będą miały tego Executablebitu Otheri uniemożliwiłoby to użytkownikom innym niż root. Ale w /bini /sbinkatalogów widzę, że wszystkie pliki mają uprawnienia jak-rwxr-xr-x

Co tak naprawdę określa, czy użytkownik musi mieć uprawnienia roota, aby coś wykonać?


1
Domyślnie użytkownik lub dowolny użytkownik może uruchomić dowolny program z /binlub z /sbinkatalogó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.
Radu Rădeanu,

Odpowiedzi:


13

Czasami jest to w kodzie. Na przykład w połowie hwclock.cznajdziesz:

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 rmwywoł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 hwclockjest 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 ...


Więc w zasadzie jądro jest „za to odpowiedzialne”? Jeśli program wykona wywołanie systemowe, jądro określa, czy użytkownik uruchamiający program musi być rootem i wymusza to?
Dziekan

2
Zasadniczo tak. Program może wykonywać dodatkowe testy, ale sprawdzanie uprawnień odbywa się na poziomie jądra. Programy Setuid-root są wyjątkiem; działają zawsze jako root, więc sami muszą sprawdzić uprawnienia (i są ładną czcionką wad bezpieczeństwa ...)
Rmano
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.