Provided by: manpages-ro-dev_4.27.0-1_all bug

NUME

       capget, capset - stabilește/obține capacitățile firului (firelor)

BIBLIOTECA

       Biblioteca C standard (libc, -lc)

SINOPSIS

       #include <linux/capability.h> /* Definirea constantelor CAP_*
                                        și _LINUX_CAPABILITY_* */
       #include <sys/syscall.h>      /* Definirea constantelor SYS_* */
       #include <unistd.h>

       int syscall(SYS_capget, cap_user_header_t hdrp,
                   cap_user_data_t datap);
       int syscall(SYS_capset, cap_user_header_t hdrp,
                   const cap_user_data_t datap);

       Notă: Nu există nicio funcție învăluitoare (wrapper) glibc pentru aceste apeluri de sistem astfel că este
       necesară utilizarea a syscall(2).

DESCRIERE

       Aceste  două  apeluri  de  sistem  reprezintă  interfața  brută a nucleului pentru obținerea și definirea
       capacităților firelor.  Nu numai că aceste apeluri  de  sistem  sunt  specifice  Linux-ului,  dar  API-ul
       nucleului  este  posibil  să  se  schimbe  și  utilizarea  acestor apeluri de sistem (în special formatul
       tipurilor cap_user_*_t) este supusă extinderii cu fiecare revizuire a nucleului, dar programele vechi vor
       continua să funcționeze.

       Interfețele portabile sunt cap_set_proc(3) și cap_get_proc(3); dacă este posibil, ar trebui să  utilizați
       aceste interfețe în aplicații; a se vedea secțiunea NOTE.

   Detalii actuale
       Acum  că  ați  fost  avertizați, câteva detalii despre nucleul curent. Structurile sunt definite după cum
       urmează.

           #define _LINUX_CAPABILITY_VERSION_1  0x19980330
           #define _LINUX_CAPABILITY_U32S_1     1

                   /* V2 adăugată în Linux 2.6.25; depreciată */
           #define _LINUX_CAPABILITY_VERSION_2  0x20071026
           #define _LINUX_CAPABILITY_U32S_2     2

                   /* V3 adăugată în Linux 2.6.26 */
           #define _LINUX_CAPABILITY_VERSION_3  0x20080522
           #define _LINUX_CAPABILITY_U32S_3     2

           typedef struct __user_cap_header_struct {
              __u32 version;
              int pid;
           } *cap_user_header_t;

           typedef struct __user_cap_data_struct {
              __u32 effective;
              __u32 permitted;
              __u32 inheritable;
           } *cap_user_data_t;

       Câmpurile effective,  permitted  și  inheritable  sunt  măști  de  biți  ale  capacităților  definite  în
       capabilities(7).  Rețineți că valorile CAP_* sunt indexuri de biți și trebuie să fie deplasate înainte de
       a fi adăugate în câmpurile de biți. Pentru a  defini  structurile  care  trebuie  transmise  apelului  de
       sistem,  trebuie  să  utilizați  numele  struct __user_cap_header_struct și struct __user_cap_data_struct
       deoarece typedefs sunt doar indicatori.

       Nucleele   anterioare   Linux   2.6.25   preferă   capacitățile   pe   32   de    biți    cu    versiunea
       _LINUX_CAPABILITY_VERSION_1.   Linux  2.6.25  a  adăugat seturi de capacități pe 64 de biți, cu versiunea
       _LINUX_CAPABILITY_VERSION_2.   A  existat,  totuși,  o  eroare  API,   iar   Linux   2.6.26   a   adăugat
       _LINUX_CAPABILITY_VERSION_3 pentru a rezolva problema.

       Rețineți  că capacitățile pe 64 de biți utilizează datap[0] și datap[1], în timp ce capacitățile pe 32 de
       biți utilizează numai datap[0].

       Pe nucleele care oferă suport pentru capacitățile fișierelor (suport  pentru  capacitățile  VFS),  aceste
       apeluri  de  sistem se comportă ușor diferit. Acest suport a fost adăugat ca opțiune în Linux 2.6.24 și a
       devenit fix (neopțional) în Linux 2.6.33.

       Pentru apelurile capget(), se pot sonda capacitățile oricărui proces prin specificarea  ID-ului  acestuia
       cu valoarea câmpului hdrp->pid.

       Pentru detalii privind datele, consultați capabilities(7).

   Cu suport pentru capacitățile VFS
       Capacitățile  VFS  utilizează un atribut extins de fișier (a se vedea xattr(7)) pentru a permite atașarea
       capacităților la executabile.  Acest model de privilegii elimină  suportul  nucleului  pentru  stabilirea
       asincronă  de  către un proces a capacităților altuia.  Adică, pe nucleele care acceptă capacitățile VFS,
       atunci când se apelează capset(), singurele valori permise  pentru  hdrp->pid  sunt  0  sau,  echivalent,
       valoarea returnată de gettid(2).

   Fără suport pentru capacitățile VFS
       În  cazul  nucleelor  mai vechi care nu oferă suport pentru capacitățile VFS, capset() poate fi utilizat,
       dacă apelantul are capacitatea CAP_SETPCAP, pentru a modifica nu numai capacitățile  apelantului,  ci  și
       capacitățile  altor  fire. Apelul operează asupra capacităților firului specificat de câmpul pid din hdrp
       atunci când acesta este diferit de zero, sau asupra capacităților firului apelant dacă pid este  0.  Dacă
       pid  se  referă  la  un  proces  cu  un  singur  fir,  atunci  pid poate fi specificat ca un ID de proces
       tradițional; operarea asupra unui fir al unui proces cu mai multe fire necesită un ID  de  fir  de  tipul
       celui  returnat  de gettid(2). Pentru capset(), pid poate fi de asemenea: -1, ceea ce înseamnă efectuarea
       modificării pe toate firele de execuție, cu excepția apelantului și a lui init(1); sau o valoare mai mică
       decât -1, caz în care modificarea se aplică tuturor membrilor grupului de procese al cărui ID este -pid.

