SETPRIV(1) Comenzi utilizator SETPRIV(1)

setpriv - rulează un program cu diferite configurări de privilegii Linux

setpriv [opțiuni] program [argumente]

Stabilește sau interoghează diverse configurări de privilegii Linux care sunt moștenite de execve(2).

În comparație cu su(1) și runuser(1), setpriv nu utilizează PAM și nici nu solicită o parolă. Este un simplu învăluitor care nu stabilește ID-ul de utilizator în jurul lui execve(2) și poate fi utilizat pentru a scădea privilegiile în același mod ca setuidgid(8) din daemontools, chpst(8) din runit sau instrumente similare furnizate de alți administratori de servicii.

--clear-groups

Șterge grupurile suplimentare.

-d, --dump

Afișează starea actuală a privilegiilor. Această opțiune poate fi specificată de mai multe ori pentru a afișa informații suplimentare, de cele mai multe ori inutile. Incompatibilă cu toate celelalte opțiuni.

--groups grup...

Stabilește grupurile suplimentare. Argumentul este o listă de GID-uri sau nume separate prin virgule.

--inh-caps (+|-)capacități..., --ambient-caps (+|-)capacități..., --bounding-set (+|-)capacități...

Stabilește capacitățile moștenite, capacitățile ambientale sau setul de limitare a capacităților. A se vedea capabilities(7). Argumentul este o listă de intrări +capacități și -capacități, separate prin virgule, care adaugă sau, respectiv, elimină o intrare. capacități poate fi fie un nume interpretabil de către om, așa cum se vede în capabilities(7), fără prefixul capacități, fie în formatul cap_N, unde N este indexul intern al capacităților utilizat de Linux. +all și -all pot fi utilizate pentru a adăuga sau a elimina toate capacitățile.

Setul de capacități începe cu setul moștenit curent pentru --inh-caps, setul ambiental curent pentru --ambient-caps și setul de limitare curent pentru --bounding-set.

Rețineți următoarele restricții [detaliate în capabilities(7)] privind modificările aduse acestor seturi de capacități:

•O capacitate poate fi adăugată la setul moștenit numai dacă este prezentă în prezent în setul limitator.
•O capacitate poate fi adăugată la setul „ambient” numai dacă este prezentă atât în setul permis, cât și în setul moștenit.
•În pofida sintaxei oferite de setpriv, nucleul nu permite adăugarea de capacități la setul limitator.

Dacă renunțați la o capacitate din setul delimitator fără a o elimina, de asemenea, din setul moștenit, este posibil să vă confundați. Nu faceți acest lucru.

--keep-groups

Păstrează grupurile suplimentare. Utilă numai în combinație cu --rgid, --egid sau --regid.

--init-groups

Inițializează grupurile suplimentare folosind initgroups3. Utilă numai în combinație cu --ruid sau --reuid.

--list-caps

Listează toate capacitățile cunoscute. Această opțiune trebuie să fie specificată singură.

--no-new-privs

Activează bitul no_new_privs. Cu acest bit activat, execve(2) nu va acorda noi privilegii. De exemplu, vor fi dezactivați biții set-user-ID și set-group-ID, precum și capacitățile de fișier (executarea binarelor cu acești biți activați va funcționa în continuare, dar nu vor obține privilegii; anumite LSM-uri, în special AppArmor, pot duce la eșecuri în executarea anumitor programe). Acest bit este moștenit de procesele-copil și nu poate fi dezactivat. A se vedea prctl(2) și Documentation/prctl/no_new_privs.txt în sursa nucleului Linux.

Bitul no_new_privs este acceptat începând cu Linux 3.5.

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

Stabilește GID-ul real, efectiv sau ambele GID-uri. Argumentul gid poate fi dat ca un nume de grup textual.

Pentru siguranță, trebuie să specificați una dintre următoarele opțiuni: --clear-groups, --groups, --keep-groups sau --init-groups dacă stabiliți vreun gid primar.

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

Stabilește UID-ul real, efectiv sau ambele. Argumentul uid poate fi dat sub forma unui nume de autentificare textual.

Stabilirea unui uid sau gid nu modifică capacitățile, deși apelul exec de la sfârșit ar putea modifica capacitățile. Acest lucru înseamnă că, dacă sunteți root, probabil doriți să faceți ceva de genul:

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

--securebits (+|-)bit-securitate...

Activează sau dezactivează biții-de-securitate. Argumentul este o listă separată prin virgule. Biții-de-securitate valizi sunt noroot, noroot_locked, no_setuid_fixup, no_setuid_fixup_locked și keep_caps_locked. keep_caps este eliminat de execve(2) și, prin urmare, nu este permis.

