Permisos de fitxers a Linux

Hola a tots. Estem treballant activament i ja estem preparant molts llançaments potents al gener. Entre d'altres, s'ha anunciat la inscripció per a un nou flux del curs preferit de tothom. "Administrador Linux". En previsió del llançament, tradicionalment compartim traduccions de material útil.

Permisos de fitxers a Linux

Els permisos de fitxer ofereixen una alternativa segura als executables SUID, però al principi poden semblar una mica confús.


Tots sabem que els binaris SUD són mala decisió des del punt de vista de la seguretat. Afortunadament, si la vostra aplicació requereix alguns privilegis limitats, hi ha una manera més eficient de trucar permisos dels fitxers.

Us estalviaré una mica de temps si voleu evitar llegir l'article anterior amb detall: bàsicament, els permisos de fitxer permeten processos que s'executen com a root i, per tant, poden fer alguna cosa per conservar determinades capacitats, limitades. aquesta llistaquan baixen privilegis i són executats per un usuari sense privilegis. Això vol dir que si un atacant aconsegueix comprometre un procés mitjançant un desbordament de memòria intermèdia o una altra explotació, no podrà aprofitar res més que certs privilegis mínims que realment necessita el procés.

Els permisos són excel·lents per als serveis que normalment s'executen sempre com a root, però què passa amb les utilitats de la línia d'ordres? Afortunadament, això també és compatible sempre que tingueu instal·lades les utilitats adequades. Si utilitzeu Ubuntu, per exemple necessitareu el paquet libcap2-bin. També haureu d'executar un nucli no arcaic (de la versió 2.6.24).

Aquestes funcions permeten associar permisos amb fitxers executables, de manera similar a la configuració del bit SUID, però només per a un conjunt específic de permisos. Utilitat setcap s'utilitza per afegir i eliminar permisos d'un fitxer.

El primer pas és seleccionar els permisos que necessiteu. Pel bé d'aquest article, suposo que hi ha una eina de diagnòstic de xarxa anomenada tracewalk, que hauria de poder utilitzar endolls en brut. Això normalment requereix que l'aplicació s'executi com a root, però quan es visualitzi la llista resulta que només cal permís CAP_NET_RAW.

Suposant que esteu al directori on es troba el binari tracewalk, podeu afegir aquest permís així:

sudo setcap cap_net_raw=eip tracewalk

Ignoreu el sufix de moment =eip per resoldre'l, en parlaré en un parell de segons. Tingueu en compte que el nom del permís està en minúscules. Ara podeu comprovar si heu configurat els permisos correctament amb:

setcap -v cap_new_raw=eip tracewalk

O podeu llistar tots els permisos establerts per a un executable determinat:

getcap tracewalk

Com a referència, també podeu eliminar tots els permisos de l'executable amb:

setcap -r tracewalk

En aquest punt, hauríeu de poder executar l'executable com a usuari sense privilegis, i hauria de poder treballar amb sòcols en brut, però no tenir cap dels altres privilegis que té l'usuari root.

Aleshores, què significa aquest sufix estrany? =eip? Això requereix una certa comprensió de la naturalesa dels permisos. Cada procés té tres conjunts de permisos − eficaç, heretable i permesa:

  • Eficaç Els permisos són aquells que defineixen el que un procés pot fer realment. Per exemple, no pot tractar amb sòcols en brut si CAP_NET_RAW no està en el conjunt efectiu.
  • Disponible els permisos són aquells que pot tenir un procés si els sol·licita mitjançant la trucada corresponent. Impedeixen que un procés faci res tret que s'ha escrit específicament per sol·licitar aquest permís. Això us permet escriure processos per afegir permisos crítics al conjunt efectiu només durant el període en què realment es necessiten.
  • Heretable els permisos són els que es poden heretar al conjunt accessible del procés fill generat. Durant la cirurgia fork() o clone() el procés fill sempre rep una còpia dels permisos del procés pare, ja que encara està executant el mateix executable en aquell moment. S'utilitza un conjunt heretable quan exec() (o equivalent) es crida per substituir el fitxer executable per un altre. En aquest punt, el conjunt disponible del procés queda emmascarat pel conjunt heretat per obtenir el conjunt accessible que s'utilitzarà per al nou procés.

