Како контролисати судо приступ на Линук-у

Команда sudo омогућава вам извршавање команди на Линукс систему са привилегијама другог корисника, укључујући и администратора, познатог као root. Поред тога, sudo пружа могућност детаљне контроле над тим ко може приступати root могућностима, омогућавајући додељивање пуног приступа или само ограниченог скупа команди. У наставку ћемо објаснити како се то постиже.

sudo и root привилегије

У Линук окружењу, све (или скоро све) се третира као датотека. Скоро сваки елемент оперативног система, било да је то процес, датотека, директоријум, сокет или цев, комуницира са језгром система преко дескриптора датотека. Овај принцип „све је датотека“ је фундаменталан за начин на који Линукс и Уник системи функционишу.

Овај концепт има далекосежне импликације, посебно у погледу дозвола приступа. Дозволе за датотеке у Линук систему су кључне за управљање привилегијама корисника. Власник датотеке или директоријума може слободно да манипулише њима – да их уређује, преименује, премешта или брише. Такође, власник може подесити дозволе тако да други корисници или групе имају могућност читања, измене или извршавања датотеке. Сви корисници, осим једног.

Један корисник је изузетак од свих ограничења – root, или суперкорисник. Root налог је привилегован налог који није ограничен дозволама приступа. Root корисник може да изврши било коју акцију над било којим ресурсом у систему, у било ком тренутку. Ово, наравно, представља значајан ризик.

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

Препоручени приступ је да се пријавите са стандардним корисничким налогом, а затим да користите sudo када вам је потребно привремено подизање привилегија. У већини случајева, ово укључује извршавање једне команде.

Листа sudoers

sudo је подразумевано инсталиран на већини модерних Линукс дистрибуција, укључујући Ubuntu 18.04.3, Manjaro 18.1.0 и Fedora 31 које су коришћене приликом писања овог чланка. sudo је стандардни начин за добијање root приступа још од раних 1980-их.

Приликом инсталирања Линукс дистрибуције, кориснички налог који креирате током инсталације бива додат на листу sudoers. То су корисници који имају дозволу за коришћење команде sudo. Када имате sudo привилегије, можете додавати и друге кориснике на ову листу.

Међутим, давање неограниченог root приступа није препоручљиво. Листа sudoers вам омогућава да прецизно дефинишете које команде су корисницима дозвољене да извршавају са sudo привилегијама. На тај начин, можете им омогућити да изврше неопходне задатке, без давања пуних администраторских овлашћења.

Извршавање команде као други корисник

Иако је sudo првобитно значио „superuser do“, данас је његова функционалност проширена. Можете користити sudo за извршавање команде као било који корисник. Назив је промењен да би одражавао нову намену – „substitute user do“.

Да бисте покренули команду као други корисник, користите опцију -u (user). На пример, следећа команда извршава whoami као корисник „mary“. Уколико се опција -u изостави, команда ће бити извршена као root.

sudo -u mary whoami

Одговор команде whoami показује да је команда извршена као корисник „mary“.

Такође, можете користити sudo за пријављивање као други корисник, без да знате његову лозинку. Систем ће захтевати вашу лозинку, не лозинку корисника на којег се пребацујете. Користите опцију -i (login) у комбинацији са -u:

sudo -i -u mary
pwd
whoami
ls -hl
exit

Сада сте пријављени као корисник „mary“. Корисничке датотеке попут „.bashrc“, „.bash_aliases“ и „.profile“ се извршавају као да се корисник „mary“ сам пријавио.

Командна линија се мења да одрази сесију корисника „mary“. Команда pwd показује да сте у кућном директоријуму корисника „mary“, whoami потврђује да је активни корисник „mary“, а приказане датотеке припадају кориснику „mary“. Команда exit враћа вас у вашу нормалну корисничку сесију.

Уређивање sudoers датотеке

За додавање корисника на листу корисника који могу користити sudo, потребно је изменити датотеку sudoers. Важно је да се ова датотека уређује искључиво помоћу команде visudo. Ова команда спречава истовремено уређивање датотеке од стране више корисника. Такође, visudo врши проверу синтаксе датотеке пре њеног чувања.

Уколико ваше измене не прођу провере, датотека неће бити сачувана без ваше потврде. Добићете могућност да откажете промене, вратите се на уређивање или на силу сачувате неисправну датотеку, што никако није препоручљиво. У супротном ризикујете да сви изгубе могућност коришћења sudo.

Иако процес уређивања покрећете са visudo, сама команда није уређивач текста. Она користи један од ваших постојећих уређивача за промену датотеке. На Manjaro и Ubuntu системима, visudo покреће једноставан nano уређивач, док на Fedora систему користи vim.

Ако желите да користите nano на Fedora систему, можете га инсталирати са:

sudo dnf install nano

Затим се visudo може позвати са:

sudo EDITOR=nano visudo

Ово је одличан кандидат за псеудоним. Сада се nano уређивач отвара са учитаном sudoers датотеком.

Додавање корисника у sudo групу

Користите visudo да отворите sudoers датотеку. Можете користити или ову команду или ону горе описану да бисте дефинисали уређивач по вашем избору:

sudo visudo

Померите се кроз sudoers датотеку док не видите дефиницију за унос %sudo.

