Scroll to navigation

SETPRIV(1) Polecenia użytkownika SETPRIV(1)

NAZWA

setpriv - uruchamia program z innymi ustawieniami przywilejów linuksowych

SKŁADNIA

setpriv [opcje] program [argumenty]

OPIS

Ustawia lub odpytuje różne ustawienia przywilejów linuksowych, dziedziczonych poprzez execve(2).

W porównaniu do su(1) i runuser(1), setpriv nie używa PAM, ani nie pyta o hasło. Jest to proste opakowanie wokół execve(2), niekorzystające z set-user-ID, którym można obniżyć uprawnienia w ten sam sposób jak za pomocą setuidgid(8) z daemontools, chpst(8) z runit i podobnymi narzędziami dostarczanymi przez inne menedżery usług.

OPCJE

--clear-groups

Usuwa (czyści) grupy dodatkowe.

-d, --dump

Zrzuca aktualny stan przywilejów. Opcję można podać więcej niż raz aby pokazać dodatkowe, w większości bezużyteczne, informacje. Niekompatybilna ze wszystkimi innymi opcjami.

--groups grupa...

Ustawia grupy dodatkowe. Argument jest listą identyfikatorów lub nazw grup, rozdzielonych przecinkami.

--inh-caps (+|-)przywilej..., --ambient-caps (+|-)przywilej..., --bounding-set (+|-)przywilej...

Ustawia zbiory przywilejów dziedzicznych, tła lub ograniczających. Zob. capabilities(7). Argument jest listą, rozdzielonych przecinkiem, wpisów +przywilej i -przywilej, odpowiednio, dodających lub usuwających wpis. Przywilej może być czytelną dla człowieka nazwą widoczną w podręczniku systemowym capabilities(7), bez przedrostka cap_ albo w postaci cap_N, gdzie N jest wewnętrznym indeksem przywileju używanym przez Linuksa. Aby dodać lub usunąć wszystkie przywileje, można zastosować +all lub -all.

Zbiór przywilejów zaczyna się jako bieżący zbiór dziedziczny w przypadku --inh-caps, bieżący zbiór tła w przypadku --ambient-caps oraz bieżący zbiór ograniczający w przypadku --bounding-set.

Proszę zauważyć, że występują następujące ograniczenia (opisane szczegółowo w capabilities(7)) odnoszące się do modyfikacji tych zbiorów przywilejów:

•Można dodać przywilej do zbioru dziedzicznego tylko wtedy, gdy jest obecny w zbiorze ograniczającym.

•Można dodać przywilej do zbioru tła tylko wtedy, gdy jest obecny w zbiorze dozwolonym i dziedzicznym.

•Pomimo oferowania odpowiedniej składni przez setpriv, jądro nie pozwala na dodawanie przywilejów do zbioru ograniczającego.

Usunięcie przywileju ze zbioru ograniczającego, bez usuwania go ze zbioru dziedzicznego, może wprowadzić w konfuzję. Nie należy tego robić.

--keep-groups

Zachowuje grupy dodatkowe. Przydatne tylko w połączeniu z --rgid, --egid lub --regid.

--init-groups

Inicjuje grupy dodatkowe za pomocą initgroups3. Przydatne tylko w połączeniu z --ruid lub --reuid.

--list-caps

Wypisuje wszystkie znane przywileje. Opcję można podać tylko samodzielnie.

--nnp, --no-new-privs

Ustawia bit no_new_privs. Z tym bitem execve(2) nie będzie nadawało nowych przywilejów. Na przykład bity set-user-ID i set-group-ID oraz przywileje plikowe będą wyłączone (uruchomienie plików wykonywalnych z taki ustawionymi bitami wciąż będzie działało, jednak nie pozyskają one przywilejów. Niektóre linuksowe moduły bezpieczeństwa (LSM), szczególnie AppArmor, mogą spowodować niemożność uruchomienia pewnych programów). Bit jest dziedziczony przez procesy potomne i nie można go usunąć. Więcej informacji w prctl(2) oraz pliku Documentation/prctl/no_new_privs.txt w źródłach jądra Linux.

Bit no_new_privs jest obsługiwany od Linuksa 3.5.

--rgid gid, --egid gid, --regid gid

Ustawia rzeczywisty, efektywny lub oba identyfikatory grup. Argument gid można podać jako tekstową nazwę grupy.

Ze względów bezpieczeństwa, konieczne jest podanie jednej z opcji --clear-groups, --groups, --keep-groups lub --init-groups, jeśli ustawia się podstawowy gid.

--ruid uid, --euid uid, --reuid uid

Ustawia rzeczywisty, efektywny lub oba identyfikatory użytkownika. Argument uid można podać jako tekstową nazwę loginu.

Ustawienie uid lub gid nie zmienia przywilejów, choć końcowe wywołanie exec może je zmienić. Oznacza to, że będąc rootem prawdopodobnie zechce się wykonać coś takiego jak:

setpriv --reuid=1000 --regid=1000 --inh-caps=-all

--securebits (+|-)securebit...

Ustawia lub czyści securebity. Argument jest listą używającą przecinka jako separatora. Prawidłowe securebity to: noroot, noroot_locked, no_setuid_fixup, no_setuid_fixup_locked i keep_caps_locked. keep_caps jest czyszczony przez execve(2), dlatego nie jest tu dozwolony.

--pdeathsig keep|clear|<sygnał>

Utrzymuje, czyści lub ustawia sygnał śmierci rodzica. Niektóre linuksowe moduły bezpieczeństwa (LSM), w szczególności SELinux i AppArmor, czyszczą sygnał, gdy poświadczenia procesu ulegną zmianie. Zastosowanie --pdeathsig keep przywróci sygnał śmierci rodzica po zmianie poświadczeń, aby pomóc w takiej sytuacji.

