setuid și setgid (prescurtare pentru set user ID upon execution și set group ID upon execution ) sunt semnalizatoare de permisiune Unix care permit utilizatorilor să ruleze fișiere executabile cu drepturile proprietarului sau grupului fișierului executabil.
Pe sisteme de tip Unix , aplicația este rulată cu drepturile utilizatorului care a invocat aplicația specificată. Acest lucru oferă securitate suplimentară, deoarece un proces de utilizator nu poate obține acces de scriere la fișiere de sistem importante, cum ar fi /etc/passwd , care este deținut de root .
Dacă fișierul executabil are setat bitul suid, atunci când este executat, acest program schimbă automat „ID utilizator efectiv” cu identificatorul utilizatorului care deține acest fișier. Adică, indiferent de cine rulează acest program, acesta are drepturile proprietarului acestui fișier atunci când este executat.
Suid bit a fost inventat de Dennis Ritchie și brevetat în SUA de AT&T în 1979. Ulterior, brevetul 4135240 „Protecția conținutului fișierului de date” a fost eliberat publicului.
Când atributul set u id este setat pe un fișier , utilizatorul obișnuit care rulează acel fișier este ridicat la utilizatorul proprietar al fișierului (de obicei root ) în cadrul procesului de rulare . Odată ridicată, o aplicație poate îndeplini sarcini pe care un utilizator normal nu le-ar putea îndeplini. Utilizatorul va fi împiedicat de către sistem să modifice noul proces. Din cauza posibilității unei condiții de concurență, multe sisteme de operare ignoră atributul set la scripturile shell. .
În timp ce atributul set u id este foarte util în multe cazuri, utilizarea greșită a acestuia poate reprezenta un risc de securitate atunci când atributul este atribuit unui executabil care nu este proiectat cu grijă. Utilizatorii pot exploata vulnerabilitățile din programele subdezvoltate pentru a obține privilegii ridicate sau pot rula din neatenție un program troian .
Setarea atributului set g id oferă cota grupului .
Atributele setuid și setgid sunt de obicei setate cu comanda chmod prin setarea primei perechi de biți la 4 (set u id) sau 2 (set g id). Comanda va chmod 6711seta, respectiv, ambele perechi de biți simultan (4+2=6). De asemenea, puteți utiliza argumente de caractere pentru a seta acești biți cu chmod ug+s.
Biții setuid și setgid setați pentru directoare au un înțeles foarte diferit.
Bitul g id setat pe un director ( chmod g+s) face ca numai directoarele și fișierele noi create în el să moștenească ID-ul de grup al acelui director în loc de ID-ul de grup al utilizatorului care a creat fișierul. Noile subdirectoare moștenesc, de asemenea, bitul setgid. Acest lucru vă permite să creați un spațiu de lucru partajat pentru un grup fără ca membrii grupului să fie nevoiți să-și schimbe în mod explicit grupul curent pentru a crea fișiere și directoare noi.
Moștenirea este setată numai pentru fișiere și directoare noi. Fișierele și directoarele deja existente trebuie să setați acest bit manual, de exemplu:
găsiți /calea/către/director -type d -exec chmod g+s {} \;De asemenea, rețineți că pentru toți utilizatorii unui astfel de grup, umask -ul trebuie schimbat de la valoarea implicită de 0022 la 0012, altfel noile fișiere/foldere nu vor avea permisiunea de scriere (w) pentru grup.
Bitul setuid setat pentru directoare este ignorat în majoritatea versiunilor de Unix .
Setarea biților suid/sgid pe fișierele neexecutabile este în general inutilă.
Un program cu bitul setuid setat este „potențial periculos”. În cazul „normal”, acesta nu va permite unui utilizator normal să facă nimic dincolo de autoritatea sa (de exemplu, programul passwd va permite utilizatorului doar să-și schimbe propria parolă). Dar, chiar și o eroare minoră într-un astfel de program poate duce la faptul că un atacator îl poate forța să efectueze alte acțiuni care nu sunt furnizate de autorul programului.