Sudo Ubuntu

Разделение привилегий пользователей - это фундаментальная парадигма безопасности в Linux. Обычный пользователь Linux  оперирует с ограниченными привилегиями, чтобы снизить область  его воздействия на систему в целом. У пользователя своё собственное окружение в котором он имеет права, а не во всей системе.

Специальный пользователь root обладает супер привилегиям.  Это административная учетная запись без каких-либо ограничений, как обычного пользователя. Пользователи могут исполнять команды от имени супер-пользователя ( root ) несколькими различными путями. Один из них sudo, /etc/sudoers

Чтобы получить права супер-пользователя, как не банально это прозвучит, можно просто авторизоваться от имени root Работы от имени root считается не безопасной, высока вероятность  допустит простую ошибку при манипуляции с файлами или директориями, или выполнить небезопасную команду.

Так же просто получить права root выполним в терминале команду su (будет запрошен пароль).

Наиболее продвинутый подход - это использование команды sudo. sudo позволяет выполнить команду с root привилегиями, без необходимости порождения нового процесса терминала.

$ sudo ls -la

при выполнении sudo будет запрошен пароль пользователя, в отличии от su где запрашивает пароль root.

Чтобы пользователь имел право использовать sudo потребуется настройка. Настройки в файле /etc/sudoers Для редактирования есть специальная команда vusudo

Сам файл выглядит примерно так

# reset/remove all user vars
Defaults	env_reset

# отправить уведомление о неправильном вводе пароля
# при попытках пользователя использовать sudo
Defaults	mail_badpass

# где в искать приложения для запуска
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

root	ALL=(ALL:ALL)	ALL

# groups
%admin	ALL=(ALL)	ALL
%sudo	ALL=(ALL:ALL)	ALL

#includedir /etc/sudoers.d

Правила привилегий sudo

# (1)		(2)=(3:4)	5		
root	ALL=(ALL:ALL) ALL
  • (1) имя пользователя
  • (2) применять ко всех хостам
  • (3) можно выполнять команды от имени любого пользователя
  • (4) можно выполнять команды от имени любой группы
  • (5) можно выполнять любые команды

Для привилегий группы используется символ %

%developers	ALL=(ALL)	ALL

Чтобы предоставить привилегии пользователю необходимо добавить его в группу sudo

root@#:~ usermod -aG sudo username

# или

root@#:~ gpasswd -a username sudo

Настройка правил sudo

Во первых можно организовать пользователей в группы, для этого используем User_Alias

User_Alias	DEVELOPERS = andy, carl
USer_Alias	MAINTAINERS	= foo, bar

Теперь можно указать привилегии для группы

MAINTAINERS	ALL = /usr/bin/apt-get update

Чтобы убрать необходимость ввода пароль используется NOPASSWD

DEVELOPERS	ALL = NOPASSWD:/usr/bin/sync-project

Полезная директива NOEXEC запрещает программам выполнять потенциально опасные операции (например порождение новых процессов)

developer	ALL = NOEXEC:/usr/bin/less

Опции

выполнение команды от имени пользователя или группы

$ sudo -u operator /usr/bin/backupdb
$ sudo -g operators /usr/bin/updatedb

очистка таймера использования sudo

$ sudo -k

для обновления "аренды" sudo

$ sudo -v	

чтобы посмотреть свои привилегии

$ sudo -l

Часто случается, что при выполнении команды, забыли использовать sudo, используем !!, что означает повтор последней команды

$ /usr/bin/updatedb # <- oops, missing sudo
$ sudo !! # become sudo /usr/bin/updatedb