Istnieje kilka podejść, niektóre z nich są w większości bezpieczne, inne wcale.
Niebezpieczny sposób
Niech każde użycie będzie działać mount
, np. Przez sudo. Równie dobrze możesz dać im korzeń; to jest to samo. Użytkownik może zamontować system plików z bash
suidową kopią root- run, która natychmiast daje root (prawdopodobnie bez żadnego logowania, poza faktem, że mount
został uruchomiony).
Alternatywnie, użytkownik może zamontować swój własny system plików na nim /etc
, zawierający własną kopię /etc/shadow
lub /etc/sudoers
, a następnie uzyskać root za pomocą su
lub sudo
. Lub ewentualnie bind-mount ( mount --bind
) na jednym z tych dwóch plików. Lub nowy plik do /etc/sudoers.d
.
Podobne ataki można było przeprowadzić w /etc/pam.d
wielu innych miejscach.
Pamiętaj, że systemy plików nie muszą nawet znajdować się na urządzeniu, -o loop
zamontuje plik, który jest własnością (a zatem może być modyfikowany) przez użytkownika.
Najbardziej bezpieczny sposób: udisk lub podobny
Różne środowiska pulpitu mają już wbudowane rozwiązania tego problemu, aby umożliwić użytkownikom montowanie nośników wymiennych. Działają one poprzez montowanie w podkatalogu /media
only i przez wyłączenie obsługi set-user / group-id poprzez opcje jądra. Opcje tu m.in. udisks
, udisks2
, pmount
, usbmount
,
Jeśli musisz, możesz napisać własny skrypt, aby zrobić coś podobnego i wywołać go przez sudo - ale musisz bardzo uważnie pisać ten skrypt, aby nie pozostawić exploitów root. Jeśli nie chcesz, aby użytkownicy pamiętali sudo, możesz zrobić coś takiego w skrypcie:
#!/bin/bash
if [ $UID -ne 0 ]; then # or `id -u`
exec sudo -- "$0" "$@"
fi
# rest of script goes here
Pewnego dnia będzie bezpieczny: przestrzenie nazw użytkowników
Przestrzenie nazw systemu Linux są bardzo lekką formą wirtualizacji (ściślej mówiąc, kontenerami). W szczególności dzięki przestrzeniom nazw użytkowników każdy użytkownik w systemie może stworzyć własne środowisko, w którym jest rootem. Umożliwiłoby to im montowanie systemów plików, z wyjątkiem tego, że zostało wyraźnie zablokowane, z wyjątkiem kilku wirtualnych systemów plików. W końcu systemy plików FUSE prawdopodobnie będą dozwolone, ale najnowsze łatki, które mogłem znaleźć , nie obejmują urządzeń blokowych, tylko takie rzeczy jak sshfs.
Ponadto wiele jąder dystrybucji domyślnie (ze względów bezpieczeństwa) nie zezwala nieuprzywilejowanym użytkownikom na używanie przestrzeni nazw użytkowników; na przykład Debian ma wartość kernel.unprivileged_userns_clone
domyślną 0. Inne dystrybucje mają podobne ustawienia, choć często o nieco innych nazwach.
Najlepsza dokumentacja, jaką znam na temat przestrzeni nazw użytkowników, to artykuł LWN Działające
przestrzenie nazw, część 5: Przestrzenie nazw użytkowników .
Na razie wybrałbym udisks2.
gvfs-mount
-d /dev/sdX