Како користити судо у Линуку и савладати судоерс датотеку

Последње ажурирање: Март КСНУМКС КСНУМКС
  • sudo вам омогућава да покрећете команде као root или други корисници са прецизном контролом дозвола.
  • Датотеке /etc/sudoers и /etc/sudoers.d дефинишу ко може да користи sudo и за које команде.
  • Висудо је безбедан начин за уређивање судоер датотека, избегавајући грешке које оштећују систем.
  • Командне групе и алијаси вам омогућавају да делегирате административне задатке без давања пуног приступа.

Коришћење команде sudo у Линуксу

Ако свакодневно користите Линукс, пре или касније ћете наићи на команду судоТо је тај префикс који видите испред многих важних команди, и скоро увек га прати захтев за лозинку. Добро разумејте шта ради, како функционише и које ризике носи. Кључно је да се случајно не поквари систем... и да се ради удобно без сталног преласка на root приступ.

Уместо директног пријављивања као суперкорисник, уобичајена (и препоручена) пракса је да задржите свој уобичајени кориснички налог и, само када је потребно, привремено повећајте привилегије знојемИза тог једноставног геста крије се читав систем контроле над дозволама, временима, групама и правилима у датотеци. /etc/sudoers што је вредно знати детаљније, посебно ако управљате са више корисника или сервера.

Шта је тачно судо у Линуксу?

Команда судо То је алат који омогућава кориснику да покреће програме као да је други корисник система, обично root (суперкорисник)али и било који други налог ако је тако конфигурисан. Иако се популарно каже да значи „суперкорисник ради“, многа документација такође алудира на идеју „замени корисника и уради“: да привремено замени корисника под којим се извршава команда.

У било којој модерној дистрибуцији (Debian, Ubuntu, деривати, многе засноване на SUSE-у, итд.), Sudo је унапред инсталиран и део је уобичајеног административног тока; можете се консултовати Трикови за софтвер на ЛинуксуСтандардни корисник ради са ограниченим дозволама, док налог корен Има потпуну контролу над системом. Коришћење команде sudo пружа средњу тачку: Одређени корисници могу обављати административне задатке без пријављивања као rootсмањење ризика и остављање јасног трага о томе шта је урађено.

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

Ова филозофија да се не ради увек као root је суштинска у безбедности. Што мање времена проводите са пуним привилегијама, мања је вероватноћа да ћете нешто покварити или да злонамерни софтвер искористи вашу сесију.Зато је судо тако истакнута карактеристика у свакодневном животу сваког Линукс администратора или напредног корисника.

Како судо функционише на практичном нивоу

Основна употреба је једноставна: постављате sudo испред команде коју желите да извршите са повећаним привилегијама. На пример, да бисте креирали корисника са обичног налога, користили бисте нешто попут sudo useradd nombreАко сте покушали да баците useradd Без команде sudo, највероватније бисте добили грешку у дозволама или поруку „Дозвола одбијена“.

Када позовете судо По први пут у терминалној сесији, систем ће вас питати лозинка корисника са којим сте пријављенине root лозинка (осим у посебним конфигурацијама у неким дистрибуцијама). Ако је правилно унесете и овлашћени сте у /etc/sudoersКоманда се извршава са привилегијама које су наведене у sudo правилима.

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

Све ово понашање је дефинисано и контролисано у датотеци. /etc/sudoers и у датотекама које су укључене у /etc/sudoers.d/. Само корисници и групе наведени тамо са одговарајућим дозволама могу покренути sudoОво омогућава веома фино подешавање ко може шта да ради, на којим машинама и под којим командама.

Општа синтакса команде sudo и кључне опције

Најчешћи начин коришћења судо-а је једноставан као:

sudo comando

У суштини, sudo прихвата неколико опција које вам омогућавају да проверите привилегије, видите верзију, присилите проверу лозинки и још много тога. Неке од најчешћих у многим дистрибуцијама су:

  • -h: приказује кратку поруку помоћи са синтаксом и главним опцијама доступним у sudo-у.
  • -V: приказује информације о верзији и детаље компилације sudo програма.
  • -v: обнавља „карту“ за аутентификацију, продужење рока важења без потребе за извршавањем саме привилеговане команде.
  • -k: поништава тренутне sudo привилегије, тако да ће следећи пут када га користите, тражити вашу лозинку без обзира на све.
  • -l: листа Које привилегије има тренутни корисник? у зависности од конфигурације Sudoers-а (које команде може да извршава, на којим хостовима, као који корисници итд.).

