Права доступа и sudoers в 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на общий каталог ради удобства.