Разграничение прав пользователей в Ubuntu

Разграничение прав на выполнение различных команд является очень важным моментом в многопользовательской системе. Разграничить команды для обычных пользователей и администраторов необходимо хотя бы для того, чтобы неопытные пользователи не могли устанавливать или удалять программы или выполнять случайные действия в системе.

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

Разрешить sudo для определенных пользователей

По умолчанию новый пользователь создается без права исполнения команд sudo, это сделано в целях безопасности. Чтобы пользователь имел возможность выполнять все команды необходимо добавить его в группу sudo:

usermod -a -G sudo <имя пользователя>

Например:

usermod -a -G sudo cloud

После добавления в группу sudo пользователь становится администратором. Администраторы в linux могут настраивать систему, им предоставлен доступ ко всем файлам в каталоге /dev, им предоставлены привилегии близкие к возможностям суперпользователя.

Примечание: в Ubuntu 12.04 LTS и более поздних версиях существует привычная группа admin, которая поддерживается для совместимости с более ранними версиями ОС, а все администраторы добавляются в группу sudo.

Запрет вызова команд

Запрет вызова команд может быть полезен в многопользовательских системах, например, чтобы пользователи не могли менять права на файлы или каталоги, выключать или перезагружать сервер, вызывать различные программы или утилиты.

Чтобы запретить выполнение определенных команд или утилит для всех кроме пользователя root, достаточно выполнить следующую команду:

sudo chmod o-x $(which <команда>)

Например:

sudo chmod o-x $(which ls)

Примечание: полагается, что все системные команды по-умолчанию принадлежат пользователю root.

После выполнения данной операции, все кроме root не смогут использовать команду ls:

ls
bash: /bin/ls: Permission denied

Чтобы запретить user1 использовать определенную команду, необходимо создать группу group2 и добавить в нее всех, кроме user1:

sudo groupadd group2
sudo useradd -G group2 <имя пользователя>

Затем изменить группу владельцев нужной команды на group2:

sudo chown :group2 <команда>

Например:

sudo chown :group2 $(which ls)

И наконец, запретить всем, кроме группы и владельца исполнять файл:

sudo chmod 754 $(which <команда>)

Например:

sudo chmod 754 $(which ls)

Редактирование файла /etc/sudoers

Файл /etc/sudoers определяет какие пользователи могут запускать sudo команды, а также управляет особыми правилами, например, нужен ли пользователю пароль для определенных команд. Файл состоит из псевдонимов (переменных) и пользовательских спецификаций.

Чтобы открыть файл /etc/sudoers используйте утилиту visudo, она специально предназначена для редактирования этого файла и позволяет не допустить ошибок в синтаксисе:

visudo

Файл будет открыт в текстовом редакторе по-умолчанию.

Стандартное содержимое файла выглядит следующим образом:

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults	env_reset
Defaults	mail_badpass
Defaults	secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root	ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo	ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

Примечание: здесь параметр Defaults имеет несколько значений:

  1. env_reset - сбрасывает все пользовательские переменные;
  2. mail_badpass - сообщает системе отправлять уведомления о неудачных попытках ввода пароля sudo пользователю mailto. По умолчанию это учетная запись root.
  3. secure_path - пути, по которым операционная система будет искать файлы, используемые для операций sudo.

Рассмотрим подробнее строку:

%sudo ALL=(ALL:ALL) ALL
  1. %sudo - имя пользователя или группа, к которой нужно применить правило (имя группы указывается после символа %, имя пользователя без).
  2. <>Первое ALL означает, что правило применяется ко всем IP-адресам, второе ALL, что указанный пользователь может запускать команды в сессии любого пользователя, третье ALL означает, что указанный пользователь может запускать команды в любой группе. Последнее ALL указывает, что эти правила нужно применять ко всем командам.

Например, для настройки прав для команды apt-get можно использовать следующую строку:

%admin ALL=(ALL)NOPASSWD:/usr/bin/apt-get
  1. %admin - правило применяется для всех пользователей группы admin;
  2. ALL= - правило применяется ко всем IP-адресам;
  3. (ALL) - пользователь может запускать команды в сессии любого пользователя;
  4. NOPASSWD - пароль не требуется;
  5. :/usr/bin/apt-get - список команд, разделенный запятой.

Host alias - это псевдонимы для IP адресов с которых отправляются на выполнение команды. Псевдоним для хоста можно задать следующим образом:

Host_Alias <Имя> = <Хост_или_IP-адрес>

Например:

Host_Alias CLOUD = 105.17.125.37

User alias - это псевдонимы имен пользователей или групп прямо внутри файла sudoers, а не в системе. Псевдоним можно задать следующим образом (для групп используйте %):

User_Alias <Имя> = <пользователь1>,<пользователь2>,...

Например:

User_Alias PEOPLE = alice,bob

Cmnd alias - являются псевдонимами для имен команд прямо внутри файла sudoers, а не в системе. Псевдоним команды можно задать следующим образом:

Cmnd_Alias <Имя> = <команда1>,<команда2>

Например:

Cmnd_Alias APT = /usr/bin/apt-get update,/usr/bin/apt-get upgrade

Средняя оценка: 5,0, всего оценок: 1