SETPRIV(1)

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

REZUMAT

setpriv [opțiuni] program [argumente]

DESCRIERE

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.

OPȚIUNI

--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ă.

--nnp, --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.

    Substituentul generic „sistem-fișier” este susceptibil de modificare și poate fi extins în versiunile viitoare pentru a oferi suport pentru noi tipuri de acces.

--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 variabilei de mediu TERM

        • inițializează variabilele de mediu HOME, SHELL, USER, LOGNAME conform intrării passwd a utilizatorului

        • variabila de mediu SHELL are ca valoare implicită /bin/sh în cazul în care nu este specificată în intrarea passwd a utilizatorului.

        • reinițializează variabila de mediu PATH în conformitate cu configurarea din /etc/login.defs (ENV_PATH, ENV_SUPATH sau ENV_ROOTPATH), sau utilizează valorile implicite /usr/local/bin:/bin:/usr/bin pentru un utilizator obișnuit și /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin pentru root.

        Variabila de mediu PATH poate fi diferită pe sistemele în care directoarele /bin și /sbin sunt integrate în /usr.

-h, --help
    Afișează acest mesaj de ajutor și iese.

-V, --version
    Afișează versiunea și iese.

NOTE

Î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.

EXEMPLE

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

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

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

AUTORI

CONSULTAȚI ȘI

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

RAPORTAREA ERORILOR

Pentru rapoarte de eroare, folosiți

DISPONIBILITATE

Comanda setpriv face parte din pachetul util-linux care poate fi descărcat de la