Како користити СУИД, СГИД и Стицки Битс на Линук-у

СУИД (Set User ID), СГИД (Set Group ID) и стицки бит су посебне дозволе које се могу применити на извршне датотеке и директоријуме у Линукс окружењу. У овом тексту размотрићемо њихове предности, али и потенцијалне проблеме који могу настати приликом њихове употребе.

Уобичајена употреба

Имплементација безбедности у окружењима са више корисника је сложен задатак. Један од примера је чување лозинки. Лозинке морају бити сачуване на начин који омогућава систему да упореди унету лозинку са сачуваном при свакој пријави. Лозинке, као кључеви система, морају бити добро заштићене.

У Линуксу, сачуване лозинке су заштићене на два начина: шифроване су и само корисници са роот привилегијама могу приступити датотеци у којој се лозинке чувају. Ово ствара проблем: како корисници који немају роот приступ могу да промене сопствене лозинке?

Повећање привилегија

Линукс команде и програми обично се извршавају са истим дозволама као и корисник који их покреће. Када роот корисник покрене команду passwd, ради са роот дозволама. То значи да команда passwd може слободно приступити сачуваним лозинкама у датотеци /etc/shadow.

Идеално решење би било да сваки корисник може да покрене програм passwd, а да тај програм задржи повишене роот привилегије. Ово би омогућило сваком кориснику да промени своју лозинку.

Управо то омогућава Сет Усер ИД (СУИД) бит. Он омогућава програмима и командама да се извршавају са дозволама власника датотеке, а не са дозволама корисника који их покреће. На тај начин програм привремено добија привилеговани статус.

Статус програма

Међутим, остаје проблем: корисници не смеју да могу да мењају лозинке других корисника. Линукс користи СУИД механизам који омогућава покретање апликација са позајмљеним дозволама, али то није цела прича.

Контролни механизам који спречава злоупотребу лозинки налази се у програму passwd, а не у самом оперативном систему. Програми који раде са повишеним привилегијама могу представљати безбедносне ризике ако нису пажљиво дизајнирани. Сигурност мора бити на првом месту приликом писања таквог кода.

Предност отвореног кода је што је увек могуће прегледати изворни код. У изворном коду програма passwd налазе се провере које утврђују да ли програм покреће роот корисник. У зависности од тога, извршавају се различите операције.

Ово је код који утврђује да ли је корисник роот.

Пошто роот може мењати било чије лозинке, програм прескаче одређене провере. За роот корисника, програм прескаче одређене провере и излази из функције провере.

Са основним Линукс командама и алатима, можемо бити сигурни да је сигурност уграђена у њих и да је код прегледан више пута. Наравно, увек постоји претња од непознатих пропуста. Међутим, закрпе и ажурирања се брзо појављују како би се решили новооткривени безбедносни проблеми.

Са софтвером трећих страна – посебно оним који није отвореног кода – треба бити опрезан када се користи СУИД бит. Не кажемо да га не користите, али, ако га користите, морате бити сигурни да неће угрозити ваш систем. Не желите да повећате привилегије програма који неће правилно управљати самим собом и корисником који га покреће.

Линукс команде са СУИД битом

Следе неке Линукс команде које користе СУИД бит да би добиле повишене привилегије када их покреће обичан корисник:

ls -l /bin/su
ls -l /bin/ping
ls -l /bin/mount
ls -l /bin/umount
ls -l /usr/bin/passwd

Имена датотека су означена црвеном бојом, што указује на то да је СУИД бит постављен.

Дозволе за датотеку или директоријум представљене су са три групе од по три знака: rwx. Ово означава читање (read), писање (write) и извршавање (execute). Ако су слова присутна, дозвола је одобрена. Ако је уместо слова цртица (-), дозвола није одобрена.

Постоје три групе дозвола (с лева на десно): за власника датотеке, чланове групе датотеке и за остале кориснике. Када је СУИД бит постављен на датотеци, „s“ замењује дозволу за извршење власника.

Ако је СУИД бит постављен на датотеку која нема дозволу за извршавање, велико „S“ означава то.

Погледајмо пример. Корисник „dave“ укуцава команду passwd:

passwd

Команда passwd тражи од Давеа да унесе нову лозинку. Користићемо команду ps да видимо детаље покренутих процеса.

Користићемо ps заједно са grep у другом терминал прозору и потражићемо passwd процес. Користићемо опције -e (сваки процес) и -f (пун формат) са ps.

Укуцавамо следећу команду:

ps -e -f | grep passwd

Приказана су два реда. Други ред је grep процес који тражи команде са ниском „passwd“. Први ред је оно што нас занима, јер приказује passwd процес који је покренуо Даве.

Видимо да passwd процес ради као да га је покренуо роот.

Постављање СУИД бита

СУИД бит се лако мења помоћу команде chmod. Симболички режим u+s поставља СУИД бит, а u-s га брише.

Да бисмо илустровали концепт СУИД бита, направили смо мали програм под називом htg. Он се налази у почетном директоријуму корисника Даве и нема постављен СУИД бит. Када се покрене, приказује стварне и ефективне корисничке ИД-ове (УИД).

Стварни УИД припада кориснику који је покренуо програм. Ефективни УИД је налог са којим се програм понаша као да је покренут.

Укуцавамо следеће:

ls -lh htg
./htg