--pdeathsig keep|clear|<semnal>

Păstrează, șterge sau activează semnalul de moarte al părintelui. Unele LSM-uri, în special SELinux și AppArmor, șterg semnalul atunci când se schimbă acreditările procesului. Folosind --pdeathsig keep se va restabili semnalul de moarte al părintelui după schimbarea acreditărilor pentru a remedia această situație.

--ptracer pid|any|none

Atunci când modul restricționat ptrace „restricted ptrace” al Yama este în vigoare (adică atunci când /proc/sys/kernel/yama/ptrace_scope este definit la 1), permite urmărirea prin ptrace(2) de către procesul cu PID specificat, de către orice proces sau de către niciun proces. A se vedea PR_SET_PTRACER(2const). Rețineți că această opțiune nu este moștenită de procesele copil, deși este păstrată prin execve(2). Această opțiune nu are niciun efect atunci când Yama nu este activat sau este într-un alt mod decât „restricted ptrace”.

--selinux-label eticheta

Solicită o anumită tranziție SELinux (folosind o tranziție pe exec, nu dyntrans). Acest lucru va eșua și va face ca setpriv să eșueze dacă SELinux nu este utilizat, iar tranziția poate fi ignorată sau poate face ca execve(2) să eșueze, după bunul plac al lui SELinux (în special, este puțin probabil ca acest lucru să funcționeze împreună cu no_new_privs). Acest lucru este similar cu runcon(1).

--apparmor-profile profil

Solicită un anumit profil AppArmor (utilizând o tranziție pe execuție). Acest lucru va eșua și va face ca setpriv să fie anulat dacă AppArmor nu este utilizat, iar tranziția poate fi ignorată sau poate face ca execve(2) să eșueze, în funcție de capriciul lui AppArmor.

--landlock-access acces

Activează restricțiile landlock pentru un set specific de accesări ale sistemului. Pentru a permite subgrupuri specifice de accese, utilizați --landlock-rule.

Blochează orice acces la sistemul de fișiere:

setpriv --landlock-access sistem-fișiere

Blochează toate ștergerile de fișiere și crearea de directoare:

setpriv --landlock-access sistem-fișier:fișier-de eliminat,make-dir

Pentru un set complet de categorii de acces acceptate, utilizați setpriv --help.

--landlock-rule regulă

Permite un anumit acces din categoriile blocate de --landlock-access.

Sintaxa este următoarea:

--landlock-rule $ruletype:$access:$rulearg

De exemplu, acordați acces de citire a fișierelor la tot ce se află sub /boot:

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

--seccomp-filter fișier

Încarcă codul filtrului BPF seccomp brut dintr-un fișier.

Filtrele pot fi create, de exemplu, cu enosys.

--reset-env

Șterge toate variabilele de mediu, cu excepția TERM; inițializează variabilele de mediu HOME, SHELL, USER, LOGNAME în funcție de parola utilizatorului; definește PATH la /usr/local/bin:/bin:/usr/bin pentru un utilizator obișnuit și la /usr/local/sbin:/usr/local/bin:/sbin:/bin:/bin:/usr/sbin:/usr/bin pentru root.

Variabila de mediu PATH poate fi diferită pe sistemele în care /bin și /sbin sunt comasate în /usr. Variabila de mediu SHELL are ca valoare implicită /bin/sh în cazul în care nu este specificată în parola de acces a utilizatorului.

-h, --help

Afișează acest mesaj de ajutor și iese.

-V, --version

Afișează versiunea și iese.

În cazul în care aplicarea oricărei opțiuni specificate eșuează, program nu va fi executat, iar setpriv va termina cu starea de ieșire 127.

Aveți grijă cu acest instrument - poate avea consecințe neașteptate asupra securității. De exemplu, dacă definiți no_new_privs și apoi executați un program care este limitat de SELinux (așa cum ar face acest instrument), este posibil ca restricțiile SELinux să nu își facă efectul.

Dacă sunteți în căutarea unui comportament similar cu su(1)/runuser(1), sau sudo(8) (fără opțiunea -g), încercați ceva de genul:

setpriv --reuid=1000 --regid=1000 --init-groups

Dacă doriți să imitați setuid(8) de la daemontools, încercați:

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

Andy Lutomirski <luto@amacapital.net>

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

Pentru rapoarte de eroare, folosiți sistemul de urmărire al erorilor https://github.com/util-linux/util-linux/issues.

Comanda setpriv face parte din pachetul util-linux care poate fi descărcat de la Linux Kernel Archive https://www.kernel.org/pub/linux/utils/util-linux/.

2025-03-29 util-linux 2.41