Как да контролирате sudo достъпа в Linux

Командата sudo ви позволява да изпълнявате команди на Linux, сякаш сте някой друг, като root. sudo също ви позволява да контролирате кой има достъп до възможностите на root, с детайлност. Предоставете на потребителите пълен достъп или им позволете да използват малък набор от команди. Ние ви показваме как.

sudo и Root разрешения

Всички сме чували (прекалено опростяването), че всичко в Linux е файл. Всъщност, почти всичко в операционната система от процеси, файлове, директории, гнезда и канали говори с ядрото чрез файлов дескриптор. Така че, въпреки че всичко не е файл, повечето обекти на операционната система се обработват така, сякаш са. Където е възможно, дизайнът на Linux и Unix-подобни операционни системи се придържа към този принцип.

Концепцията за „всичко е файл“ е широкообхватна в Linux. Тогава е лесно да се види как разрешенията за файлове в Linux се превърнаха в една от опорите на потребителските привилегии и права. Ако притежавате файл или директория (специален вид файл), можете да правите с тях каквото искате, включително да ги редактирате, преименувате, премествате и изтривате. Можете също да зададете разрешенията за файла, така че други потребители или групи потребители да могат да четат, променят или изпълняват файла. Всички се управляват от тези разрешения.

Всеки, който е, с изключение на суперпотребителя, известен като root. Основният акаунт е специално привилегирован акаунт. Той не е обвързан с разрешенията за нито един от обектите в операционната система. Потребителят на root може да направи всичко с всичко и почти по всяко време.

Разбира се, всеки с достъп до паролата на root може да направи същото. Те биха могли да причинят хаос злонамерено или случайно. Всъщност, root потребителят може да причини хаос и като направи грешка. Никой не е непогрешим. Това е опасно нещо.

Ето защо сега се счита за най-добра практика изобщо да не влизате като root. Влезте с обикновен потребителски акаунт и използвайте sudo за повишете привилегиите си за кратко време имате нужда от тях. Често това е само за издаване на една команда.

Списъкът на sudoers

sudo вече беше инсталиран на компютрите Ubuntu 18.04.3, Manjaro 18.1.0 и Fedora 31, използвани за изследване на тази статия. Това не е изненада. sudo съществува от началото на 80-те години и се превърна в стандартното средство за работа на суперпотребител за почти всички дистрибуции.

Когато инсталирате модерна дистрибуция, потребителят, който създавате по време на инсталацията, се добавя към списък с потребители, наречен sudoers. Това са потребителите, които могат да използват командата sudo. Тъй като имате правомощия за sudo, можете да ги използвате, за да добавите други потребители към списъка с sudoers.

Разбира се, безразсъдно е да раздавате пълен статус на суперпотребител волю-неволю или на всеки, който има само частична или конкретна нужда. Списъкът с sudoers ви позволява да посочите с кои команди различните потребители могат да използват sudo. По този начин не им давате ключовете за кралството, но те все пак могат да изпълнят това, което трябва да направят.

  Как да използвате командата за низове в Linux

Изпълнение на команда като друг потребител

Първоначално се наричаше „superuser do“, защото можете да правите неща като суперпотребител. Сега неговият обхват е разширен и можете да използвате sudo, за да изпълните команда, сякаш сте всеки потребител. Той е преименуван, за да отрази тази нова функционалност. Сега се нарича „заместващ потребител да“.

За да използваме sudo за изпълнение на команда като друг потребител, трябва да използваме опцията -u (потребител). Ето, ще стартираме кой съм аз команда като потребителя mary. Ако използвате командата sudo без опцията -u, ще стартирате командата като root.

И разбира се, тъй като използвате sudo, ще бъдете подканени за вашата парола.

sudo -u mary whoami

Отговорът от whoami ни казва, че потребителският акаунт, изпълняващ командата, е mary.

Можете да използвате командата sudo, за да влезете като друг потребител, без да знаете паролата му. Ще бъдете подканени да въведете вашата собствена парола. Трябва да използваме опцията -i (вход).

sudo -i -u mary
pwd
whoami
ls -hl
exit

Влезли сте като mary. Файловете “.bashrc”, “.bash_aliases” и “.profile” за потребителския акаунт на mary се обработват точно така, както ако собственикът на потребителския акаунт на mary е влязъл сам.

Командният ред се променя, за да отрази това е сесия за потребителски акаунт mary.
Командата pwd казва, че сега сте в Mary’s домашна директория.
whoami ни казва, че използвате потребителски акаунт mary.
Файловете в директорията принадлежат на потребителския акаунт на mary.
Командата за изход ви връща към вашата нормална сесия на потребителския акаунт.

Редактиране на sudoers файла

За да добавите потребители към списъка с хора, които могат да използват sudo, трябва да редактирате файла sudoers. Жизнено важно е да правите това само с помощта на командата visudo. Командата visudo не позволява на няколко души да се опитват да редактират sudoers файла наведнъж. То също извършва проверка и анализ на синтаксиса върху съдържанието на файла, докато го записвате.

Ако вашите редакции не преминат тестовете, файлът не се запазва сляпо. Получавате опции. Можете да отмените и изоставите промените, да се върнете и да редактирате отново промените или да принудите неправилните редакции да бъдат запазени. Последният вариант е много лоша идея. Не се изкушавайте да правите това. Можете да се окажете в ситуация, в която всички случайно са блокирани да използват sudo.

Въпреки че стартирате процеса на редактиране с помощта на командата visudo, visudo не е редактор. Той извиква един от съществуващите ви редактори, за да извърши редакциите на файла. На Manjaro и Ubuntu се стартира командата visudo простият редактор нано. Във Fedora, visudo пусна по-способния—но по-малко интуитивен-вим.

