Правило, которое пустило labops, читается по частям — и по ним видно, что оно разрешает, а что нет.
sudo пускает пользователя по правилам sudoers — строкам в /etc/sudoers и в файлах каталога /etc/sudoers.d. Правило дежурного выглядит так:
| Часть | Что значит |
|---|---|
labops |
кому разрешено; %имя — всем участникам группы |
ALL= |
на каких машинах действует правило — здесь на любых |
(root) |
от чьего имени можно запускать |
NOPASSWD: |
без ввода своего пароля |
/usr/bin/tail -n 2 … |
команда с аргументами — ровно эта; ALL на этом месте — любая |
Вызов, который ни под одно правило не подошёл, sudo без пароля не пропускает: потому labops и увидел a password is required. Свои правила показывает sudo -l, чужие — sudo -l -U имя:
У тебя два правила: (ALL : ALL) ALL даёт строка %sudo ALL=(ALL:ALL) ALL из /etc/sudoers — ты в группе sudo, — а (ALL) NOPASSWD: ALL — файл /etc/sudoers.d/90-student.
Не разрешай через sudo оболочки, редакторы и скрипты, которые получатель может переписать: из vim от root команда :!sh открывает оболочку root, а переписанный скрипт выполнит что угодно.
В /etc/sudoers есть строка %sudo ALL=(ALL:ALL) ALL. Пользователя deploy добавили в группу sudo. Что он получит?
-
%sudoв начале строки — это кому разрешено: всем участникам группы. Команды задаёт последнееALL— любые. -
Строка с
%sudoуже действует для всех участников группы.sudo -l -U deployпосле добавления покажет(ALL : ALL) ALL. -
sudo пароль root не выдаёт и не спрашивает: участник группы вводит свой пароль,
NOPASSWDв этой строке нет.
%sudo — все участники группы sudo, (ALL:ALL) — от любого пользователя и группы, последнее ALL — любая команда. NOPASSWD нет, поэтому sudo спросит у deploy его собственный пароль.
Главное в шаге
- Правило sudoers — кому, на какой машине, от чьего имени и какую команду с какими аргументами.
-
Вызов, не подошедший ни под одно правило, не пройдёт;
sudo -l -U имяпоказывает правила пользователя.