Així que la utilitat setcap ens permet afegir els permisos d'aquests tres conjunts de manera independent per a un executable determinat. Tingueu en compte que el significat dels grups s'interpreta de manera lleugerament diferent per als permisos de fitxers:

  • Disponible Els permisos de fitxer són els que sempre estan disponibles per a un fitxer executable, encara que el procés principal que l'ha cridat no els tingui. Abans s'anomenaven permisos "forçats".
  • Heretat els permisos de fitxer defineixen una màscara addicional que també es pot utilitzar per eliminar els permisos del conjunt del procés de trucada. S'apliquen a més del conjunt heretat del procés de trucada, de manera que el permís només s'hereta si existeix als dos conjunts.
  • Eficaç els permisos dels fitxers són en realitat només un bit, no un conjunt, i si s'estableixen, vol dir que tot el conjunt disponible també es copia al conjunt efectiu del nou procés. Això es pot utilitzar per afegir permisos als processos que no s'han escrit específicament per sol·licitar-los. Com que és un bit, si el configureu per a qualsevol permís, s'ha de configurar per a tots els permisos. Podeu considerar-lo com un bit heretat perquè s'utilitza per permetre que les aplicacions que no els admeten puguin utilitzar permisos.

Quan s'especifiquen els permisos mitjançant setcap tres lletres e, i и p consulteu eficaç, heretable i accessible conjunts respectivament. Per tant, l'especificació anterior:

sudo setcap cap_net_raw=eip tracewalk

...indica que la resolució CAP_NET_RAW s'ha d'afegir als conjunts disponibles i heretables i que també s'ha d'establir el bit efectiu. Això anul·larà els permisos establerts anteriorment al fitxer. Per establir diversos permisos alhora, utilitzeu una llista separada per comes:

sudo setcap cap_net_admin,cap_net_raw=eip tracewalk

Guia de permisos parla de tot això amb més detall, però esperem que aquesta publicació hagi desmitificat una mica el que està passant. Només queden algunes advertències i trucs per esmentar.

En primer lloc, les capacitats dels fitxers no funcionen amb els enllaços simbòlics: els heu d'aplicar al fitxer binari (és a dir, l'objectiu de l'enllaç simbòlic).

En segon lloc, no funcionen amb guions interpretats. Per exemple, si teniu un script de Python al qual voleu assignar permís, heu d'assignar-lo al mateix intèrpret de Python. Òbviament, aquest és un problema de seguretat potencial perquè aleshores tots els scripts executats amb aquest intèrpret tindran el permís especificat, tot i que això encara és molt millor que fer-lo SUID. La solució més habitual sembla ser escriure un executable separat en C o equivalent que pugui realitzar les operacions necessàries i cridar-lo des d'un script. Això és similar a l'enfocament utilitzat per Wireshark que utilitza un binari /usr/bin/dumpcap per realitzar operacions privilegiades:

$ getcap /usr/bin/dumpcap 
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip

En tercer lloc, els permisos dels fitxers es desactiven si utilitzeu una variable d'entorn LD_LIBRARY_PATH per raons de seguretat evidents(1). El mateix s'aplica a LD_PRELOAD, pel que jo sé.

1. Atès que un atacant, òbviament, pot substituir una de les biblioteques estàndard i utilitzar-la LD_LIBRARY_PATHper forçar a cridar la seva biblioteca amb preferència a la del sistema i, per tant, tenir el seu propi codi arbitrari executat amb els mateixos privilegis que l'aplicació trucant.

Això és tot. Podeu trobar més detalls sobre el programa del curs a webinar, que tindrà lloc el 24 de gener.

Font: www.habr.com

Afegeix comentari