Представьте, что вы являетесь системным администратором в компании, в которой несколько команд разработчиков используют Linux для совместной работы над файлами проекта, причем каждый из разработчиков обладает ограниченными привилегиями в системе. А теперь представьте, что участникам одной из команд понадобилось приступить к новой работе, связанной с необходимостью периодического редактирования файлов, для модификации которых требуются привилегии пользователя root. Что бы вы сделали в этом случае?
Одним из вариантов является предоставление этим разработчикам доступа к функциям утилиты sudo, но это эквивалентно предоставлению ключей от вашего дома случайному человеку с улицы, хотя он просит лишь временно пожить в одной из комнат; я хотел сказать о том, что предоставление доступа к утилите sudo по умолчанию подразумевает возможность выполнения всех требующих привилегий пользователя root действий, хотя все, что нужно пользователям - это иметь возможность редактирования определенного системного файла.
Принимая во внимание гибкость конфигурации sudo, можно рассмотреть другой вариант, заключающийся в настройке политики sudo с ограничением спектра возможных действий запуском текстового редактора с передачей пути к интересующему файлу. Например, для этого может использоваться аналогичная директива:
%newsudo ALL = vim /путь/к/файлу
Хотя данный вариант конфигурации, без каких-либо сомнений, является более безопасным, чем предоставление пользователям неограниченного доступа к утилите sudo, все же существует одна лазейка, с помощью которой может быть нарушено корректное функционирование системы.
Для лучшего понимания того, о чем я говорю, следует рассмотреть гипотетический сценарий, в соответствии с которым описанная возможность ограниченного доступа к утилите sudo была предоставлена группе пользователей, после чего один из пользователей открыл файл с заданным именем с помощью утилиты sudo для редактирования.
Находчивый пользователь, имеющий опыт работы с текстовым редактором vim, сразу же поймет, что у него имеется возможность запуска командной оболочки непосредственно из текстового редактора - все, что для этого нужно - это выполнить с помощью текстового редактора следующую команду vim:
:shell
В результате пользователь переместится в интерактивную командную оболочку. Если вы попытаетесь повторить описанную конфигурацию на своем компьютере и исполните команду whoami, вы сразу же поймете, о какой лазейке шла речь - да, вы окажитесь в интерактивной командной оболочке, запущенной от лица пользователя root.
А это иллюстрация с соответствующим выводом:
Не стоит лишний раз говорить о том, что при использовании описанной конфигурации вместо возможности редактирования отдельного системного файла пользователь получит возможность делать в системе все, что ему угодно.
Давайте рассмотрим другие варианты данной конфигурации. Существует тэг NOEXEC, который может использоваться в файле конфигурации sudoers:
%newsudo ALL = NOEXEC: vim /путь/к/файлу
По сути, тэг NOEXEC позволяет предотвратить запуск силами запущенной с помощью утилиты sudo программы любых других программ. То есть, рабочее решение найдено? К сожалению, нет. Для иллюстрации данного утверждения следует привести выдержку со страницы руководства файла конфигурации sudoers.
noexec
Во многих системах, поддерживающих разделяемые библиотеки, имеется возможность переназначения стандартных библиотечных функций путем передачи пути к альтернативной реализации разделяемой библиотеки посредством переменной окружения (обычно она носит имя LD_PRELOAD). В таких системах технология noexec может использоваться для предотвращения запуска силами запущенных с помощью sudo программ любых других программ. Однако, следует помнить о том, что данная технология работает лишь в случае использования динамически связанных бинарных файлов для используемой системы. Статически связанные бинарные файлы для используемой системы и любые бинарные файлы для других систем, запускаемые с помощью бинарных эмуляторов, не подпадают под ее действие.
Описанная технология работоспособна в таких системах, как SunOS, Solaris, *BSD, Linux, IRIX, Tru64 UNIX, MacOS X, HP-UX версии 11.x, а также AIX версии 5.6 и более новых версий.
...
Чтобы активировать технологию noexec для заданной команды следует использовать тэг NOEXEC таким образом, как описано в приведенном выше разделе "Пользовательские спецификации". А это пример:
aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
В данном случае пользователю с именем aaron разрешается запускать бинарные файлы /usr/bin/more и /usr/bin/vi с активацией технологии noexec. Эта технология позволяет предотвратить исполнение силами упомянутых программ других программ (таких, как командная оболочка). Если вы не уверены в том, поддерживается ли технология noexec вашей системой, вы всегда можете самостоятельно проверить возможность использования функций командной оболочки в текстовом редакторе vi, запущенном с тэгом для активации noexec.
Учтите, что запрет использования командной оболочки в vi не является панацеей. Программы, запущенные от лица пользователя root потенциально могут выполнить огромное количество опасных операций (например, модифицировать или перезаписать системные файлы), что может использоваться для повышения привилегий в системе.
...
Если вы внимательно прочитали выделенный жирным шрифтом текст, вы наверняка поняли, что тэг NOEXEC имеет ряд ограничений.
Итак, в чем же состоит наиболее безопасное решение? Ну, достаточно использовать sudoedit. Этот инструмент рекомендуется к использованию даже не странице руководства файла конфигурации sudoers:
При возникновении необходимости работы с текстовым редактором наиболее безопасным решением является предоставление пользователю возможности запуска sudoedit.
Sudoedit
Sudoedit является встроенным в утилиту sudo механизмом запуска текстового редактора для безопасной модификации файлов. В соответствии со страницей руководства sudo, исполнение команды sudoedit эквивалентно исполнению команды sudo с параметром -e.
Почему описанное решение является предпочтительным
При работе с sudoedit у пользователей есть возможность выбора предпочтительного текстового редактора, что выгодно отличает рассматриваемое решение от решения, описанного в начале статьи и подразумевающего принудительное использование текстового редактора vim без возможности его замены путем модификации каких-либо системных настроек. А главное преимущество решения на основе sudoedit заключается в том, что пользователь редактирует системный файл самостоятельно, а не от лица пользователя root.
Принцип работы sudoedit
Для использования sudoedit в файле конфигурации sudoers должна быть размещена аналогичная директива:
%newsudo ALL = sudoedit /путь/к/файлу
После этого все пользователи из группы newsudo будут иметь возможность редактировать файл после исполнения следующей команды:
sudoedit /путь/к/файлу
В результате исполнения данной команды в первую очередь создается временная копия указанного файла. После этого осуществляется поиск переменных окружения SUDO_EDITOR, VISUAL и EDITOR (в указанном порядке) для выяснения пути к бинарному файлу текстового редактора, который будет задействован для редактирования только что созданной временной копии файла. После того, как пользователь закончит редактирование файла, изменения будут скопированы в оригинальный файл.
А это детальное описание соответствующего параметра со страницы руководства sudo:
-e, --edit
Отредактировать один или несколько файлов вместо исполнения команды. При описании политики безопасности вместо пути может использоваться строка "sudoedit". Если политика безопасности позволяет пользователю редактировать файлы, осуществляются следующие действия:
Создаются временные копии редактируемых файлов, принадлежащие вызывающему текстовый редактор пользователю.
Для редактирования временных копий файлов запускается определяемый политикой безопасности текстовый редактор. Стандартная политика, описанная в файле sudoers, предусматривает использование переменных окружения SUDO_EDITOR, VISUAL и EDITOR (в приведенном порядке). Если значения переменных окружения SUDO_EDITOR, VISUAL и EDITOR не заданы, вызывается первая программа, заданная с помощью параметра editor в файле конфигурации sudoers.
Если временные файлы были модифицированы, они перемещаются и заменяют собой оригинальные версии файлов.
Если указанного файла не существует, он будет создан. Обратите внимание на то, что в отличие большинства запускаемых с помощью sudo команд, текстовый редактор запускается с неизменным окружением вызывающего пользователя. В том случае, если по какой-то причине sudo не удается обновить содержимое файла, приведя его в соответствие с модифицированной версией, пользователь увидит предупреждение, а модифицированная версия файла будет сохранена.
Заключение
Теперь вы должны иметь хотя бы базовое представление о команде sudoedit, а именно, знать о том, когда следует использовать эту команду и почему ее следует использовать вместо sudo при возникновении необходимости в редактировании одного или нескольких файлов. Конечно же, как и любой инструмент, работающий с повышенными привилегиями, sudoedit подвергается атакам, но при этом он все еще рекомендуется к использованию в различных ситуациях.
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]
Волк слабее льва и тигра, но в цирке волк не выступает!
Волк - единственный из зверей, который может пойти в бой на более сильного противника.
Если же он проиграл бой, то до последнего вздоха смотрит в глаза противника. После этого умирает...
Администратор сайта laptop.ucoz.ru не несет ответственности за содержание рекламных объявлений. Все используемые на сайте зарегистрированные товарные знаки принадлежат своим законным владельцам! Используемая со сторонних источников информация публикуется с обязательными ссылками на эти источники.