Я хотел бы создать нового пользователя и дать ему доступ sudo. Если быть точным, я хочу, чтобы он использовал sudo vim
и отредактировал httpd.conf. Я написал это в sudoers:
user ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf
Я, однако, слышал, что это может быть рискованно. Почему это проблематично? Насколько серьезна проблема?
vim
этого пользователь может свободно открывать и записывать любые файлы, которые ему нравятся./etc/httpd/confs/httpd.conf
. Затем используйте,chgrp [OPTION] GROUPNAME FILE
чтобы изменить владельца группы/etc/httpd/confs/httpd.conf
. Что-то вродеgroupadd vimportant
создания новой группы иchgrp -v vimportant /etc/httpd/confs/httpd.conf
смены владельца группы. yolinux.com/TUTORIALS/LinuxTutorialManagingGroups.htmlsudoers
странице руководства .sudo
доступ к vim, пользователь сможет использовать vim от имени пользователя root. В Vim вы можете запускать команды UNIX ( Как запускать команды Unix внутри Vim? ) , Так что пользователь сможет сделать вещь , какuseradd <myuser>
,rm -rf /
или многое другое.Ответы:
Хотя вы ограничиваете аргументы командной строки, ничто не мешает пользователю использовать vim для открытия, редактирования и перезаписи любого случайного файла, когда он запускается от имени пользователя root.
Пользователь может запустить,
sudo vim /etc/httpd/conf/httpd.conf
а затем:r /etc/sudoers
ПРИМЕЧАНИЕ: Если пользователь SELinux не ограничен, пользователь может читать любой файл таким образом!user ALL=(ALL) NOPASSWD: ALL
:w /etc/sudoers
Я могу представить десятки подобных способов, которыми ваш пользователь теперь может получить доступ, изменить или уничтожить вашу систему.
У вас даже не будет контрольного журнала, какие файлы были изменены таким образом, поскольку вы увидите, как он редактирует вашу конфигурацию Apache в сообщениях журнала sudo. Это угроза безопасности при предоставлении
sudo
прав любому редактору.Это более или менее та же самая причина, по которой предоставление прав корневого уровня sudo таким командам, как
tar
иunzip
часто небезопасно, ничто не мешает вам включать в архив замены системных двоичных файлов или файлов конфигурации системы.Второй риск, как отмечали многие другие комментаторы, заключается в том, что он
vim
допускает экранирование оболочки , при котором вы можете запустить вложенную оболочку из vim, которая позволяет вам выполнить любую произвольную команду . Из вашего сеанса sudo vim они будут работать как root, например, оболочка escape::!/bin/bash
даст вам интерактивную корневую оболочку:!/bin/rm -rf /
сделает для хороших историй в пабе.Что делать вместо этого?
Вы все еще можете использовать его,
sudo
чтобы разрешить пользователям редактировать файлы, которые им не принадлежат, безопасным способом.В вашей конфигурации sudoers вы можете установить специальную зарезервированную команду,
sudoedit
за которой следует полный (подстановочный) путь к файлам, которые пользователь может редактировать:Пользователь может затем использовать
-e
переключатель в своей командной строке sudo или использоватьsudoedit
команду:Как объяснено в справочной странице :
sudoers
Руководство также имеет целый раздел , как она может предложить ограниченную защиту от побегов оболочки сRESRICT
иNOEXEC
опциями.а также
источник
sudo tar
иsudo unzip
тоже вызывал проблемы. Спасибо.:!rm -rf /
ой!echo "user ALL=(ALL) NOPASSWD: ALL" > ~/sudoers; tar cv ~/sudoers | sudo tar xv -C /etc
И бум. Корневой доступ к tar является уязвимостью.:sh
затем бум, корневая оболочкаЭта конфигурация позволяет этому пользователю редактировать этот файл. Для этого он запускает
vim
редактор с правами root.После
vim
запуска команды пользователь может делать с редактором все, что ему нравится. - Он может открыть другой файл или даже запустить оболочку из VIM.Поэтому пользователь теперь может просматривать и редактировать произвольные файлы и выполнять произвольные команды в вашей системе.
источник
Замки безопасности
Некоторые программы, такие как, например
less
,vi
,vim
иmore
, чтобы другие программы для запуска из командной оболочки , что , как известно , как Shell побег или бежать к командному интерпретатору. В этих случаях вы можете использовать,NOEXEC
чтобы запретить некоторым программам запускать права других программ. Пример:Это позволило бы пользователю редактировать или около того и просматривать привилегированные файлы в системе, в которой запущен vim и более, но исключает возможность запуска других программ с привилегиями из интерпретатора escape-команд
vim
.Важно, что
sudo
включает в себя несколько блокировок безопасности (по умолчанию), которые могут предотвратить опасные задачи, такие как перенаправление стандартного вывода выполнения программы (STDOUT
) на файлы вне домашнего каталога пользователя.Если в файле определено,
/etc/sudoers
что пользователь может работать с привилегиями/usr/bin/vim
, то есть что-то вроде следующего:sudo
позволяет определенному обычному пользователю запускаться/usr/bin/vim
следующими способами:Но не позволяйте запускать vim следующим образом:
источник
Простой ответ:
Ниже приведена команда Vim:
У них теперь есть корневая оболочка.
источник
Одним из возможных дополнительных улучшений безопасности будет замена:
user ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf
с
user ALL=(ALL) /usr/bin/rvim /etc/httpd/confs/httpd.conf
а затем запустить пользователя
sudo rvim /etc/httpd/confs/httpd.conf
вместо этого.Vim поддерживает ограниченный режим, запускаемый с параметром командной строки -Z или запуском программы от имени rvim. Когда включен ограниченный режим, «все команды, использующие внешнюю оболочку, отключены». Этот подход не помешает пользователю использовать
:split file
команду ex для открытия других файлов, но, по крайней мере, должен предотвратить намеренно вредоносные команды оболочки, такие как:!rm -rf /
.источник
Я согласен с ответом HBruijn, что запуск vim от имени root действительно открывает систему очень широко, и sudoedit будет более безопасным решением.
Но даже тогда ваша система, скорее всего, все еще будет довольно открытой. По крайней мере, предполагая, что какой-то процесс apache с привилегиями root будет запущен на основе этой конфигурации. Существует миллион способов настроить Apache таким образом, чтобы он выполнял внешние программы. В качестве одного примера рассмотрим аргумент pipe для директивы CustomLog . В руководстве четко говорится:
Очевидно, что если ваши пользователи могут написать конфигурацию, они могут изменить эту программу на что угодно, например на то, что запускает сценарий оболочки, чтобы предоставить им дополнительные разрешения.
По этой причине я недавно взломал способ использования возможностей таким образом, чтобы apache мог получить специальную возможность привязки к привилегированному порту, даже если в противном случае он работает как обычный пользователь. Таким образом, пользователи могут редактировать конфигурацию и даже запускать сервер, и все еще в основном безопасны. Единственная проблема заключается в том, что они могут связать любой процесс на любом IP. Сохраняется определенная степень доверия, поскольку они могут найти способ сбить систему sshd, а затем запустить собственную версию в попытке получить пароль root.
источник
Следует отметить, что даже это
sudoedit {.../whatever.conf}
может представлять угрозу безопасности.Создать сценарий оболочки
/tmp/make_me_root.sh
и вызовите этот скрипт в вашем конфигурационном файле. Я знаю несколько примеров, где этот подход работает:
samba -> команда log nt token
syslog-ng -> program: отправка сообщений во внешние приложения
Apache -> CustomLog
Я предполагаю, что можно расширить этот список до бесконечности.
Все, что вам нужно сделать, это перезапустить службу. Конечно, как только вы станете пользователем root, вы вернете такие строки конфигурации, чтобы стереть следы.
источник
Конечно, это совсем не безопасно. Как уже говорилось, sudoedit - это самый простой и удобный способ сделать это.
Я хочу добавить, что vim позволяет запускать оболочку, поэтому он не только может редактировать любой системный файл, но также позволяет запускать оболочку и делать все, что он захочет.
Просто попробуйте запустить vim и наберите: sh
источник