VALOAREA RETURNATĂ

       În caz de succes, se returnează zero. În caz de eroare, se returnează  -1,  iar  errno  este  configurată
       pentru a indica eroarea.

       Apelurile  eșuează  cu eroarea EINVAL și definesc câmpul version din hdrp la valoarea preferată de nucleu
       _LINUX_CAPABILITY_VERSION_?  atunci când este specificată o valoare version neacceptată. În acest fel, se
       poate afla care este revizuirea curentă preferată a capacității.

ERORI-IEȘIRE

       EFAULT Adresă de memorie greșită. hdrp nu trebuie să fie NULL.  datap poate fi  NULL  numai  atunci  când
              utilizatorul  încearcă  să  determine  formatul  preferat  al versiunii capacităților acceptate de
              nucleu.

       EINVAL Unul dintre argumente nu a fost valid.

       EPERM  S-a încercat adăugarea unei capacități la setul permis sau  definirea  unei  capacități  în  setul
              efectiv care nu este în setul permis.

       EPERM  S-a încercat să se adauge o capacitate la setul moștenit și fie:

              •  capacitatea respectivă nu se afla în setul de limitare al apelantului; fie

              •  capacitatea  nu  se  afla  în  setul  permis  al  apelantului  și apelantul nu avea capacitatea
                 CAP_SETPCAP în setul său efectiv.

       EPERM  Apelantul a încercat să utilizeze capset() pentru a modifica capacitățile unui alt fir de execuție
              decât el însuși, dar nu avea suficiente privilegii.  Pentru  nucleele  care  acceptă  capacitățile
              VFS,  acest  lucru  nu  este  permis  niciodată.  Pentru  nucleele  fără suport VFS, este necesară
              capacitatea CAP_SETPCAP. O eroare în nucleele anterioare Linux 2.6.11 a făcut ca această eroare să
              poată apărea și în cazul în care un fir fără această capacitate încerca să își  schimbe  propriile
              capacități  specificând  câmpul  pid  ca  o  valoare diferită de zero (adică valoarea returnată de
              getpid(2)) în loc de 0.

       ESRCH  Nu există un astfel de fir.

STANDARDE

       Linux.

NOTE

       Interfața portabilă pentru funcțiile de interogare și definire a capacităților este oferită de biblioteca
       libcap și este disponibilă aici:
       http://git.kernel.org/cgit/linux/kernel/git/morgan/libcap.git

CONSULTAȚI ȘI

       clone(2), gettid(2), capabilities(7)

TRADUCERE

       Traducerea   în   limba   română   a   acestui   manual   a   fost   făcută   de   Remus-Gabriel    Chelu
       <remusgabriel.chelu@disroot.org>

       Această  traducere  este  documentație  gratuită;  citiți  Licența publică generală GNU Versiunea 3 sau o
       versiune  ulterioară  cu  privire  la  condiții  privind  drepturile  de  autor.   NU  se   asumă   NICIO
       RESPONSABILITATE.

       Dacă  găsiți  erori  în  traducerea  acestui manual, vă rugăm să trimiteți un e-mail la translation-team-
       ro@lists.sourceforge.net.

Pagini de manual de Linux 6.9.1                    2 mai 2024                                          capget(2)