--ptracer pid|any|none

Gdy działa ograniczony tryb ptrace Yama (tj. gdy /proc/sys/kernel/yama/ptrace_scope jest ustawiony na 1), pozwala na śledzenie za pomocą ptrace(2) przez: proces o podanym PID, dowolny proces lub żaden proces. Zob. PR_SET_PTRACER(2const) (proszę zauważyć, że nie jest to dziedziczone przez procesy potomne, choć jest zachowywane poprzez execve(2)). Opcja nie odnosi skutku, gdy Yama nie jest włączone albo jest w innym trybie niż ograniczone ptrace.

--selinux-label etykieta

Żąda określonego przejścia SELinux (korzystając z przejścia przy wykonaniu, nie za pomocą dynamicznego dyntrans). Zawiedzie i przerwie działanie setpriv, jeśli SELinux nie jest używany; ponadto przejście może być zignorowane lub spowodować niepowodzenie execve(2) w zależności od kaprysu SELinux (w szczególności prawdopodobnie nie zadziała w połączeniu z no_new_privs). Podobne do runcon(1).

--apparmor-profile profil

Żąda określonego profilu AppArmor (korzystając z przejścia przy wykonaniu). Zawiedzie i przerwie działanie setpriv, jeśli AppArmor nie jest używany; ponadto przejście może być zignorowane lub spowodować niepowodzenie execve(2) w zależności od kaprysu AppArmor.

--landlock-access dostęp

Włącza ograniczenia typu landlock do określonego typu dostępu systemowego. Aby pozwolić na określoną podgrupę dostępu, można użyć --landlock-rule.

Blokowanie wszelkiego dostępu do systemu plików:

setpriv --landlock-access fs

Blokowanie usuwania wszystkich plików i tworzenia katalogów:

setpriv --landlock-access fs:remove-file,make-dir

Pełen zbiór obsługiwanych kategorii dostępu pokaże opcja setpriv --help.

Ogólny symbol zastępczy "fs" może się zmienić i ulec rozszerzeniu w kolejnych wersjach, aby obsłużyć nowe typy dostępu.

--landlock-rule reguła

Dozwala na jeden dostęp z kategorii blokowanych przez --landlock-access.

Składnia jest następująca:

--landlock-rule $typ-reguły:$dostęp:$argument-reguły

Na przykład, aby nadać dostęp do odczytu wszystkiego pod katalogiem /boot:

--landlock-rule path-beneath:read-file:/boot

--seccomp-filter plik

Ładuje surowy kod filtra seccomp BPF z pliku.

Filtry można tworzyć na przykład za pomocą enosys.

--reset-env

•czyści wszystkie zmienne środowiskowe z wyjątkiem zmiennej środowiskowej TERM

•inicjuje zmienne środowiskowe HOME, SHELL, USER, LOGNAME zgodnie z wpisem passwd użytkownika

•zmienna środowiskowa SHELL domyślnie przyjmuje wartość /bin/sh, jeśli żadnej nie podano we wpisie passwd użytkownika.

•resetuje zmienną środowiskową PATH zgodnie z ustawieniami w pliku /etc/login.defs (zmienne ENV_PATH, ENV_SUPATH lub ENV_ROOTPATH) albo przyjmuje wartość domyślną /usr/local/bin:/bin:/usr/bin w przypadku zwykłego użytkownika oraz /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin dla roota.

Zmienna środowiskowa PATH może być odmienna w systemach, w których /bin i /sbin połączono z /usr.

-h, --help

Wyświetla ten tekst i wychodzi.

-V, --version

Wyświetla wersję i wychodzi.

UWAGI

Jeśli zastosowanie którejś z podanej opcji nie powiedzie się, program nie zostanie uruchomiony, a setpriv powróci ze statusem zakończenia 127.

Należy być ostrożnym przy używaniu niniejszego narzędzia — może spowodować nieprzewidziane konsekwencje związane z bezpieczeństwem. Na przykład ustawienie no_new_privs, a następnie wykonanie programu objętego ograniczeniami SELinux (jak zrobiłoby to narzędzie) może uniemożliwić zastosowanie restrykcji SELinux.

PRZYKŁADY

Note that setpriv is not a 1:1 replacement for su(1), runuser(1), or sudo(8). Unlike those tools, setpriv does not use PAM, does not prompt for a password, and does not perform session or accounting setup. The examples below provide a starting point for common privilege-dropping scenarios.

If you want to switch UIDs/GIDs similarly to runuser(1) (without --login), try:

setpriv --reuid=1000 --regid=1000 --inh-caps=-all --init-groups

To also reset the environment (as sudo(8) does by default), add --reset-env:

setpriv --reuid=1000 --regid=1000 --inh-caps=-all --init-groups --reset-env

For a more restrictive setup that also limits the bounding set and prevents gaining new privileges (more restrictive than runuser or sudo):

setpriv --reuid=1000 --regid=1000 --init-groups --inh-caps=-all --bounding-set=-all --no-new-privs --reset-env

Następujące polecenie odtworzy zachowanie setuid(8) z daemontools:

setpriv --reuid=1000 --regid=1000 --clear-groups

AUTORZY

Andy Lutomirski <luto@amacapital.net>

ZOBACZ TAKŻE

runuser(1), su(1), prctl(2), capabilities(7), landlock(7)

ZGŁASZANIE BŁĘDÓW

Problemy należy zgłaszać w systemie śledzenia błędów <https://github.com/util-linux/util-linux/issues>.

DOSTĘPNOŚĆ

Polecenie setpriv jest częścią pakietu util-linux, który można pobrać ze strony Archiwum jądra Linux <https://www.kernel.org/pub/linux/utils/util-linux/>.

2026-09-02 util-linux 2.42.3