Një udhëzues fillestar për të kuptuar sudo në Ubuntu
Keni pasur ndonjëherë një gabim të refuzimit të lejes gjatë punës në linjën e komandës Linux? Shanset janë që po përpiqeni të kryeni një operacion që kërkon leje rrënjësore. Për shembull, pamja e mëposhtme e ekranit tregon gabimin që shfaqet kur po përpiqesha të kopjoja një skedar binar në një nga drejtoritë e sistemit:
Pra, cila është zgjidhja për këtë problem? E thjeshtë, përdorni komandën sudo.
Përdoruesit që ekzekuton komandën do t'i kërkohet fjalëkalimi i hyrjes. Pasi të futet fjalëkalimi i saktë, operacioni do të kryhet me sukses.
Ndërsa sudo është pa dyshim një komandë që duhet të dihet për këdo dhe këdo që punon në linjën e komandës në Linux, ka disa detaje të tjera të lidhura (dhe të thella) që duhet të dini në mënyrë që të përdorni komandën me më shumë përgjegjësi dhe efektivitet. Dhe kjo është pikërisht ajo që duhet diskutuar këtu në këtë artikull.
But before we move ahead, it's worth mentioning that all the commands and instructions mentioned in this article have been tested on Ubuntu with the Bash shell.
Çfarë është sudo?
Komanda sudo, siç mund ta dini tashmë shumica prej jush, përdoret për të ekzekutuar një komandë me privilegje të ngritura (zakonisht si rrënjë). Një shembull i kësaj ne kemi diskutuar tashmë në seksionin e hyrjes më lart. Sidoqoftë, nëse dëshironi, mund të përdorni sudo për të ekzekutuar komandën si një përdorues tjetër (jo-root).
Kjo arrihet përmes opsionit të linjës së komandës -u që ofron mjeti. Për shembull, në shembullin e paraqitur më poshtë, unë (himanshu) u përpoqa të riemërtoja një skedar në disa direktori të përdoruesve të tjerë (howtoforge), por mora një gabim të refuzimit të lejes. Dhe pastaj provova të njëjtën komandë mv me sudo -u howtoforge, komanda ishte e suksesshme:
A mund të përdorë ndonjë përdorues sudo?
Jo. Që një përdorues të jetë në gjendje të përdorë sudo, një hyrje që korrespondon me atë përdorues duhet të jetë në skedarin /etc/sudoers. Paragrafi i mëposhtëm - marrë nga faqja e internetit e Ubuntus - duhet ta bëjë më të qartë:
The /etc/sudoers file controls who can run what commands as what users on what machines and can also control special things such as whether you need a password for particular commands. The file is composed of aliases (basically variables) and user specifications (which control who can run what).
Nëse jeni duke përdorur Ubuntu, është e lehtë të siguroheni që një përdorues mund të ekzekutojë komandën sudo: gjithçka që duhet të bëni është ta bëni atë lloj llogarie përdoruesi administrator. Kjo mund të bëhet duke shkuar te cilësimet e sistemit... -> Llogaritë e përdoruesve.
Zhbllokimi i dritares:
Pastaj zgjidhni përdoruesin llojin e llogarisë së të cilit dëshironi të ndryshoni dhe më pas ndryshoni llojin në administrator
Megjithatë, nëse nuk jeni në Ubuntu ose shpërndarja juaj nuk e ofron këtë veçori, mund ta modifikoni manualisht skedarin /etc/sudoers për të bërë ndryshimin. Do t'ju kërkohet të shtoni rreshtin e mëposhtëm në atë skedar:
[user] ALL=(ALL:ALL) ALL
Eshtë e panevojshme të thuhet, [përdoruesi] duhet të zëvendësohet me emrin e përdoruesit të llogarisë që ju jep privilegjin sudo. Një gjë e rëndësishme që vlen të përmendet këtu është se metoda e sugjeruar zyrtarisht për të redaktuar këtë skedar është përmes komandës visudo - gjithçka që duhet të bëni është të ekzekutoni komandën e mëposhtme:
sudo visudo
Për t'ju dhënë një ide pse saktësisht është kështu, ja një fragment nga manuali i visudo:
visudo edits the sudoers file in a safe fashion. visudo locks the sudoers file against multiple simultaneous edits, provides basic sanity checks, and checks for parse errors. If the sudoers file is currently being edited you will receive a message to try again later.
Për më shumë informacion mbi visudo, shkoni këtu.
Çfarë është një seancë sudo?
Nëse e përdorni shpesh komandën sudo, jam i sigurt se do të keni vërejtur se pasi të keni futur me sukses fjalëkalimin një herë, mund të ekzekutoni komanda të shumta sudo pa iu kërkuar fjalëkalimi. Por pas ca kohësh, komanda sudo kërkon përsëri fjalëkalimin tuaj.
Kjo sjellje nuk ka të bëjë me numrin e komandave me fuqi sudo që ekzekutoni, por varet nga koha. Po, si parazgjedhje, sudo nuk do të kërkojë fjalëkalim për 15 minuta pasi përdoruesi ta ketë futur atë një herë. Postoni këto 15 minuta, do t'ju kërkohet përsëri fjalëkalimi.
Sidoqoftë, nëse dëshironi, mund ta ndryshoni këtë sjellje. Për këtë, hapni skedarin /etc/sudoers duke përdorur komandën e mëposhtme:
sudo visudo
Dhe pastaj shkoni në rreshtin që lexon:
Defaults env_reset
dhe shtoni variablin e mëposhtëm (të theksuar më poshtë me shkronja të zeza) në fund të rreshtit
Defaults env_reset,timestamp_timeout=[new-value]
Fusha [new-value] duhet të zëvendësohet me numrin e minutave që dëshironi të zgjasë seanca sudo. Për shembull, kam përdorur vlerën 40.
Në rast se dëshironi t'ju kërkohet fjalëkalimi sa herë që përdorni komandën sudo, atëherë në atë rast mund t'i caktoni vlerën 0 kësaj ndryshore. Dhe për ata prej jush që duan që sesioni i tyre sudo të mos përfundojë kurrë, mund të caktoni vlerën -1.
Keni parasysh se përdorimi i timestamp_timeout me vlerën -1 dekurajohet fuqimisht.
Fjalëkalimi sudo
Siç mund ta keni vërejtur, sa herë që sudo ju kërkon një fjalëkalim dhe ju filloni ta vendosni atë, asgjë nuk shfaqet - madje as yjet nuk janë zakonisht normë. Ndërsa kjo nuk është një punë e madhe në përgjithësi, disa përdorues mund të dëshirojnë të shfaqin yjet për çfarëdo arsye.
Gjëja e mirë është se kjo është e mundur dhe mjaft e lehtë për t'u bërë. Gjithçka që duhet të bëni është të ndryshoni rreshtin e mëposhtëm në skedarin /etc/sudoers:
Defaults env_reset
te
Defaults env_reset,pwfeedback
Dhe ruani skedarin.
Tani, sa herë që shkruani fjalëkalimin sudo, ylli do të shfaqet.
Disa opsione të rëndësishme të linjës së komandës sudo
Përveç opsionit të linjës së komandës -u (të cilin e kemi diskutuar tashmë në fillim të këtij tutoriali), ka disa opsione të tjera të rëndësishme të linjës së komandës sudo që meritojnë të përmenden. Në këtë pjesë, ne do të diskutojmë disa prej tyre.
Opsioni -k
Konsideroni një rast kur thjesht keni ekzekutuar një komandë sudo-powered pasi të keni futur fjalëkalimin tuaj. Tani, siç e dini tashmë, seanca sudo mbetet aktive për 15 minuta si parazgjedhje. Supozoni se gjatë këtij sesioni, ju duhet t'i jepni dikujt qasje në terminalin tuaj, por nuk dëshironi që ai të jetë në gjendje të përdorë sudo. Cfare do te besh?
Fatmirësisht, ekziston një opsion i linjës komanduese -k që lejon përdoruesit të revokojnë lejen sudo. Ja çfarë ka për të thënë faqja sudo man për këtë opsion:
-k, --reset-timestamp
When used without a command, invalidates the user's cached credentials. In other words, the next time sudo is run a password will be required. This option does not require a password and was added to allow a user to revoke sudo permissions from a .logout file.
When used in conjunction with a command or an option that may require a password, this option will cause sudo to ignore the user's cached credentials. As a result, sudo will prompt for a password (if one is required by the security policy) and will not update the user's cached credentials.
Opsioni -s
Mund të ketë raste kur puna juaj kërkon që ju të ekzekutoni një grup komandash që kanë nevojë për privilegje root dhe nuk dëshironi të futni fjalëkalimin sudo herë pas here. Gjithashtu, ju nuk dëshironi të ndryshoni kufirin e skadimit të sesionit sudo duke bërë ndryshime në skedarin /etc/sudoers.
Në atë rast, mund të dëshironi të përdorni opsionin e linjës së komandës -s të komandës sudo. Ja se si e shpjegon faqja sudo man:
-s, --shell
Run the shell specified by the SHELL environment variable if it is set or the shell specified by the invoking user's password database entry. If a command is specified, it is passed to the shell for execution via the shell's -c option. If no command is specified, an interactive shell is executed.
Pra, në thelb, ajo që bën ky opsion i linjës së komandës është:
- Lanson një guaskë të re - për cilën guaskë referohet ndryshorja SHELL env. Në rast se $SHELL është bosh, zgjidhet guaska e përcaktuar në skedarin /etc/passwd.
- Nëse po kaloni gjithashtu një emër komande së bashku me opsionin -s (për shembull: sudo -s whoami), atëherë komanda aktuale që ekzekutohet është: sudo /bin/bash -c whoami.
- Nëse nuk po përpiqeni të ekzekutoni ndonjë komandë tjetër (që do të thotë, thjesht po përpiqeni të ekzekutoni sudo -s), atëherë ju merrni një guaskë interaktive me privilegje rrënjësore.
Ajo që ia vlen të kihet parasysh këtu është se opsioni i linjës së komandës -s ju jep një guaskë me privilegje rrënjësore, por ju nuk e merrni mjedisin rrënjë - është .bashrc juaj që merr burim. Kjo do të thotë që, për shembull, në guaskën e re që ekzekuton sudo -s, ekzekutimi i komandës whoami do të vazhdojë të kthejë emrin e përdoruesit dhe jo rrënjën.
Opsioni -i
Opsioni -i është i ngjashëm me opsionin -s që sapo diskutuam. Megjithatë, ka disa dallime. Një nga ndryshimet kryesore është se -i ju jep gjithashtu mjedisin rrënjë, që do të thotë se (përdoruesit) tuaj .bashrc nuk merren parasysh. Është si të bëhesh root pa u regjistruar në mënyrë të qartë si rrënjë. Për më tepër, nuk duhet të futni gjithashtu fjalëkalimin e përdoruesve rrënjë.
E rëndësishme: Ju lutemi vini re se ekziston një komandë su që ju lejon gjithashtu të ndërroni përdoruesit (si parazgjedhje, ju lejon të bëheni rrënjë). Kjo komandë kërkon që të futni fjalëkalimin rrënjë. Për të shmangur këtë, mund ta ekzekutoni edhe me sudo (sudo su); në atë rast ju vetëm duhet të shkruani fjalëkalimin tuaj të hyrjes. Megjithatë, su dhe sudo su kanë disa dallime themelore - për t'i kuptuar ato si dhe për të ditur më shumë se si sudo -i krahasohet me to, shkoni këtu.
konkluzioni
Shpresoj që deri tani të keni marrë të paktën idenë bazë pas sudo-s, dhe se si e rregulloni sjelljen e tij të paracaktuar. Provoni rregullimet /etc/sudoers që kemi shpjeguar këtu, gjithashtu kaloni nëpër diskutimin e forumit (lidhur në paragrafin e fundit) për të marrë më shumë njohuri rreth komandës sudo.