Одавде можете комбиновати sudo са практично било којом командом која захтева администраторске привилегије: Менаџери пакета, мрежни алати, системске услуге, услужни програми за корисничке налоге, промене власништва над датотекама... листа је практично бескрајна.

Практични примери коришћења судо-а

Једна од најчешћих операција која захтева повишена права јесте управљање софтверским пакетимаУ дистрибуцијама заснованим на SUSE-у, често се користи zypper, док се у Дебијану/Убунтуу користи следеће aptУ оба случаја, када операција мења систем (инсталирање, ажурирање, уклањање), потребан вам је sudo.

На пример, да бисте инсталирали пакет са zypper-ом, користили бисте нешто овако sudo zypper install nombre-paqueteи са прикладним нечим попут sudo apt-get update сегуидо де sudo apt-get upgradeАко покушате да ажурирате без команде sudo, видећете грешке у вези са закључавањем системских датотека или грешкама у дозволама, јер само корисник са одговарајућим привилегијама може да приступи тим директоријумима.

Још једна веома честа комбинација је зној са системцтлАлат за управљање сервисима на системима са systemd. Да бисте покренули или поново покренули сервис као што је Apache, на пример, користили бисте нешто попут sudo systemctl restart apache2Међутим, провера статуса сервиса, која не укључује измене, често се може обавити без sudo команде: systemctl status NetworkManager Обично је доступан са нормалним дозволама.

Када треба да измените корисничке налоге, класична команда је usermodДа, увек под напорима. На пример, могли бисте дефинишите број дана након истека лозинке пре него што се налог деактивира, са типом поруџбине sudo usermod -f 30 nombreusuario, где би 30 били дани марже.

Још једно подручје које је уско повезано са југом јесте Промените власништво над датотекама и директоријумима помоћу команде chownАко желите да одређени корисник постане власник целог стабла испод /home/test/tux-filesПокренули бисте нешто попут sudo chown -R tux /home/test/tux-filesЗатим, можете потврдити резултат помоћу ls -l да би се проверило да ли је својство исправно ажурирано.

Покрените команде као и други корисници са sudo (-u, -s, -i)

Поред извршавања команди као root, sudo омогућава покретање команди као и други одређени кориснициДа би се то урадило, користи се опција -uЈедноставан пример би био провера стварног корисника који извршава команду:

whoami враћа вашег тренутног корисника, док sudo -u pedro whoami Приказаће се „pedro“ ако вам конфигурација дозвољава да делујете као тај корисник. Ова метода је веома корисна за тестирање дозвола, путања или окружења без потребе за потпуним пријављивањем на тај налог.

Када желите интерактивна љуска Са високим привилегијама, долазе до изражаја две веома типичне варијанте: sudo -s y sudo -iПрви отвара љуску као циљни корисник, али наслеђивање окружења тренутног корисника (променљиве, тренутни директоријум, итд.). Други опонаша пријавну шкољку циљног корисника, учитавање његових покретачких скрипти и коришћење његовог директоријума $HOME.

На пример, ако покренете sudo -s -u tuxПојавили бисте се са љуском попут tux-а, али из директоријума у ​​којем сте били раније, са већим делом вашег окружења нетакнутим. Насупрот томе, са sudo -i -u tux Ушли бисте у сесију много сличније као да се Тукс пријавио директно, са својим профилима (.profile, .bash_profile, итд.) учитано.

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

Разлике између зноја и његовог

У Линуксу, оба su као судо Оне вам омогућавају да извршавате команде са привилегијама другог корисника, најчешће root-а, али начин рада са сваком од њих је прилично другачији. Разумевање ове разлике вам помаже да одлучите када да користите сваку опцију.

Команда su (замјенски корисник) се користи за пребацивање корисника унутар истог терминалаАко то урадите su pedroБићете замољени за Педрову лозинку; након што је унесете, ваш shell ће бити под тим налогом. Сесија оригиналног корисника не нестаје; она остаје „испод“ нове. Када куцате exitНапуштате Педрову сесију и враћате се на претходну.

Ако користиш su без навођења корисника, подразумевано Покушајте да пређете на root, тражећи root лозинку. Ово има значајан практични ефекат: многи људи на крају раде као root корисници дуже време, са свим ризицима које то носи, једноставно зато што је то практичније него стално куцање `sudo`.

