Права доступа и sudoers в Linux

  linux

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

Группы и общий каталог

groupadd alfa
useradd -m -G alfa user1
mkdir -p /srv/alfa
chown root:alfa /srv/alfa
chmod 2770 /srv/alfa

Цифра 2 в начале — это бит setgid. Новые файлы в каталоге наследуют группу alfa, а не основную группу создателя, поэтому коллеги смогут их открыть. 770 закрывает каталог для всех остальных.

Sudo только на конкретные команды

Правила редактируем только через visudo: он проверит синтаксис, и сломанный файл не лишит вас sudo целиком. Удобно держать правила в отдельном файле:

visudo -f /etc/sudoers.d/support

Cmnd_Alias NETCMDS = /usr/bin/systemctl restart networking, /usr/sbin/ip
%support ALL=(root) NETCMDS

Группа support получает ровно эти команды и ничего больше. Проверить, что разрешено конкретному пользователю:

sudo -l -U user1

Чего не делать

  • не выдавать ALL «временно»: временное остаётся навсегда;
  • не разрешать редакторы и интерпретаторы (vim, python) через sudo: из них легко получить полный root-шелл;
  • не ставить 777 на общий каталог ради удобства.