Када покренемо локалну копију програма, видимо да су стварни и ефективни ИД-ови постављени на „dave“. Дакле, понаша се онако како би нормалан програм требао.

Копирајмо га у /usr/local/bin директоријум како би други могли да га користе.

Укуцавамо следеће, користећи chmod да поставимо СУИД бит, а затим проверавамо да ли је постављен:

sudo cp htg /usr/local/bin
sudo chmod u+s /usr/local/bin/htg
ls -hl /usr/local/bin/htg

Дакле, програм је копиран и СУИД бит је постављен. Поново ћемо га покренути, али овог пута покрећемо копију у /usr/local/bin директоријуму:

htg

Иако је Даве покренуо програм, ефективни ИД је постављен на роот корисника. Дакле, ако Марија покрене програм, дешава се иста ствар, као што је приказано у наставку:

htg

Прави ИД је Мари, а ефективни ИД је роот. Програм ради са дозволама роот корисника.

СГИД бит

Сет Гроуп ИД (СГИД) бит је врло сличан СУИД биту. Када је СГИД бит постављен на извршној датотеци, ефективна група се поставља на групу датотеке. Процес се покреће са дозволама чланова групе датотеке, а не са дозволама корисника који га је покренуо.

Променићемо групу htg програма у подразумевану групу корисника Мари, Мари. Такође ћемо користити u-s и g+s симболичке режиме са chown командом да уклонимо СУИД бит и поставимо СГИД.

Да бисмо то урадили, укуцавамо следеће:

sudo chown root:mary /usr/local/bin/htg
sudo chmod u-s,g+s /usr/local/bin/htg
ls -lh /usr/local/bin/htg

Можете видети СГИД бит означен са „s“ у групним дозволама. Такође, група је подешена на „mary“ и име датотеке је означено жутом бојом.

Пре него што покренемо програм, хајде да утврдимо којој групи припадају Дејв и Мери. Користићемо команду id са опцијом -G (групе), да одштампамо све ИД-ове групе. Затим ћемо покренути htg програм као даве.

Укуцавамо следеће команде:

id -G dave
id -G mary
htg

ИД подразумеване групе за мари је 1001, а ефективна група програма htg је 1001. Дакле, иако га је покренуо Дејв, он ради са дозволама чланова групе Мари. То је исто као да се Даве придружио Мари групи.

Хајде да применимо СГИД бит на директоријум. Прво ћемо креирати директоријум под називом „work“, а затим променити његову групу у „geek“. Затим ћемо поставити СГИД бит у директоријум.

Када користимо ls да проверимо подешавања директоријума, користићемо опцију -d (директоријум) тако да видимо детаље директоријума, а не његов садржај.

Укуцавамо следеће команде:

sudo mkdir work
sudo chown dave:geek work
sudo chmod g+s work
ls -lh -d work

СГИД бит и група „geek“ су постављени. Ово ће утицати на све ставке креиране у радном директоријуму.

Укуцавамо следеће да бисмо ушли у радни директоријум, креирали директоријум под називом „demo“ и проверавали његова својства:

cd work
mkdir demo
ls -lh -d demo

СГИД бит и група „geek“ се аутоматски примењују на „demo“ директоријум.

Укуцајмо следеће да креирамо датотеку са touch командом и проверимо њена својства:

touch useful.sh
ls -lh useful.sh

Група нове датотеке је аутоматски подешена на „geek“.

Стицки бит

Стицки бит је добио име по својој историјској намени. Када је постављен на извршној датотеци, оперативни систем је означавао да делове текста извршне датотеке треба држати у размени, што убрзава њихову поновну употребу. У Линуксу, стицки бит утиче само на директоријуме, постављање на датотеку не би имало никаквог ефекта.

Када поставите стицки бит на директоријум, корисници могу да бришу само датотеке које им припадају унутар тог директоријума. Не могу да бришу датотеке које припадају некоме другом, без обзира на то која је комбинација дозвола за датотеке постављена.

Ово вам омогућава да креирате директоријум који сви – и процеси које покрећу – могу да користе као дељено складиште датотека. Датотеке су заштићене јер нико не може да обрише туђе датотеке.

Хајде да направимо директоријум под називом „shared“. Користићемо симболички режим o+t са командом chmod да поставимо стицки бит у том директоријуму. Затим ћемо погледати дозволе за тај директоријум, као и за директоријуме /tmp и /var/tmp.

Укуцавамо следеће команде:

mkdir shared
sudo chmod o+t shared
ls -lh -d shared
ls -lh -d /tmp
ls -lh -d /var/tmp

Ако је стицки бит постављен, извршни бит „осталих“ дозвола за датотеке је постављен на „t“. Име датотеке је такође означено плавом бојом.

Директоријуми /tmp и /var/tmp су примери директоријума који имају све дозволе за датотеке постављене за власника, групу и остале (зато су означени зеленом бојом). Користе се као дељене локације за привремене датотеке.

Са тим дозволама, свако би теоретски требало да буде у могућности да ради било шта. Међутим, стицки бит превазилази то и нико не може да обрише датотеку која му не припада.

Подсетник

Следи кратак подсетник онога што смо обрадили изнад:

СУИД ради само на датотекама.
Можете применити СГИД на директоријуме и датотеке.
Стицки бит можете применити само на директоријуме.
Ако се индикатори „s“, „g“ или „t“ појављују великим словима, извршни бит (x) није постављен.