Насупрот томе, Судо предлаже други приступ: Не мењате трајно своју сесију или корисника.Уместо тога, повећавате своје привилегије само за одређене команде (или одређену шкољку). Аутентификација се врши помоћу ваше сопствене лозинке, а контрола над тим ко шта може да ради се централно управља у sudoers-има.

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

Датотека /etc/sudoers: срж sudo конфигурације

Сво понашање команде sudo (ко може да је користи, као што су који корисници, на којим хостовима и са којим командама) је дефинисано у датотеци. /etc/sudoers и у датотекама укљученим одатле, обично помоћу директиве типа #includedir /etc/sudoers.dТо је веома осетљива датотека: Синтаксна грешка може вас оставити без судо-апа се са њим треба пажљиво руковати.

Типичан пример садржаја који ћете видети у sudoers-има је ред попут root ALL=(ALL:ALL) ALLТо значи да root корисник може да изврши било коју команду на било којој машини, баш као и сваки други корисник и група. Правила заснована на групама су такође уобичајена, као што је %sudo ALL=(ALL:ALL) ALL o %admin ALL=(ALL) ALL, где је префикс % указује да је то група унутар система.

Идеја је у томе сви корисници који су део sudo или admin групе Они наслеђују те привилегије за коришћење sudo-а. Стога, у Ubuntu-у, први корисник креиран током инсталације се обично аутоматски додаје у sudo групу, имајући пуне администраторске дозволе без потребе да директно користи root налог.

Још једна уобичајена пракса је да се избегава превише додиривања главне датотеке и уместо тога креирајте одређене датотеке унутар /etc/sudoers.d/Захваљујући линији #includedir /etc/sudoers.dБило која валидна датотека унутар тог директоријума се учитава као део укупне конфигурације sudoers-а, што олакшава организовање правила по сервисима, одељењима, пројектима итд.

Како безбедно уређивати судоер датотеке помоћу Висуда

Да бисте изменили sudoers, не можете га само отворити помоћу свог омиљеног едитора, јер Синтаксна грешка може блокирати судо и оставити вас у правом хаосу. Исправан начин је да увек користите команду visudo, који је одговоран за отварање датотеке у едитору (vi, nano, шта год да сте конфигурисали) и, приликом чувања, проверу исправности синтаксе пре примене промена.

Ако желите да измените главну датотеку, једноставно је покрените sudo visudoАко вам је потребно да креирате или измените одређену датотеку унутар /etc/sudoers.d/Ово можете назначити опцијом -f, на пример: sudo visudo -f /etc/sudoers.d/networkingОво одржава целокупну датотеку чистијом и смањује ризик од њеног оштећења.

Када прегледате sudoers, наићи ћете на многе коментарисане редове који почињу са #То су објашњења или правила онемогућенаЈедна посебно је често занимљива у неколико дистрибуција: она која почиње са %wheelАко уклоните # Из те линије, и ако додате кориснике у групу wheel, доделићете им sudo права у складу са оним што то правило налаже.

На основу искуства, добра је идеја да увек имате отворену још једну root сесију или конзолу са отвореном пречицом док радите на sudoer-има у случају да нешто крене наопако. Прекомерно знојење без алтернативног начина да се то исправи Може вас приморати да онемогућите коришћење повећаних привилегија са вашег уобичајеног корисничког налога, што вас приморава да прибегнете режимима спасавања.

Управљајте ко има sudo: групе и корисници

У свакодневној пракси, најпогоднији начин да се одлучи ко може да користи Судо са пуним овлашћењима је обично путем административне групеКао што је већ поменуто, веома је уобичајено имати групу која се зове sudo o admin o wheel, чија правила у судоерсима дају широке привилегије својим члановима.

Да бисте видели ко је део sudo групе у типичном систему, можете користити grep на /etc/groupНа пример, grep 'sudo' /etc/group Навешће кориснике који су тренутно у тој групи. То је брз начин да видите ко има потенцијални приступ командној линији sudo.

Ако желите одређеног корисника, рецимо меницаАко имате sudo привилегије, једна од опција је да га додате у одговарајућу групу користећи команде попут adduser bill sudo или еквивалент у вашој дистрибуцији. Од тог тренутка, и према правилима sudoers-а за ту групу, Бил ће моћи да користи sudo као и остали администратори.

Слично томе, ако у било ком тренутку треба да опозовете те дозволе, можете га уклонити из групе, на пример помоћу deluser bill sudoКада се та операција заврши, Бил више неће моћи да извршава радње које захтевају sudo, осим ако нема неко додатно специфично правило у sudoers-у.

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

