Naredba sudo je vrlo važna za upravljanje pravima pristupa operativni sistem Linux. Zahvaljujući ovoj maloj komandi, drugim korisnicima možete dati dozvole za obavljanje određenih radnji u ime administratora, a da im ne date samu lozinku superkorisnika. Takođe, ne morate uvijek sjediti ispod račun superkorisnik da povremeno obavlja administrativne radnje.
Čini se da je tako mali tim, sa minimumom mogućnosti i najjednostavnijom mogućom upotrebom, a zapravo može mnogo više. U ovom članku ćemo pogledati kako je sudo konfiguriran u Linuxu za kontrolu pristupa sistemskim funkcijama i korisničkim mogućnostima.
Prije nego što pređemo na podešavanje pristupa sudo uslužnom programu, pogledajmo kako on funkcionira. Postoje dva načina da dobijete administratorska prava u Linuxu. Možete se prebaciti na root korisnika pomoću naredbe su ili možete proslijediti parametar prava komanda sudo uslužni program, koji će ga izvršiti s administratorskim pravima. Štaviše, druga metoda je poželjnija, jer nećete zaboraviti šta koristite i nećete učiniti ništa nepotrebno.
Ime tima znači zamjenski korisnik do ili super korisnik radi. Uslužni program vam omogućava da pokrenete programe kao drugi korisnik, ali najčešće kao root korisnik. Uslužni program su razvili još 1980. godine Bob Cogshell i Cliff Spencer. Tokom ovog vremena, mnogi programeri su se promijenili i dodane su mnoge funkcije.
sudo radi zahvaljujući SUID pristupnoj zastavici. Ako je ova zastavica postavljena za program, onda se ne izvršava u ime korisnika koji ga je pokrenuo, već u ime vlasnika, s obzirom da je datoteka u vlasništvu sudo, tada se uslužni program izvršava kao root. Zatim čita svoja podešavanja, traži korisničku lozinku i odlučuje da li se korisniku može dozvoliti da izvodi komande kao administrator. Ako je odgovor da, onda se naredba proslijeđena u parametru izvršava.
Sada kada znate teoriju, pogledajmo kako postaviti sudo na Linux.
Sve sudo postavke se nalaze u datoteci /etc/sudores. Ovdje možete konfigurirati puno parametara, počevši od toga kome će biti dozvoljeno da izvršava komande u ime superkorisnika i završavajući ograničavanjem skupa dostupnih komandi.
Da otvorite datoteku za uređivanje, upišite sljedeću naredbu kao superkorisnik:
Također možete odrediti uređivač teksta u kojem želite urediti konfiguracijski fajl:
EDITOR=nano visudo
Zatim ćemo pogledati najzanimljivije postavke koje možete postaviti u ovoj datoteci. Ali prvo, pogledajmo osnovnu sintaksu datoteke. Sastoji se od dvije vrste stringova, to su aliasi koji vam omogućavaju da kreirate liste korisnika i zastavica, kao i sama pravila koja određuju kako će se sudo naredba ponašati. Sintaksa alijasa izgleda ovako:
ukucajte alias_name = element1, element2, element3
Tip specificira koji tip Alice treba kreirati, ime je ime koje će se koristiti, a lista elemenata specificira elemente koji će se podrazumijevati kada se poziva na ovo ime.
Opis korisničkih dozvola ima malo drugačiju sintaksu:
korisnički host = (drugi_korisnik:grupa) timovi
Korisnik specificira korisnika ili grupu za koju kreiramo pravilo, host je kompjuter za koji će se ovo pravilo primjenjivati. Drugi korisnik - pod krinkom kojeg korisnika prvi može izvršavati komande, a zadnji može izvršavati dozvoljene komande. Umjesto bilo kojeg od parametara može se koristiti pseudonim. A sada postavljanje sudo u Debian i druge distribucije.
Alias Defaults vam omogućava da navedete standardni parametri da bi uslužni program funkcionisao, razmotrićemo ih u ovom odeljku. Takav alias počinje riječju Defaults, nakon čega slijedi naziv zastave. Ako se ispred imena nalazi simbol, to znači da zastavicu treba uključiti u suprotnom, isključite je:
Onemogućite uvod kada ga prvi put koristite:
Defaults!lecture
Superkorisnik ne može učiniti sudo:
Zadano !root_sudo
Sada ako pokušate pokrenuti sudo sudo ništa neće raditi:
Promijenite početni direktorij za ciljnog korisnika, ostavljajući folder trenutnog korisnika kao početni direktorij prema zadanim postavkama:
Zadane postavke set_home
Sačuvajte listu grupa trenutnog korisnika:
Zadane postavke !preserve_groups
Zatražite lozinku superkorisnika umjesto korisničke lozinke:
Postavite broj pokušaja lozinke prije nego što se sudo zatvori, zadana vrijednost je 3:
Zadane postavke passwd_tries=5
Broj minuta koji će proći prije nego što sudo ponovo zatraži lozinku je 5 prema zadanim postavkama. Ako postavite vrijednost na 0, uvijek će tražiti lozinku, bez obzira koliko ste dugo koristili uslužni program:
Zadana vrijednost timestamp_timeout=10
Sljedeći parametar specificira broj minuta u kojima će sudo čekati da se lozinka ponovo unese ako je unesena pogrešno:
Zadano passwd_timeout=10
Možete promijeniti poruku koja se prikazuje kada se od vas zatraži lozinka:
Defaults passprompt="Vaša lozinka:"
Za ovu upotrebu možete odrediti drugog korisnika, a ne root, od kojeg će se izvršavati sve naredbe:
Zadane postavke runas_default="korisnik"
Možete prijaviti sve pokušaje povezivanja na sudo:
Zadano logfile=/var/log/sudo
Zatim pokušavamo provjeriti rad dnevnika:
sudo cat /var/log/sudo
Ovo su sve najzanimljivije sudo postavke koje vam mogu zatrebati, a zatim ćemo pogledati kako postaviti sudo prava pristupa za korisnike.
Već smo raspravljali o sintaksi za podešavanje radnji za korisnike ovdje je sve složenije nego kod pseudonima, ali to možete shvatiti. Na primjer, dozvolimo bilo kojem korisniku da koristi sudo, s bilo kojeg hosta, i da izvrši bilo koju naredbu:
SVE SVE = (SVE) SVE
Takav tim je vrlo nesiguran, dozvoljava svima i svemu. Prvo SVE omogućava svim korisnicima, drugo SVE je za sve hostove, treće SVE dozvoljava prijavu kao bilo koji korisnik, a četvrto dozvoljava izvršavanje bilo koje komande. Ali druga konstrukcija se koristi mnogo češće:
%točak SVE = (SVE) SVE
Znači isto kao i prethodni, samo što ovdje ne dozvoljavamo svim korisnicima da koriste sudo, već samo onima koji su članovi grupe kotača.
%wheel ALL = (root) SVE
Ovdje smo već ograničili mogući izbor korisnika samo na root korisnika. Također možete odrediti korisničku grupu u ime koje on može izvršavati naredbe:
%wheel SVE = (root:admins) SVE
To znači da naredbu možete pokrenuti kao root ili drugi korisnik iz grupe administratora. Također možemo odrediti naredbe koje korisnik može izvršiti. na primjer:
%wheel ALL = (root) /bin/mount, /bin/umount
Korisnik može pokrenuti naredbe mount i umount samo kao superkorisnik. Sada da to učinimo još zanimljivijim, korisnik može izvršiti mount i umount bez lozinke, a sve ostale naredbe sa lozinkom:
%wheel ALL = (root) SVE
%wheel ALL = (root) NOPASSWD: /bin/mount, /bin/umount
Također možete ograničiti korisnike po hostu, na primjer, dozvoljavamo korištenje sudo samo sa host1:
%wheel host1 = (root) SVE
Ostaje razmotriti kako koristiti pseudonime. Aliasi mogu biti sljedećih tipova:
Na primjer, napravimo četiri pseudonima i koristimo ih u našem pravilu:
User_Alias Korisnici = korisnik1,user2,user3
Runas_Alias Admins = root,admin
Host_Alias Hosts = host1,host2
Cmd_Alias Cmds = /bin/mount,/bin/umount
Korisnici Hostovi = (Administratori) Cmds
To znači da će korisnici sa liste korisnika moći da izvrše Cmds komande u ime Amdins korisnika na hostovima.
Ostalo je još nekoliko riječi za reći o zastavama. Oznaka NOPASSWD vam govori da ne tražite lozinku prilikom izvršavanja ovog pravila. Na primjer, da biste omogućili svim korisnicima da pokrenu naredbu mount sa sudo bez lozinke:
SVE SVE = (root) NOPASSWD: /bin/mount
Također možete spriječiti da se ova određena naredba uopće izvrši koristeći NOEXEC zastavu:
SVE SVE = (root) NOEXEC /bin/mount
Možete provjeriti da li je datoteka /etc/sudores ispravno konfigurirana i vidjeti sva kreirana pravila koristeći naredbu:
Ovdje su prikazane sve instalirane zastavice i postavke, kao i dozvole ovog korisnika.
U ovom članku smo pogledali kako konfigurirati sudo u Linuxu. Kao što vidite, uprkos činjenici da je ovo vrlo jednostavan uslužni program, on skriva mnogo korisnih postavki koje možete koristiti na svom sistemu. Ako imate pitanja, pitajte u komentarima!
Malo o samom sudou, sa Wikipedije. sudo(engleski) superuser do , doslovno „nastupiti u ime superuser") je program dizajniran da pomogne sistem administrator i omogućava vam da delegirate određene privilegovane resurse korisnicima uz održavanje dnevnika rada. Osnovna ideja je da se korisnicima da što manje prava, ali istovremeno tačno onoliko koliko je potrebno za rješavanje postavljenih zadataka.
Naredba sudo omogućava korisnicima da pokreću naredbe kao root ili drugi korisnici. Pravila koja sudo koristi da odluči da li da odobri pristup nalaze se u datoteci /etc/sudoers; Jezik njihovog pisanja i primjeri upotrebe su detaljno opisani u sudoers(5).
Da biste uredili /etc/sudoers datoteku, trebali biste koristiti program visudo, koji provjerava sintaksu i na taj način izbjegava greške u pravilima.
U većini slučajeva, pravilna konfiguracija sudoa čini pokretanje kao superkorisnik nepotrebnim.
Podrazumevano, root nalog u Ubuntu-u je onemogućen i root jednostavno nema lozinku. Svi administrativni zadaci se izvode putem sudo. Podrazumevano, pravo na izvršavanje sudo je dodijeljeno prvom korisniku kreiranom tokom instalacije. Svi ostali su standardni korisnici.
Sudo je vrlo fleksibilan alat koji vam omogućava da konfigurirate prava za obavljanje administrativnih radnji za svakog korisnika posebno. Na primer, dozvolite jednom da ponovo pokrene server, a drugom dajte mogućnost da promeni prava pristupa datotekama i fasciklama. Otvorite datoteku /etc/sudoers. To se može učiniti bilo izdavanjem naredbe za otvaranje datoteke u omiljenom uređivač teksta, na primjer ovako:
# nano /etc/sudoers
ili pomoću uslužnog programa visudo:
# visudo
Potonji metod će otvoriti datoteku /etc/sudoers u korisničkom zadanom uređivaču, ili ako nije naveden, onda u vi editoru. Prednost ovu metodu je da će prilikom spremanja datoteke biti provjerena usklađenost sa sintaksom.
Najjednostavnija konfiguracija izgleda ovako:
Zadane postavke env_reset
#Specifikacija privilegije korisnika
root SVE=(SVE) SVE
korisnik SVE=(SVE) SVE
Ova konfiguracija daje korisniku sva prava root korisnika kada izvodi naredbu sudo. Zadane postavke env_reset potpuno onemogućava sve korisničke varijable prilikom izvršavanja naredbi kao root. Ovo je dobro sa sigurnosne tačke gledišta, ali ponekad stvara probleme. Možete dozvoliti korištenje privatnih varijabli od strane grupe ili pojedinca dodavanjem ove linije:
Zadano:%admin !env_reset
koji će sačuvati varijable okruženja za sve korisnike admin grupe, ili:
Zadano: korisnik env_keep=TZ
koji će sačuvati TZ varijablu za korisnika korisnika.
Ako serverom upravlja grupa ljudi, onda ima smisla učiniti ovo:
%admin SVE=(SVE) SVE
Kao što možete pretpostaviti, ovaj unos daje root pristup svim članovima admin grupe.
Možete konfigurirati svakog određenog korisnika da ima pristup samo određenim naredbama. na primjer:
korisnik SVE = /bin/mount, /bin/kill
će dati korisniku prava da izvrši mount i kill komande sa bilo koje mašine, i:
user2 mydebiancomp = /sbin/modprobe
će korisniku2 dati dozvole za pokretanje modprobe iz mydebiancomp. Mislim da je sintaksa jasna:
korisnički host = komanda
gdje je naredba napisana sa punom putanjom. Za grupu je sve slično, samo je dodat znak “%”.
Vrlo je zgodno kreirati grupu aliasa prilikom postavljanja sudoa. Kako bismo izbjegli stalno ponavljanje naredbi, korisnika i hostova, možemo ih grupirati u grupe i postaviti pravila za svaku grupu alijasa. Na primjer ovako:
Cmnd_Alias command_alias = command1, command2, ... // pseudonim komandi
Host_Alias host_alias = hostname1, hostname2, ... // aliasi hosta
User_Alias user_alias = korisnik1, korisnik2, ... // korisnički pseudonim
Moguće je i izvršavanje naredbe u ime drugog korisnika. Na primjer, sa ovim unosom:
korisnik SVE = (korisnik2, korisnik3) /usr/bin/ark
korisnik korisnik može pokrenuti naredbu ark kao user2 ili user3, koristeći tipku u, ovako:
$ sudo -u user2 ark
Podrazumevano, sudo pamti lozinke 5 minuta. Ako to ne želite, onda za svakog korisnika, grupu ili pseudonim možete postaviti zasebno pravilo, na primjer kada:
Zadano: korisnička timestamp_timeout=0
Korisnička lozinka se uopće neće pamtiti, ali ako:
Zadano: korisnička timestamp_timeout=-1
ostat će zapamćen za cijelo vrijeme rada.
Sudo bez lozinki je također moguć. Za ovo postoji sličan dizajn:
korisnik myubuntucomp = NOPASSWD: /bin/kill
što će omogućiti korisniku sa hosta myubuntucomp da koristi kill bez traženja lozinke. Umetnite vlastite vrijednosti, kao što su SVE umjesto imena hosta i naredbe, tako da korisnik nikada ne može unijeti lozinku za izvršavanje naredbi kao root s bilo kojeg hosta, ali zapamtite da to čini sistem vrlo ranjivim.
Guard
Blogovi, blogovi, blogovi. Maxim Fuckin zna mnogo o ovome.
Interaktivna karta grada Orenburga. Izrađeno korištenjem tehnologije Google mape koristeći naše vlastite razvoje. Resurs je mlad, ali već prilično zanimljiv i koristan.
Ponekad je potrebno samo pokrenuti naredbu od drugog korisnika. I postoji nekoliko načina kako se to može učiniti. O njima ću govoriti u svom članku “Pokreni komandu kao drugi korisnik u Unixu/Linuxu”.
I tako, možete koristiti SUDO uslužni program. Pogledajmo primjer:
$ sudo -H -u Vaš_drugi_korisnik -c "ping stranica"
Objašnjenja:
Tako nešto.
Možete koristiti uslužni program SU. A sada ću dati nekoliko primjera.
Prijavite se kao root korisnik
Da dobijete root, pokrenite:
$su -root
Pokrenite naredbu kao root korisnik
Evo primjera naredbe:
# su - root -c "VAŠA_KOMANDA_OVDJE"
Su - -c "VAŠA_KOMANDA_OVDJE arg1"
Izvršite naredbu od drugog korisnika koristeći su
Dakle, evo primjera:
# su -c "/opt/solr/bin/solr create -c test_solr_core -n solrconfig.xml" -s /bin/sh solr Kreirano novo jezgro "test_solr_core"
Pogledajmo još jedan primjer:
$ su another_user -c "ping stranica"
$su -YOUR_USER -c "VAŠA_KOMANDA_OVDJE"
Tako nešto.
I tako, možete koristiti uslužni program runuser. Naredba runuser pokreće ljusku sa zamjenskim ID-ovima korisnika i grupe. Ova komanda je korisna samo kada ste prijavljeni kao root korisnik. Sintaksa je sljedeća:
# runuser -l YOUR_USER -c "VAŠA_KOMANDA_OVDJE"
Kao primjer, pokazat ću sljedeću liniju:
# runuser -l nginx -c "servis nginx start"
PS: Naredba runuser ne zahtijeva lozinku i treba je pokrenuti samo root korisnik.
Glavne opcije:
To je to, tema "Pokreni komandu kao drugi korisnik u Unixu/Linuxu" je završena.
Od davnina, mnogi su bili zbunjeni raznolikošću sigurnosnih opcija pri izvođenju operacija s maksimalnim privilegijama. Na primjer, u službenom Ubuntu dokumentacija preporučljivo je koristiti nešto poput sudo nano kao naredbu za uređivanje, te u brojnim amaterskim priručnicima (u stilu „5 trikova u komandna linija, što će iznenaditi vašu baku") da biste dobili root shell, predlaže se da napišete sudo su -. Pokušaću da objasnim zašto mi se ovakvo stanje čini pogrešnim.
Istorijski jedini na univerzalan način izvrši naredbu kao drugi korisnik u Unixu je postojao program koji se zove su. Pokrenut bez parametara, tražio je lozinku superkorisnika i, ako je uspio, jednostavno je zamijenio trenutno korisničko ime s root, ostavljajući gotovo sve varijable okruženja od starog korisnika (osim PATH, USER i još nekoliko, pogledajte man su iz vaše distribucije ). Bilo bi ispravnije pokrenuti ga kao su - u tom slučaju bi ljuska također dobila ispravno okruženje. Sa opcijom -c možete pokrenuti naredbu: su -c "vim /etc/fstab" .
U ovom slučaju, pouzdani korisnici morali su zapamtiti root lozinku, a svi korisnici navedeni u grupi "točak" (tj. u grupi čiji su članovi mogli pokrenuti naredbu su i postati superkorisnici) imali su isti neograničeni pristup cijeloj sistema, što je predstavljalo ozbiljan sigurnosni problem.
Onda se pojavila komanda sudo i to je bio proboj. Sada administrator može odrediti listu dozvoljenih komandi za svakog korisnika (ili grupu korisnika), datoteke dostupne za uređivanje, posebne varijable okruženja i još mnogo toga (sva ova ljepota se kontrolira iz /etc/sudoers, pogledajte man sudoers iz vaše distribucije) . Kada se pokrene, sudo traži od korisnika sopstvenu lozinku, a ne root lozinku. Puna ljuska se može dobiti pomoću "sudo -i"
Vrijedi ga posebno spomenuti specijalni tim sudoedit, koji bezbedno pokreće uređivač naveden u varijabla okruženja$EDITOR. Sa tradicionalnijom šemom, uređivanje datoteka je urađeno otprilike ovako:
sudo vi /etc/fstab
Lansiran na ovaj način, vi je naslijedio shell sa neograničenim pravima i putem:! korisnik je mogao pokrenuti bilo koju komandu (osim, naravno, ako se administrator o tome unaprijed pobrinuo) i otvori bilo koju datoteku.
Sudoedit provjerava može li ovaj korisnik uređivati ovaj fajl, zatim kopira navedenu datoteku u privremeni direktorij, otvara je u uređivaču (koji nasljeđuje prava korisnika, a ne root) i nakon uređivanja, ako je datoteka promijenjena, kopira je natrag uz posebne mjere opreza.
Na distribucijama baziranim na Debianu, root korisnik nema lozinku, sve administrativne radnje moraju se izvesti putem sudoa ili njegovog grafičkog ekvivalenta gksudo. Budući da je potpuna zamjena za su, sudo bi trebao biti jedina komanda za prebacivanje između korisnika, međutim, kao što je rečeno na početku, trenutno to nije slučaj i iz nekog razloga svi izmišljaju divlje sekvence sudo, su, vi i crtice.
Stoga predlažem da se svi jednom zauvjek sjete:
Nakon prvog objavljivanja ove bilješke, postavljeno mi je nekoliko pitanja. Od odgovora smo uspjeli napraviti mini-FAQ.
P: Kako mogu koristiti sudo da uradim su -c "echo 1 > /etc/privileged_file" ? sudo echo 1 /etc/privileged_file se žali na "dozvolu odbijeno"
O: Ovo se dešava zato što se samo naredba echo izvršava s povišenim pravima, a rezultat se preusmjerava na datoteku s pravima običnog korisnika. Da dodate nešto u privileged_file, trebate pokrenuti sljedeću naredbu:
$ echo 1| sudo tee -privilegirana_datoteka >/dev/null
Ili privremeno postanite root:
$ sudo -i # echo 1 > privilegirana_datoteka # izlaz $
P: sudo -i je duži od su - , ali izgleda da nema razlike između njih, zašto štampati više?
O: sudo ima nekoliko prednosti koje su vrijedne truda da unesete nekoliko dodatnih znakova: