Linux, безопасность · 4 min read · Nov 14, 2025

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

Предположим, вы системный администратор в компании, где команды в основном работают на Linux с ограниченными привилегиями. Теперь представьте ситуацию, когда членам одной из команд - в рамках новой работы - необходимо часто редактировать файл, который требует привилегий суперпользователя. Что бы вы сделали?

Одним из вариантов является предоставление им доступа ‘sudo’, но это было бы похоже на то, чтобы дать незнакомцу доступ ко всему вашему дому, когда им нужно только попасть в одну из ваших комнат - что я имею в виду, так это то, что стандартный доступ ‘sudo’ позволит им делать все, что требует привилегий root, когда все, что требуется, это возможность редактировать определенный системный файл.

Учитывая ту гибкость, которую предлагает ‘sudo’, у вас есть другой вариант - настроить политику ‘sudo’ таким образом, чтобы предоставлялась только привилегия редактирования запрашиваемого файла. Например, что-то вроде этого:

%newsudo ALL = vim /path/to/file

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

Чтобы понять, о чем я говорю, рассмотрим сценарий, в котором упомянутый ограниченный доступ предоставляется группе, и кто-то открывает запрашиваемый файл для редактирования с помощью команды ‘sudo’.

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

:shell

Это мгновенно поместит вас в интерактивную оболочку. Если вы пробуете эти шаги на своем компьютере, просто выполните команду ‘whoami’, и вы поймете, о какой лазейке я говорил - Да, вы находитесь в оболочке как root.

Вот пример скриншота:

Не нужно и говорить, что цель предоставления доступа к редактированию только одного файла была нарушена, и пользователь теперь может делать ВСЕ.

Давайте посмотрим, есть ли у нас другой вариант. Существует тег NOEXEC, который вы можете использовать в вашей записи sudoers:

%newsudo ALL = NOEXEC: vim /path/to/file

NOEXEC в основном позволяет вам предотвратить выполнение программы, запущенной с помощью sudo, других программ. Так что, является ли это окончательным решением? К сожалению, нет. Что касается причин, вот как руководство по sudoers объясняет этот тег:

noexec  

Многие системы, поддерживающие общие библиотеки, имеют возможность переопределять функции библиотек по умолчанию, указывая переменную окружения (обычно LD_PRELOAD) на альтернативную общую библиотеку. На таких системах функциональность noexec sudo может быть использована для предотвращения выполнения программы, запущенной с помощью sudo, других программ. Обратите внимание, однако, что это относится только к нативным динамически связанным исполняемым файлам. Статически связанные исполняемые файлы и иностранные исполняемые файлы, работающие под бинарной эмуляцией, не затрагиваются.  

Функция noexec известна тем, что работает на SunOS, Solaris, *BSD, Linux, IRIX, Tru64 UNIX, MacOS X, HP-UX 11.x и AIX 5.3 и выше.  
...
...
...
Чтобы включить noexec для команды, используйте тег NOEXEC, как описано в разделе Спецификация пользователя выше. Вот этот пример снова:  

aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi  

Это позволяет пользователю aaron запускать /usr/bin/more и /usr/bin/vi с включенным noexec. Это предотвратит выполнение этих двух команд других команд (таких как оболочка). Если вы не уверены, поддерживает ли ваша система noexec, вы всегда можете просто попробовать и проверить, работают ли оболочки, когда noexec включен.  

Обратите внимание, что ограничение оболочек не является панацеей. Программы, работающие от имени root, все еще способны выполнять многие потенциально опасные операции (такие как изменение или перезапись файлов), которые могут привести к непреднамеренному повышению привилегий.  
...
...
...

Если вы внимательно прочитаете текст, выделенный жирным шрифтом, вы поймете, что NOEXEC имеет свои ограничения.

Так что же тогда самое надежное решение? Что ж, это sudoedit. Даже руководство по sudoers также рекомендует этот инструмент:

В конкретном случае редактора более безопасным подходом является предоставление пользователю разрешения на запуск sudoedit.

Sudoedit - это встроенная команда, которая позволяет пользователям безопасно редактировать файлы. Согласно странице man sudo, ‘sudoedit’ эквивалентен выполнению ‘sudo’ с параметром командной строки ‘-e’.

Почему это лучше

С помощью ‘sudoedit’ пользователи могут выбрать свой предпочтительный редактор - что отличается от решения, которое мы обсуждали в начале этого руководства, где пользователи вынуждены использовать редактор Vim - позволяя им наслаждаться своими собственными настройками. И самая большая причина из всех, с ‘sudoedit’ пользователь будет редактировать файл как сам, а не как ‘root’.

Как работает Sudoedit

Чтобы использовать sudoedit, запись в sudoers должна быть, например, что-то вроде этого:

%newsudo ALL = sudoedit /path/to/file

И пользователи, которые являются частью группы ‘newsudo’, смогут редактировать файл, выполнив следующую команду:

sudoedit /path/to/file

Таким образом, эта команда сначала создаст временную копию файла, который вы хотите редактировать. Затем команда будет искать переменные окружения SUDO_EDITOR, VISUAL и EDITOR (в этом порядке), чтобы определить, какой редактор следует вызвать для открытия только что созданной временной копии. После того, как пользователь закончит работу с изменениями, изменения копируются обратно в оригинальный файл.

Вот подробное объяснение из страницы man команды ‘sudo’:

-e, --edit  
Редактировать один или несколько файлов вместо выполнения команды. Вместо имени пути строка "sudoedit" используется при обращении к политике безопасности. Если пользователь авторизован политикой, выполняются следующие шаги:  

 1. Создаются временные копии файлов, которые будут редактироваться, с  
 владельцем, установленным на вызывающего пользователя.  

 2. Редактор, указанный политикой, запускается для редактирования  
 временных файлов. Политика sudoers использует  
 переменные окружения SUDO_EDITOR, VISUAL и EDITOR (в  
 этом порядке). Если ни одна из SUDO_EDITOR, VISUAL или EDITOR  
 не установлена, используется первая программа, указанная в опции редактора  
 sudoers(5).  

 3. Если они были изменены, временные файлы копируются обратно в  
 их оригинальное местоположение, а временные версии удаляются.  

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

К этому моменту у вас должно быть общее представление о ‘sudoedit’, включая, когда его использовать и почему это лучше, чем использование ‘sudo’, когда все, что вам нужно, это редактировать файл или несколько файлов. Конечно, как и любой другой инструмент, связанный с безопасностью, ‘sudoedit’ имел свои уязвимости, но это все еще рекомендуемое решение во многих случаях использования.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.