Симбол процента (%) означава да је ово дефиниција групе, а не корисника. У неким дистрибуцијама, линија %sudo може имати симбол хаша (#) на почетку, што је чини коментаром. Уколико је то случај, уклоните # и сачувајте датотеку.

Линија %sudo се тумачи на следећи начин:

  • %sudo: – Назив групе.
  • ALL=: – Ово правило се односи на све хостове у мрежи.
  • (ALL:ALL): – Чланови ове групе могу извршавати команде као сви корисници и све групе.
  • ALL: – Чланови ове групе могу извршавати све команде.

Другим речима, чланови ове групе могу извршити било коју команду, као било који корисник или група, на овом рачунару или било којем другом хосту у мрежи. Дакле, једноставан начин да се некоме доделе root привилегије и могућност коришћења sudo је додавање у sudo групу.

Имамо два корисника, Том и Мери, са налозима „tom“ и „mary“. Додаћемо налог „tom“ у sudo групу користећи команду usermod. Опција -G (groups) дефинише групу у коју ће „tom“ бити додан, док -a (append) додаје ту групу на листу група у којима се „tom“ већ налази. Без опције -a, корисник „tom“ би био постављен у нову групу и уклоњен из свих претходних.

sudo usermod -a -G sudo tom

Хајде да проверимо у којим групама се налази Мери:

groups

Корисник „mary“ се налази само у групи „mary“.

Сада проверимо Тома:

groups

Корисник „tom“, а самим тим и Том, припада групама „tom“ и „sudo“.

Хајде да покушамо да Мери уради нешто што захтева sudo привилегије.

sudo less /etc/shadow

Мери не може да приступи ограниченој датотеци „/etc/shadow“. Добија поруку о грешци због покушаја коришћења sudo без дозволе. Сада погледајмо Тома:

sudo less /etc/shadow

Након уноса лозинке, Тому је приказан садржај датотеке „/etc/shadow“.

Само додавањем у sudo групу, Том је добио неограничен приступ sudo команди.

Давање корисницима ограничених sudo права

Том је добио пуна sudo права. Он може да уради све што може да уради root – или било ко други у sudo групи. Понекад је потребно да корисник изврши функцију која захтева root привилегије, али није потребан пуни sudo приступ. Ову равнотежу можете постићи додавањем корисника у sudoers датотеку и навођењем команде које може да користи.

Упознајмо се са Харијем, власником корисничког налога „harry“. Он није у sudo групи и нема sudo привилегије.

groups

Корисно је да Хари може да инсталира софтвер, али не желимо да има пуна sudo права. Зато ћемо покренути visudo:

sudo visudo

Крећите се надоле кроз датотеку док не прођете дефиниције група. Сада ћемо додати линију за Харија. Пошто је ово дефиниција корисника, а не групе, не морамо започињати линију са симболом процента (%).

Унос за кориснички налог „harry“ је:

harry    ALL=/usr/bin/apt-get

Обратите пажњу да је између „harry“ и „ALL=“ коришћен таб.

Ово говори да кориснички налог „harry“ може да користи наведене команде на свим хостовима повезаним на ову мрежу. У овом случају, наведена је једна команда: „/usr/bin/apt-get“. Можемо доделити Харију приступ више од једне команде додавањем команди на листу, одвојених зарезима.

Додајте ову линију у sudoers датотеку и сачувајте је. Ако желите да проверите да ли је линија исправна, можемо користити visudo са опцијом -c (check only):

sudo visudo -c

Врши се провера и visudo извештава да је све у реду. Хари би сада требало да може користити apt-get за инсталацију софтвера, али не и било коју другу команду која захтева sudo.

sudo apt-get install finger

Хари има додељена одговарајућа sudo права и може да инсталира софтвер.

Шта се дешава ако Хари покуша да користи другу команду која захтева sudo?

sudo shutdown now

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

Коришћење sudoers корисничких алиаса

Ако желимо да дамо Мери исте привилегије, могли бисмо додати линију у sudoers датотеку за кориснички налог „mary“, на исти начин као што смо урадили са Харијем. Међутим, елегантнији начин да се то постигне је коришћењем User_Alias.

У sudoers датотеци, User_Alias садржи листу корисничких налога. Име User_Alias може се користити у дефиницији за представљање свих наведених корисника. Ако треба да промените привилегије ових корисничких налога, имаћете само једну линију за уређивање.

Хајде да направимо User_Alias и користимо га у sudoers датотеци.

sudo visudo

Померите се надоле у датотеци до линије User_Alias:

Додајте User_Alias куцањем:

User_Alias INSTALLERS = harry, mary

Сваки елемент је одвојен размаком, а не табулатором. Ово има следећу структуру:

  • User_Alias: – Говори visudo да је ово User_Alias.
  • INSTALLERS: – Ово је произвољан назив за овај алиас.
  • = harry, mary: – Листа корисника који су укључени у алиас.

Сада ћемо уредити линију коју смо претходно додали за кориснички налог „harry“:

harry    ALL=/usr/bin/apt-get

Промените је у:

INSTALLERS    ALL=/usr/bin/apt-get

Ово говори да сви кориснички налози из дефиниције „INSTALLERS“ User_Alias могу извршавати команду apt-get. Сада можемо тестирати ово са Мери, која би сада требало да може да инсталира софтвер.

sudo apt-get install colordiff

Мери може да инсталира софтвер јер се налази у INSTALLERS User_Alias-у и том кориснику су додељена ова права.

Три брза sudo трика

Када заборавите да додате sudo на почетак команде, откуцајте:

sudo !!

И последња команда ће се поновити са sudo на почетку.

Када користите sudo и аутентификујете се лозинком, нећете морати поново да је уносите наредних 15 минута. Ако желите да се аутентификација одмах заборави, користите:

sudo -k

Питате се где можете видети неуспеле покушаје sudo команде? Они се бележе у датотеци „/var/log/auth.log“.