Доделите одређене дозволе помоћу sudoers-а (без давања „слободне руке“)

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

Замислите да желите да направите групу, на пример netadmin, чији чланови могу да извршавају одређене мрежне команде (као што су tcpdump или управљање веб сервером) са привилегијама, али ништа више. Можете дефинисати алијасе команди у датотеци од /etc/sudoers.d/ овог типа, користећи Висудо за његово уређивање.

Унутар те датотеке, алијаси се могу декларисати као Cmnd_Alias CAPTURE = /usr/sbin/tcpdump за снимање саобраћаја или псеудоним Cmnd_Alias SERVERS = /usr/sbin/apache2ctl, /usr/bin/htpasswd да управља веб сервером и повезаним лозинкама. Затим, општији алиас као што је NETALL = CAPTURE, SERVERS Комбинује обоје.

Одатле, правило %netadmin ALL=NETALL Ово указује да сваки корисник у netadmin групи може да изврши све команде укључене у NETALL (тј. оне у CAPTURE и SERVERS) помоћу sudo. Следећи корак би био додавање корисника bill у netadmin групу са нечим попут sudo adduser bill netadmin, и спреман.

Кључ је у томе Само те специфичне команде ће бити извршене са привилегијамаАко Бил покуша да користи sudo за било шта што није обухваћено NETALL-ом, систем ће то одбити. Ово је веома препоручљив приступ када желите да дистрибуирате техничке одговорности без давања пуног администраторског приступа.

Дозволите судо без лозинке у веома специфичним случајевима

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

Најбезбеднији начин да се ово реши јесте да се та команда енкапсулира у скрипта у власништву root-а, са ограниченим дозволамаНа пример, креирате comando.sh, а затим прилагођавате његовог власника и дозволе нечим попут sudo chown root:root comando.sh y sudo chmod 700 comando.shНа тај начин, само root може да га мења и покреће.

Затим, у sudoers-у, дефинишете правило тако да дотични корисник може да га изврши comando.sh Без лозинке. Нешто попут nombredeusuario ALL=(ALL) NOPASSWD: /home/nombredeusuario/comando.sh То би омогућило том кориснику да покрене скрипту са sudo без тражења лозинке.

Важно је инсистирати на томе Није препоручљиво злоупотребљавати NOPASSWD правилаСваки пут када дозволите `sudo` без лозинке, отварате врата која би могла бити искоришћена ако неко добије приступ кориснику или манипулише контекстом у којем се команда извршава. Најбоље је користити их само за веома специфичне и проверене случајеве.

Чак и тако, за понављајуће и аутоматизоване задатке или за одређене високо контролисане команде, ова техника је изузетно практична. Кључ је у ограничавању обима: Боље је одобрити sudo без лозинке веома специфичној команди него комплетном интерпретатору команди..

Алтернативе и допуне за sudo: DOAS и други приступи

Постаје популаран у неким круговима. уради као као лагана алтернатива командној линији „sudo“. Његова филозофија је слична (дозвољава извршавање команди са привилегијама другог корисника), али са једноставнија конфигурација и веома мали бинарни фајл, нешто што се посебно добро уклапа у минималистичке системе.

DOAS се обично не инсталира подразумевано, па бисте га морали додати из менаџера пакета, а затим креирати конфигурациону датотеку. /etc/doas.confЈедноставан пример правила би био нешто попут овог: permit nopass manz, што овлашћује корисника manz да користи DOAS без уноса лозинке ради подизања привилегија на администраторске.

За разлику од команде sudoers, где можете дефинисати алијасе и прилично сложена правила, doas се одлучује за мањи скуп директивадајући приоритет једноставности. Можете подесити одређене дозволе, експлицитно забранити, ограничити команде итд., али без исте количине „процвата“ коју sudo дозвољава.

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

Који год алат да се изабере, основна идеја је иста: не ради као root све времеали користите контролисане механизме ескалације привилегија, са јасним правилима и евиденцијама о томе шта се ради.

Уз све ово, јасно је да је команда sudo много више од обичног префикса испред „опасних“ команди: То је централна компонента безбедности и свакодневне администрације у Линуксу.Разумевање ваших опција, савладавање датотеке sudoers, знање када је користити, како ограничити одређене команде или када дозволити изузетке без лозинке даје вам много бољу контролу над вашим системом и оним што други корисници могу да раде на њему.

Трикови за софтвер на Линуксу
Повезани чланак:
Трикови за софтвер за Линукс: команде, апликације и кључни савети