Ако предпочитате да използвате nano във Fedora, можете да го направите лесно. Първо, инсталирайте nano:

sudo dnf инсталира нано

И тогава трябваше да се извика visudo с тази команда:

sudo EDITOR=nano visudo

Това изглежда като добър кандидат за псевдоним. Нано редакторът се отваря с файла sudoers, зареден в него.

Добавяне на потребители към sudo групата

Използвайте visudo, за да отворите файла sudoers. Използвайте или тази команда, или тази, описана по-горе, за да посочите редактора по ваш избор:

sudo visudo

Превъртете през файла sudoers, докато видите дефиницията на записа %sudo.

Знакът за процент показва, че това е дефиниция на група, а не потребителска дефиниция. При някои дистрибуции редът %sudo има хеш # в началото на реда. Това прави реда коментар. Ако случаят е такъв, премахнете хеша и запазете файла.

  Как да настроите и използвате уеб браузър Qutebrowser на Linux

Редът %sudo се разбива по следния начин:

%sudo: Името на групата.
ALL=: Това правило важи за всички хостове в тази мрежа.
(ВСИЧКИ: ВСИЧКИ): членовете на тази група могат да изпълняват команди като всички потребители и всички групи.
Всички: членовете на тази група могат да изпълняват всички команди.

За да преформулирате това леко, членовете на тази група могат да изпълняват всяка команда, като всеки потребител или всяка група, на този компютър или на всеки друг хост в тази мрежа. Така че един прост начин да дадете на някого root привилегии и възможността да използва sudo, е да ги добавите към sudo групата.

Имаме двама потребители, Том и Мери, с потребителски акаунти съответно Tom и Mary. Ще добавим потребителски акаунт tom към групата sudo с командата usermod. Опцията -G (групи) определя групата, към която ще добавим акаунта на tom. Опцията -a (добавяне) добавя тази група към списъка с групи, в които вече се намира томът на потребителския акаунт. Без тази опция томът на потребителския акаунт ще бъде поставен в новата група, но премахнат от всички други групи.

sudo usermod -a -G sudo tom

Нека проверим в кои групи е Мери:

groups

Потребителският акаунт mary е само в групата mary.

Нека да проверим с Том:

groups

Потребителският акаунт на tom — и следователно 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 файла и изброите командите, които могат да използват.

Нека се запознаем с Хари, собственик на потребителския акаунт Хари. Той не е в sudo групата и няма привилегии за sudo.

groups

За Хари е полезно да може да инсталира софтуер, но не искаме той да има пълни sudo права. Добре няма проблем. нека стартираме visudo:

sudo visudo

Превъртете надолу през файла, докато преминете през дефинициите на групата. Ще добавим ред за Хари. Тъй като това е потребителска, а не групова дефиниция, не е необходимо да започваме реда със знак за процент.

Записът за потребителския акаунт harry е:

harry    ALL=/usr/bin/apt-get

Имайте предвид, че има раздел между „хари“ и „ВСИЧКИ=“.

Това се чете като потребителски акаунт, хари може да използва изброените команди на всички хостове, свързани към тази мрежа. Има една посочена команда, която е „/usr/bin/apt-get“. Можем да предоставим на Хари достъп до повече от една команда, като ги добавим към списъка с команди, разделени със запетаи.

  Как да използвате командата mkfs в Linux

Добавете реда към файла sudoers и запазете файла. Ако искате да проверите отново дали редът е синтактично правилен, можем да помолим visudo да сканира файла и да провери синтаксиса вместо нас, като използваме опцията -c (само за проверка):

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

Scroll down in the file until you come to the User_Alias specification line.


Добавете User_Alias, като напишете:

User_Alias INSTALLERS = harry, mary

Всеки елемент е разделен с интервал, а не с табулатор. Логиката се разпада като:

User_Alias: Това казва на visudo, че това ще бъде User_Alias.
ИНСТАЛИРАЦИ: Това е произволно име за този псевдоним.
= Хари, Мери: Списъкът с потребители, които трябва да се включат в този псевдоним.

Сега ще редактираме реда, който добавихме по-рано за потребителския акаунт harry:

harry    ALL=/usr/bin/apt-get

Променете го така, че да чете:

INSTALLERS    ALL=/usr/bin/apt-get

Това казва, че всички потребителски акаунти, съдържащи се в дефиницията на User_Alias ​​„INSTALLERS“, могат да изпълняват командата apt-get. Можем да тестваме това с Мери, която вече трябва да може да инсталира софтуер.

sudo apt-get install colordiff

Мери може да инсталира софтуера, защото е в псевдонима на потребителя „ИНСТАЛИРАЦИ“ и този потребителски псевдоним е получил тези права.

Три бързи трика за судо

Когато забравите да добавите sudo към команда, въведете

sudo !!

И последната команда ще се повтори с sudo, добавен в началото на реда.

След като използвате sudo и се удостоверите с паролата си, няма да ви се налага да използвате паролата си с други команди sudo в продължение на 15 минути. Ако искате вашата автентификация да бъде забравена веднага, използвайте:

sudo -k

Чудили ли сте се някога къде можете да видите неуспешни опити за команда sudo? Те отиват във файла “/var/log/auth.log”. Можете да го видите с:

less /var/log/auth.log

Можем да видим записа за потребителски акаунт mary, който беше влязъл в TTY pts/1, когато се опита да изпълни командата за изключване като потребител „root“.

С велика сила…

… идва способността да делегирате части от него на други. Сега знаете как да овластявате други потребители избирателно.