Предположим пользователю нужно мочь редактировать конфиг. Пусть это будет
sshd. Казалось бы в sudoers вот такой записи будет достаточно:user ALL=(ALL) /bin/vim /etc/ssh/sshd_config
Проблема в том, что редакторы и просмотрщики
vim,emacs,less,more... предоставляют возможность выхода в shell.Открываем через sudo разрешенный нам редактировать конфиг и вводим:
:shell
После чего видим как мы получили root на машине. Команды
:shell в зависимости от дистрибутива может отличаться.Чтобы избежать подобного, нужно давать использовать не
vim а редактор sudoedit, т.е.user ALL=(ALL) sudoedit /etc/ssh/sshd_config
Это не позволит пользователям выходит в root shell.
Тоже самое можно получить выдав права на например
less. В less можно получить shell введя !bash. Чтобы избежать этого, правильная запись в sudoers будет:user ALL=(ALL) NOEXEC: /usr/bin/less
Касательно пользовательских скриптов запуска. Давая на них права, никогда не оставляйте их в директории пользователя. Меняйте директорию и владельца, чтобы пользователь не мог их редактировать. Имея sudo на скрипт, его легко изменить, чтобы получить root shell.
#linux_security