Разница между su и sudo и настройка sudo в Linux

Linux в целом более безопасен, чем многие другие операционные системы. Ключевую роль в обеспечении безопасности играет управление пользователями и разрешениями, которые определяют, кто и что может делать в системе. По умолчанию обычные пользователи не могут выполнять операции на системном уровне.
Когда обычному пользователю нужно внести изменения, которые повлияют на работу всей системы, он должен использовать команду su
или sudo
для получения временных административных привилегий.
Понимание su и sudo?
Следующее объяснение основано на дистрибутивах на базе Ubuntu, но применимо к наиболее популярным дистрибутивам Linux.
su
(substitute user) — эта команда позволяет переключиться на другую учётную запись, обычно на учётную запись root. Для её использования вам понадобится пароль root, то есть вам придётся поделиться этим паролем с другими пользователями, которым также нужен доступ, что считается рискованным.sudo
(superuser do) — эта команда позволяет пользователю выполнять определённые системные команды с правами администратора, не раскрывая пароль root. Вместо этого пользователи вводят свой собственный пароль, что обеспечивает более безопасное делегирование полномочий.
Пример:
# Использование su для переключения на пользователя root su - Password: [root password here] # Использование sudo для обновления пакетов sudo apt update [sudo] password for user: [your password here]
Как видите, sudo
обеспечивает более безопасный и гибкий способ выполнения административных задач по сравнению с su
.
Что такое sudo?
sudo
это специальная программа (бинарный файл setuid), которая позволяет авторизованным пользователям запускать команды от имени пользователя root или другого пользователя. Она обеспечивает безопасный способ выполнения административных задач без необходимости сообщать пароль root.
При использовании sudo
необходимо ввести свой пароль, а не пароль root, что гарантирует привязку каждой выполняемой вами команды к вашей учётной записи.
В следующем примере веб-сервер Apache перезапускается с правами root. Обратите внимание, что пользователю не нужно вводить пароль root, вместо этого используется его собственный пароль.
sudo systemctl restart apache2
Кто может использовать sudo?
Список пользователей, которые могут запускать sudo
, хранится в файле /etc/sudoers
, который можно редактировать с помощью команды visudo
, чтобы избежать синтаксических ошибок, которые могут привести к сбою системы:
sudo visudo
Запись по умолчанию выглядит так. Это означает, что пользователь root может запускать любые команды на любом хосте от имени любого пользователя.
root ALL=(ALL:ALL) ALL
Предоставление доступа sudo другим пользователям
Предоставление неограниченного sudo
доступа нескольким пользователям может быть рискованным. Если каждый пользователь может выполнять любые команды от имени пользователя root, то простая ошибка или взлом аккаунта могут привести к сбою системы или раскрытию конфиденциальных данных.
Опасный пример (не делайте этого):
masterex ALL=(ALL:ALL) ALL alex ALL=(ALL:ALL) ALL
Здесь adam
и alex
могут выполнять любую команду от имени пользователя root на любом компьютере, что фактически даёт им полные административные права, как у пользователя root.
Вместо этого предоставьте каждому пользователю только те права, которые ему необходимы, как описано ниже.
Понимание синтаксиса sudo
Правильно настроенный sudo
очень гибок, и количество команд, которые может выполнить пользователь, можно точно настроить.
Синтаксис настроенной строки sudo
выглядит следующим образом:
User_name Machine_name=(Effective_user) command
Этот синтаксис можно разделить на четыре части:
- User_name → Имя пользователя
sudo
. - Machine_name → имя хоста, где допустима команда
sudo
, что удобно, если у вас несколько хостов. - effective_user → Пользователь, от имени которого будет выполняться команда (например, root или другая учётная запись).
- command → Команда или команды, которые разрешено выполнять этому пользователю.
Такая структура позволяет администраторам точно контролировать действия каждого пользователя, не предоставляя ему полный root-доступ.
Примеры конфигураций sudo
Вот несколько распространённых ситуаций и способы настройки sudo
для каждой из них:
1. Предоставление полного доступа к базе данных конкретному пользователю
У вас есть пользователь mark
, который является администратором базы данных, и вы хотите предоставить ему полный доступ к серверу базы данных beta.database_server.com
, но без доступа к другим хостам. Ваша строка sudo должна выглядеть так:
mark beta.database_server.com=(ALL) ALL
2. Выполнение команд от имени конкретного пользователя без прав root
У вас есть пользователь alex
, который должен выполнять системные команды от имени другого пользователя (не root) на том же сервере баз данных?
alex beta.database_server.com=(alex) ALL
3. Ограничение доступа пользователя одной командой
У вас есть пользователь sudo cat
, который должен выполнять только команду dog
.
cat beta.database_server.com=(cat) dog
4. Предоставление пользователю возможности выполнять несколько команд
Пользователю нужно выполнить несколько команд, но список короткий (менее 10 команд).
cat beta.database_server.com=(cat) /usr/bin/command1 /usr/sbin/command2 /usr/sbin/command3
Для более длинных списков команд лучше использовать псевдонимы.
User_Alias ADMINS=alex,jerry,masterex User_Alias WEBMASTERS=henry,mark WEBMASTERS WEBSERVERS=(www) APACHE Cmnd_Alias PROC=/bin/kill,/bin/killall,/usr/bin/top
Вы также можете назначить команды для всей группы, добавив к названию группы префикс %
:
%apacheadmin WEBSERVERS=(www) APACHE
5. Использование sudo без пароля
Пользователю необходимо выполнять определённые команды без ввода пароля.
masterex ALL=(ALL) NOPASSWD: PROCS
Здесь пользователь masterex
может выполнять все команды, объединённые в группу PROCS
без ввода пароля.
Краткие сведения
sudo
обеспечивает надёжную и безопасную среду с гибкими настройками по сравнению с su
. Кроме того, sudo
легко настроить. В некоторых дистрибутивах Linux sudo
включён по умолчанию, в то время как в большинстве современных дистрибутивов его нужно включать в целях безопасности.
Чтобы добавить пользователя (andreyex)
в sudo
, просто выполните следующую команду от имени пользователя root:
adduser andreyex sudo
На этом пока всё. Мы вернемся с ещё одной интересной статьёй. А пока следите за обновлениями. Не забудьте оставить свой ценный отзыв в комментариях.
Редактор: AndreyEx