Назад | Перейти на главную страницу

Как разрешить пользователю изменять только определенный защищенный файл с помощью sudo

Мне нужно разрешить пользователю изменять некоторые файлы с помощью sudo, у которых есть доступ только для чтения.

Например, я хочу предоставить пользователюхозяин'изменить'/ etc / hosts' файл. Я добавил в sudoers следующую строку:

hosteditor ALL=(root) /usr/bin/vim /etc/hosts

Теперь пользователь хозяин может использовать vim только для изменения файла / etc / hosts. Но если эти пользователи при изменении файла введите ! / bin / sh он получит разрешение на выполнение всех команд с правами root.

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

После некоторого изучения этой проблемы я нашел 3-й вариант решения этой проблемы.

Редактируя sudoers, мы можем дать пользователю разрешение на запуск sudoedit. Это безопасный способ изменения файлов только с правами root без возможности взлома. Так что ответ

hosteditor ALL=(root) sudoedit /etc/hosts

Не используйте для этого СУДО. Вместо этого добавьте хостедитора в группу и делегируйте этой группе доступ на запись, используя списки управления доступом к файлам POSIX. Уважать http://linux.die.net/man/1/setfacl для команды для управления списками контроля доступа и http://linux.die.net/man/5/acl для фактического описания ACL под Linux. Это, конечно, предполагает, что вы используете файловую систему и систему аутентификации, которые поддерживают списки управления доступом к файлам POSIX. Чтобы гарантировать, что разрешения остаются примененными, вы, вероятно, захотите делегировать приложение ACL инструменту управления конфигурацией. Puppet может выполнять списки ACL POSIX (см. https://github.com/dobbymoodge/puppet-acl). CFEngine может это сделать (см. https://auth.cfengine.com/archive/manuals/cf-manuals/cf2-Reference#acl), и я уверен, что Chef тоже может.

Другой вариант - предоставить команду или службу, которую хостедитор может использовать для создания файла / etc / hosts из базы данных / электронной таблицы и шаблона. Это повысит гибкость и позволит вам добавить элементы управления в команду или службу.

Я уверен, что есть и другие хорошие способы решить эту проблему, включая отдельный экземпляр DNS (или даже отдельное представление DNS, если используется BIND9) и предоставление учетной записи хостедитора возможности добавлять и удалять записи с помощью команды NSUPDATE (см. http://linux.die.net/man/8/nsupdate)

Удачи.

Любая команда может быть запущена из vi, включая оболочку, поэтому разрешать пользователю запускать vi через sudo небезопасно. Более безопасным вариантом было бы установить разрешения, как предлагает предыдущий ответ. Если вы не можете этого сделать, настройте sudo, чтобы разрешить копирование в файл:

Cmnd_Alias ​​CP_ETC_HOSTS = / bin / cp -v ./hosts / etc / hosts

Они могут редактировать копию файла и копировать свою измененную версию в / etc / hosts.