Вопрос или проблема
Я хочу настроить sudoedit без пароля, чтобы редактировать файлы в /etc
с исключением самих файлов sudoers.
Я попробовал использовать следующий файл /etc/sudoers.d/sudoedit
:
%sudo ALL=(root) NOPASSWD: sudoedit ^/etc/(?!sudo).*$
Но это, похоже, не работает, так как sudo использует старый механизм регулярных выражений без функции отрицательной проверки.
Существует ли другой способ добиться этого? Может быть, с комбинацией /etc
и отрицанием !/etc/sudo
?
Ответ или решение
Настройка Passwordless sudoedit с Исключением Файлов sudoers
Ваша задача — настроить возможность использования sudoedit
без ввода пароля при редактировании файлов в директории /etc
, исключая возможность работы с файлами конфигурации sudoers. Эта проблема достаточно распространена среди администраторов систем, и подход к её решению включает понимание синтаксиса файла sudoers и особенностей применения регулярных выражений.
Судя по описанию вашей ситуации, вы уже сделали попытку использовать следующий набор правил в файле /etc/sudoers.d/sudoedit
:
%sudo ALL=(root) NOPASSWD: sudoedit ^/etc/(?!sudo).*$
Однако, как вы правильно отметили, sudo
использует устаревший механизм регулярных выражений, который не поддерживает функции, такие как негативный предшественник. Это затрудняет задачу исключения определённых файлов, таких как файлы конфигурации sudoers, из набора разрешённых для редактирования.
Альтернативный Способ Решения Задачи
Для успешной настройки вам необходимо использовать либо множественные записи, либо не использовать регулярные выражения в том виде, в котором вы пытались. Ниже представлены два подхода, которые помогут вам достичь желаемого результата:
1. Использование Явного Перечисления
Наиболее эффективным и простым способом будет явное перечисление разрешённых файлов. Например:
%sudo ALL=(root) NOPASSWD: /usr/bin/sudoedit /etc/*, !/etc/sudoers, !/etc/sudoers.d/*
В этой строке:
%sudo ALL=(root) NOPASSWD:
— позволяет всем пользователям группы sudo выполнять команды как root без пароля./usr/bin/sudoedit /etc/*
— разрешает редактировать все файлы в каталоге/etc
.!/etc/sudoers
и!/etc/sudoers.d/*
— исключает конкретные файлы и директории, что предотвращает редактирование их черезsudoedit
.
Таким образом, данная запись точно содержит правила, которые обеспечивают исполнение ваших требований.
2. Регулярные Выражения (без отрицательных предшественников)
Если вы предпочитаете использовать регулярные выражения, можно попробовать использовать слэш для навигации через путь. Однако, опять же, стоит помнить о ограничениях на использование сложных регулярных выражений. Можно ограничиться базовыми паттернами:
%sudo ALL=(root) NOPASSWD: sudoedit /etc/*, !(sudoers|sudoers.d)
Здесь также необходимо соотнести паттерн так, чтобы учесть условие исключения файлов.
Заключение
Подводя итоги, рекомендуется использовать явное перечисление файлов, чтобы избежать возможных недоразумений и улучшить читаемость конфигурации. Убедитесь, что после внесения изменений в файл sudoers вы тщательно их протестировали. Проверка может быть осуществлена с помощью команды sudo visudo
, которая защищает ваши настройки от ошибок.
Такой подход обеспечит безопасность вашего окружения и позволит вам без труда редактировать файлы в /etc
без лишнего ввода пароля, с исключением файлов sudoers, что является наилучшим вариантом для обеспечения стабильной работы системы.