Команда 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“.