
Ja ikdienā strādājat ar LinuxAgrāk vai vēlāk jūs sastapsities ar komandu sudoTā ir atslēga, kas ļauj veikt administratīvus uzdevumus, nepiesakoties kā lietotājam. root Visu laiku, kas ir ne tikai neērti, bet arī diezgan bīstami. Izpratne par to, kā tas darbojas, kādas ir tā iespējas un kā to konfigurēt, ir ļoti svarīga, ja nevēlaties nejauši uzlauzt sistēmu vai atstāt drošības ievainojamību, to neapzinoties.
Šajā rakstā mēs iedziļināsimies detaļās. Par ko tieši ir runa? sudoKādas ir tā attiecības ar lietotāju? root un ar failu /etc/sudoersKādas ir atšķirības starp lietošanu su y sudoun kā jūs varat precīzi pielāgot iestatījumus, lai piešķirtu ļoti specifiskas atļaujas (pat neprasot paroli) noteiktiem lietotājiem vai grupām. Doma ir tāda, ka, kad pabeigsiet lasīt, jums būs ļoti skaidrs, kad lietot sudoKo tas dara zem tā un kā to kontrolēt bez bailēm.
Kas ir sudo un kāpēc tas ir tik svarīgs Linux sistēmā?
Komanda sudo Tas ir viens no galvenajiem elementiem jebkuras mūsdienu Linux sistēmas. Tās nosaukums parasti tiek skaidrots kā “superlietotāja uzdevums” vai “aizstāt lietotāju un veikt uzdevumu”, un tās funkcija ir vienkārša, bet jaudīga: tā ļauj pilnvarotam lietotājam izpildīt komandas tā, it kā viņš būtu cits sistēmas lietotājs, parasti rootuz ierobežotu laiku.
Praksē tas nozīmē ka parasts lietotājs var veikt administratīvus uzdevumus — instalēt pakotnes, mainīt sistēmas iestatījumus, pārvaldīt pakalpojumus, mainīt sensitīvu failu atļaujas — bez piesakieties tieši kā rootŠī atdalīšana starp parasto lietotāju un superlietotāju ir viens no drošības pīlāriem operētājsistēmā Linux.
Lielākā daļa pašreizējo izplatījumu (Debian, Ubuntu, daudzi atvasinājumi, SLE tipa sistēmas utt.) nodrošina sudo Tas ir iepriekš instalēts, un nav ieteicams to atinstalēt vai vieglprātīgi mainīt. Turklāt daudzās sistēmās instalēšanas laikā izveidotais lietotājs tiek automātiski pievienots administratīvajai grupai, kurai ir atļauja to lietot. sudo, kļūstot par noklusējuma privilēģiju lietotāju.
Kaut kas ļoti svarīgs, kas jāpatur prātā ir tāds, ka sudo Tas "nepārveido" lietotāju par root Tas nepiešķir pilnīgu piekļuvi sistēmai, bet gan ļauj lietotājiem izpildīt noteiktas komandas kā citam lietotājam saskaņā ar konfigurācijā definētajiem noteikumiem. Tādā veidā var piešķirt ļoti specifiskas atļaujas, nepiešķirot pilnīgu piekļuvi sistēmai.
Kā sudo darbojas iekšēji
Pamatdarbība sudo No lietotāja viedokļa tas ir ļoti vienkārši: jūs ievietojat vārdu sudo pirms komandas, kuru vēlamies izpildīt ar privilēģijām. Piemēram, lai atjauninātu pakotņu sarakstu ar apt-get Debian vai Ubuntu vidē parastam lietotājam būs jādara kaut kas līdzīgs šim:
> sudo apt-get update
Ja mēģināt palaist administratīvu komandu bez sudoVisbiežāk jūs saņemsit kļūdas, piemēram, "Atļauja liegta" vai ziņojumus, kas norāda, ka noteiktu bloķētu failu nevar atvērt programmā /var/lib vai citā sistēmas direktorijā. Tiklīdz atkārtojat to pašu komandu, pievienojot sudo Pēc tam sistēma pieprasīs jūsu paroli, un, ja viss ir pareizi konfigurēts, komanda tiks izpildīta ar superlietotāja privilēģijām.
Kad izpildāt komandu ar sudoProgramma vispirms pārbauda, vai lietotājam ir atļauja to lietot un kādām konkrētām komandām, konsultējoties ar konfigurācijas failu. /etc/sudoers un daudzās sistēmās papildu faili direktorijā /etc/sudoers.d/Ja noteikumi to atļauj, sudo Tas prasa paroli (parasti jūsu, nevis viņu). root) un īslaicīgi paaugstina jūsu privilēģijas, lai palaistu komandu kā mērķa lietotājs.
Interesanta detaļa, kas sākumā bieži vien samulsina Kad terminālī tiek prasīta parole, rakstīšanas laikā netiek parādītas nekādas rakstzīmes, pat ne zvaigznītes. Tas ir pilnīgi normāli: ievade ir "akla" un ir daļa no drošības pasākumiem, lai novērstu paroles garuma pamanīšanu.
Turklāt Sudo uztur sava veida "uzticības sesiju".Pēc veiksmīgas paroles ievadīšanas paaugstinātās privilēģijas paliek aktīvas noteiktu laiku (pēc noklusējuma aptuveni 15 minūtes daudzās versijās) tajā pašā terminālī. Šajā periodā varat izpildīt vairāk komandu ar sudo bez nepieciešamības atkal un atkal lūgt paroli.
Sudo pamata sintakse un visnoderīgākās opcijas
Vispārīgā sintakse sudo Tas ir ļoti vienkārši:
> sudo komanda
Visizplatītākais veids, kā to izmantot, ir vienkārši kā sudo comandoTomēr tam ir labs skaits interesantu iespēju. Dažas no visbiežāk izmantotajām (un daudzās oficiālajās rokasgrāmatās izceltajām) ir šādas:
- -h: Parāda palīdzības ziņojumu ar programmas sintaksi un visām pieejamajām opcijām
sudo. - -V: parāda pašreizējo versiju
sudoun dažas kompilācijas detaļas. - -v: Atjaunina autentifikācijas "pagarinājuma laiku", tas ir, atsvaidzina skaitītāju, lai jūsu privilēģijas nebeigtos un jums drīzumā nebūtu atkārtoti jāievada parole.
- -k: nekavējoties anulē saglabātos akreditācijas datus; tas ir līdzīgi kā pateikt
sudokas "aizmirst", ka jau esat autentificējies, liekot jums nākamreiz vēlreiz pieprasīt paroli. - -l: parāda, kuras komandas jums ir atļauts palaist
sudosaskaņā ar pašreizējo konfigurācijusudoers.
Ir arī ļoti noderīgas iespējas komandu palaišanai tāpat kā citiem lietotājiem. atšķiras no root. Piemēram, ar -u Varat norādīt mērķa lietotāju konkrētai komandai:
> sudo -u pedro whoami
Šajā gadījumā, pat ja jūsu sesija pieder citam lietotājam, komandu whoami Tas atgriezīs vērtību "pedro", jo tas tika izpildīts tā, it kā jūs būtu šis lietotājs. Tas ir ļoti ērti atļauju pārbaudei vai ar pakalpojumu kontiem saistītu uzdevumu veikšanai, manuāli nepārslēdzot sesijas.
sudo pret su un root lietotāju
Linux sistēmā līdzās pastāv vairāki mehānismi. Lai iegūtu administratora privilēģijas: reģistrējieties tieši kā root, izmantojiet komandu su un izmantot sudoKatram no tiem ir savi plusi un mīnusi, un to izpratne ietaupīs jums daudz nepatikšanas.
Piesakieties tieši kā root lietotājs (piemēram, ar ssh root@servidorTas dod jums pilnīgu piekļuvi sistēmai jau no paša sākuma. Tas ir ļoti ērti, bet arī ārkārtīgi bīstami: jebkura nepareizi ierakstīta komanda var izdzēst pusi sistēmas, mainīt kritiskas atļaujas vai padarīt datoru nelietojamu. Tāpēc vairumā gadījumu darbs ar pieteikšanās sesijām nav ieteicams. root atvērts pastāvīgi.
Komanda su (aizvietotājs lietotājs) Tas ļauj pārslēgties uz citu lietotāju tajā pašā terminālī. Sākotnējā sesija paliek fonā un "iekapsulē" jauno sesiju. Ja palaižat su pedroJums tiks lūgta parole. pedro un, kad esat iekšā, ja rakstāt exit Jūs atgriezīsieties pie iepriekšējā lietotāja. Ja nenorādāt lietotājvārdu, su Pēc noklusējuma tas mēģina pārslēgties uz root.
Ir svarīga nianse ar su: ja neizvēlaties pieteikšanās opciju (su -, su -l o su --login), maina lietotāju, bet ne vidi. Tas nozīmē, ka jūs paliksit iepriekšējā lietotāja darba direktorijā un ar mainīgajiem, kas var izraisīt atļauju kļūdas (piemēram, mēģinot uzskaitīt mājas (sākotnējā lietotāja ar jaunā lietotāja akreditācijas datiem).
Vietā, sudo Tas piedāvā drošāku un kontrolējamāku pieejuJums nav jāzina parole, lai rootbet jūsu pašu parole, un sistēma izlemj, /etc/sudoerskuri lietotāji var izpildīt kuras komandas, piemēram, kuri lietotāji un no kurām iekārtām. Turklāt katra lietošanas reize sudo Tas tiek ierakstīts žurnālos, kas atvieglo ar paaugstinātām atļaujām paveiktā auditu.
Interaktīvām sesijām “kā citam lietotājam” ar sudoIr dažas ļoti praktiskas variācijas:
- Sudo -s: atver čaulu kā mērķa lietotājs, kas manto pašreizējā lietotāja vidi.
- sudo -i: sāk pilnu pieteikšanās čaulu mērķa lietotājam ar tīru vidi un direktoriju.
$HOME, ielādējot failus, piemēram,.profileo.bash_profile.
Abas iespējas ir noderīgas vienreizējam darbam. kā cits lietotājs (parasti root vai jebkuru pakalpojuma kontu), neatceroties un neizmantojot paroli, vienlaikus saglabājot kontroli un veikto darbību ierakstu.
Fails /etc/sudoers un direktorijs /etc/sudoers.d
Sudo konfigurācijas būtība tas ir arhīvā /etc/sudoersTur ir definēts, kas to var lietot. sudono kurienes, piemēram, kurš lietotājs un kuras konkrētās komandas var izpildīt. Turklāt daudzās distribūcijās ir iekļauta direktīva, kas automātiski ielādē visus papildu konfigurācijas failus, kas atrodas /etc/sudoers.d/.
Ir ļoti svarīgi to saprast /etc/sudoers Jums nevajadzētu rediģēt "bez pienācīgas rediģēšanas" ar jebkuru teksta redaktoru. Tas vienmēr ir jāmodificē, izmantojot komandu visudo, kas atver failu ar redaktoru (pēc noklusējuma vi o nano(atkarībā no konfigurācijas), taču tas pievieno drošības slāni: pirms saglabāšanas tas pārbauda sintaksi un neļauj diviem cilvēkiem to rediģēt vienlaikus.
Tipisks sudoeru rediģēšanas lietojums ir:
> sudo visudo -f /etc/sudoers
Varat arī izveidot konkrētus failus sadaļā /etc/sudoers.d/ lai atdalītu konfigurācijas pēc lietotāju grupām, pakalpojumiem utt. Piemēram, jums var būt fails /etc/sudoers.d/networking ar īpašiem tīkla administrēšanas noteikumiem, nejaucot to ar pārējo vispārējo konfigurāciju.
Atverot /etc/sudoers tipiskā sistēmāJūs redzēsiet šādas rindas (neskaitot komentārus):
- sakne VISS=(VISS:VISS) VISSlietotājs
rootJūs varat izpildīt jebkuru komandu jebkurā resursdatorā, kā jebkurš lietotājs un jebkura grupa. - %admin VISS=(VISS) VISS: ikviens grupas dalībnieks
adminir pilnas atļaujas lietošanaisudo. - %sudo ALL=(VISI:VISI) VISITas pats attiecas uz grupu
sudo, kas Ubuntu un atvasinājumos parasti ir atslēgu grupa. - #include /etc/sudoers.d: norāda, ka ir jānolasa arī šajā direktorijā esošie faili (pat ja
#(Šis nav komentārs šajā konkrētajā kontekstā).
Papildus lietotāju un grupu noteikumiem, sudoers Tas ļauj definēt aizstājvārdus, lai vienkāršotu sarežģītas konfigurācijas: lietotāju aizstājvārdi (User_Alias), komandu (Cmnd_Alias), izpildes grupu (Runas_Alias) vai saimniekiem (Host_Alias).
Pārvaldiet lietotājus un grupas, izmantojot sudoers
Izplatīta prakse serveros kontrolē piekļuvi sudo caur grupām. Piemēram, daudzās sistēmās pietiek pievienot lietotāju grupai sudo o wheel lai jūs varētu saņemt pilnīgas administratīvās atļaujas.
Lai pārbaudītu, kuri lietotāji pieder grupai noteikts (piemēram, sudo), jūs varat izmantot:
> grep 'sudo' /etc/group
Ja vēlaties piešķirt lietotājam sudo atļaujasParastā prakse ir to pievienot atbilstošajai grupai. Piemēram, lai iekļautu bill Grupai sudo:
> sudo adduser rēķins sudo
Kad jums ir jāatsauc šīs privilēģijasVienkārši noņemiet to no grupas:
> sudo deluser rēķins sudo
Vēl viena, daudz labāka iespēja Tas ietver atļauju piešķiršanu tikai noteiktām komandām, nedodot pilnīgu brīvību. Lai to izdarītu, parasti tiek izveidoti konkrēti faili. /etc/sudoers.d/Piemēram, jūs varētu definēt failu /etc/sudoers.d/networking ar kaut ko līdzīgu:
Cmnd_Alias CAPTURE = /usr/sbin/tcpdump
Cmnd_Alias SERVERI = /usr/sbin/apache2ctl, /usr/bin/htpasswd
Cmnd_Alias NETALL = UZTVERŠANA, SERVERI
%netadmin VISI = NETVISS
Ar šo konfigurāciju jebkurš grupas lietotājs netadmin jūs varēsiet izpildīt komandas, kas definētas zem aizstājvārda NETALL (kas grupē pseidonīmus) CAPTURE y SERVERSbez pilnīgas piekļuves visam sudoViss, kas nepieciešams, ir pievienot bill Grupai netadmin lai jūs varētu izmantot tcpdump un definētie servera rīki.
Bieži sastopamas komandas, kurām nepieciešama sudo
Sistēmu ikdienas administrēšanāIr vairāki uzdevumu veidi, kas gandrīz vienmēr iet roku rokā ar sudojo tie ietver sistēmas modificēšanu vai piekļuvi priviliģētai informācijai.
Pakešu pārvaldībasadalījumos, kuru pamatā ir zypper, apt vai citiem pakotņu pārvaldniekiem, jebkurai darbībai, kas instalē, noņem vai atjaunina programmatūru, ir nepieciešamas privilēģijas. Piemēram:
> sudo zypper instalēšanas pakotne
> sudo apt-get install docker-ce
Tomēr vaicājumi, kas tikai nolasa informāciju, piemēram, repozitoriju saraksta veidošanu, parasti var palaist bez sudoTas ir testēšanas jautājums un jānoskaidro, kad pati sistēma atgriež atļauju kļūdu.
Pakalpojumu pārvaldība ar systemd Parasti to veic, izmantojot systemctlTādas darbības kā pakalpojumu palaišana, apturēšana vai restartēšana parasti prasa sudo:
> sudo systemctl restartējiet apache2
Turpretī nekaitīgākas komandas, piemēram, pakalpojuma statusa pārbaude Tie var darboties bez privilēģijām daudzās sistēmās:
> systemctl status tīkla pārvaldnieks
Arī lietotāju kontu pārvaldība prasa rūpībuKomandas, piemēram, usermod, useradd o deluser Viņiem gandrīz vienmēr vajadzētu iet līdzi sudo, jo tie modificē sistēmas lietotāju datubāzi:
> sudo usermod -L -f 30 tux
Visbeidzot, failu atļaujas un īpašumtiesību pārvaldība ar chown Un uzņēmumam parasti ir nepieciešamas privilēģijas, ja tas ietekmē sistēmas ceļus vai citus lietotājus. Piemēram, lai padarītu visus failus un apakšdirektorijus pieejamus. /home/test/tux-files kļūt par lietotāja īpašumu tux Jūs varētu izmantot:
> sudo chown -R tux:tux /home/test/tux-files
Praktiski sudo lietošanas piemēri
Apskatīsim dažus reālus gadījumus. kur sudo Tas atšķir atļauju kļūdu no pareizas administrēšanas darbības.
Pakotņu indeksu atjaunināšana Debian/Ubuntu vidē Bez privilēģijām tas radīs kļūdas, jo nevar manipulēt ar failiem. /var/lib/apt/listsKomanda:
> apt-get update
Tas beigsies ar ziņojumiem "Atļauja liegta"Tiklīdz jūs to atkārtojat šādi, lietas mainās:
> sudo apt-get update
Sistēma pieprasīs jūsu paroli.un ja jūsu lietotājs ir autorizēts sudoersAtjauninājums darbosies bez problēmām. Tas ir atkārtots modelis: atļauju kļūda bez sudopareiza izpilde ar sudo.
Vēl viens ļoti izplatīts piemērs ir failu kopēšana uz sistēmas ceļiemKā /usr/local/binJa mēģināt tur kopēt skriptu ar vienkāršu:
> cp script.sh /usr/local/bin/
Termināļa sūdzēšanās ir normāla parādība. ka jums nav atļaujas rakstīt šajā direktorijā. Ja atkārtojat darbību, pievienojot sudo:
> sudo cp script.sh /usr/local/bin/
Jums tiks lūgta parole, un pēc veiksmīgas autentifikācijasKopija tiks izveidota un reģistrēta kā izpildīta ar paaugstinātām privilēģijām.
Varat arī apvienot sudo ar opciju -u izpildīt noteiktas komandas kā cits lietotājs, nemainot sesijas vai neizmantojot su. Piemēram:
> whoami
> sudo -u pedro whoami
Pirmajā pasūtījumā tiks parādīts jūsu īstais lietotājvārds., savukārt otrais atgriezīs “pedro”, parādot, ka izpilde ir veikta kā šim mērķa lietotājam.
Atļauju piešķiršana bez paroles un citas papildu opcijas
Viena no spēcīgākajām lietām saistībā ar svīšanu Šī funkcija ļauj pielāgot, cik lielā mērā parole tiek pieprasīta un kādām konkrētām komandām. Dažreiz jūs varētu vēlēties, lai noteikti lietotāji varētu izpildīt noteiktas komandas, neievadot paroli katru reizi, piemēram, automatizētiem skriptiem vai izslēgšanas pogām darbvirsmas vidē.
Tas tiek panākts ar etiķeti NOPASSWD noteikumos sudoersPiemēram, ja vēlaties miusuario var izpildīt /bin/cat ar sudo Neprasot paroli, varat pievienot rindu:
mans lietotājs ALL = NOPASSWD: /bin/cat
Līdzīgi jūs varētu ļaut tam pārvaldīt iekārtas izslēgšanu. bez atkārtotas autentifikācijas, pievienojot kaut ko līdzīgu:
mans lietotājs ALL = NOPASSWD: /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
Tīrākām un mērogojamākām konfigurācijāmIeteicams izmantot aizstājvārdus. Tipisks piemērs ir lietotāju grupas, komandu grupas un, ja nepieciešams, izpildes lietotāja aizstājvārda definēšana:
User_Alias GROUP = pepe, perico un andres
Cmnd_Alias POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
Runas_Alias WEB = www-data, apache
Ar šīm definīcijām jūs varētu rakstīt Daudz lasāmāki noteikumi, piemēram:
VISA GRUPA = SPĒKS
Tādējādi jebkurš lietotājs, kas iekļauts aizstājvārdā GRUPO Jūs varēsiet izslēgt vai restartēt datoru, izmantojot sudoun jūs varat pielāgot, vai vēlaties pieprasīt paroli vai nē NOPASSWD o PASSWDVarat arī ierobežot lietošanu konkrētiem saimniekdatoriem, izmantojot Host_Alias lai tas būtu derīgs tikai no konkrēta tīkla.
Beyond NOPASSWDIr arī citas etiķetes kā NOEXEC (lai komanda nevarētu palaist citas programmas ar paaugstinātām atļaujām) vai nelielas kuriozitātes, piemēram, pievienojot insults līdz līnijai Defaults, tā ka sudo Es izrunāšu joku angliski katru reizi, kad neievadīsi paroli.
Tas viss pierāda, ka sudoers ir daudz vairāk nekā vienkārša "root switch" metode.Pareizi konfigurēts, tas ļauj izveidot ļoti detalizētu atļauju modeli, kas pielāgots jūsu vajadzībām un kura drošības līmenis ir daudz pārāks par tipisko "ievadiet kā root un dariet, ko vēlaties".
Ar tādu rīku kā sudopareizi saprasts un pareizi konfigurētsTas ir gandrīz obligāti jebkurā mūsdienu Linux sistēmā, kurā strādā vairāki lietotāji vai kur vēlaties samazināt riskus, pat ja esat vienīgais lietotājs. Izmantojot šo kombināciju sudo, /etc/sudoers, grupos como sudo o wheel un uzlabotas atzīmes, piemēram, NOPASSWDJūs varat sasniegt ļoti saprātīgu līdzsvaru starp komfortu, precīzu kontroli un drošību, bez nepieciešamības pastāvīgi pielipt pie sesijas. root nepaļaujieties tikai uz veiksmi.
