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