Проблема с безопасностью.
В один прекрасный день у меня возникла необходимость собрать несколько приложений с помощью ./configure, make и make install в директорию /usr/local. От глупых make install-ов решил себя обезопасить командой chown -R user_name:devel /usr/local и дальнейшую работу по сборке вел из под user_name. Все прекрасно поставилось. Вечером решил обновить gimp. Запустил sudo portage -va gimp и вдруг вижу, что portage выдает ошибку, что не смог найти perl модуль XML::Parser. Хотя этот модуль стоял в /usr/lib/perl и eix выдал сообщение: eix XML-Parser
[I] dev-perl/XML-Parser
Available versions: 2.34 2.34-r1 2.36
Installed versions: 2.36(13:42:12 20.03.2009)
Homepage: http://search.cpan.org/~msergeant/
Description: A Perl extension interface to James Clark's XML parser, expat
Мда... Подумал я и понял, что portage использовал perl из директории /usr/local.
Раньше я не думал, в каком порядке bash ищет программы по переменной $PATH, вопрос меня этот заинтересовал и я набрал следующие команды из под своего логина user_name
1.
user_name@tux ~ $ sudo echo $PATH
/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/i486-pc-linux-gnu/gcc-bin/4.1.2:/usr/i686-pc-linux-gnu/gcc-bin/4.1.2:/usr/kde/3.5/bin:/usr/qt/3/bin:/usr/games/bin:/opt/coccinella
2.
user_name@tux ~ $ echo $PATH
/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/i486-pc-linux-gnu/gcc-bin/4.1.2:/usr/i686-pc-linux-gnu/gcc-bin/4.1.2:/usr/kde/3.5/bin:/usr/qt/3/bin:/usr/games/bin:/opt/coccinella
Как видим, пути из под sudo и user_name совпали.
3.
Потом я сказал
user_name@tux ~ $ su
Пароль:
tux user_name # echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin
И обалдел от разницы между 1 и 3.
Я вышел из системы и набрал в терминале login:root passwd:******
Вошел как рут и набрал
tux ~ # echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin:/usr/i486-pc-linux-gnu/gcc-bin/4.1.2:/usr/i686-pc-linux-gnu/gcc-bin/4.1.2:/usr/kde/3.5/sbin:/usr/kde/3.5/bin:/usr/qt/3/bin:/opt/coccinella
И снова все поменялось. Опечалился я и написал небольшую прогу:
main () {
printf("Podmenil ls!!!");
}
скомпилил.
gcc -o ls a.c
поместил в /usr/local/bin и получил то, что из под рута команда ls перестала работать.
Вот такие выводы ls :
1.
При заходе в систему как root
tux ~ # ls
Podmenil ls!!!tux ~ #
2.
В руте с sudo.
tux ~ # sudo ls
xorg.conf.new
Работает:)
3.
Из под юзера
user_name@tux ~ $ ./ls
Podmenil ls!!!
Не работает.
4.
Из под юзера с sudo
user_name@tux ~ $ sudo ls
a.c Kiosk rtl8187se_linux_26.1016.0716.2008 rtl8187se_linux_26.1023.1118.2008.tar.gz
DEADJOE linux-uvc rtl8187se_linux_26.1016.0716.2008.tar.gz uvcvideo-56cf0f1772f7
Desktop MyDoc rtl8187se_linux_26.1023.1118.2008 uvcvideo-56cf0f1772f7.tar.bz2
А тут работает!!!
В общем очень странное поведение с точки зрения здравого смысла.
Я ожидал, что система из под рута не запустит ls, который лежит в /usr/local/bin.
И причем не важно, каким способом я получаю права. С помощью su, sudo или (login,passwd)
- Для комментирования войдите или зарегистрируйтесь
Не вижу здесь неправильного
Не вижу здесь неправильного поведения -
/usr/local/bin
изначально доступен на запись только root'у. А если атакующий получает права с помощью su, sudo или (login,passwd), то он наверняка найдёт намного более лёгкий способ, как скомпрометировать систему. Это всё равно, что жаловаться, что система позволяет администратору себя удалить.Re: Не вижу здесь неправильного
Неправильно то, что при вызове make install нет никакой гарантии, что установленное барахло в /usr/local/ не заменит стандартные команды в Linuxe. И если система portage начинает использовать проги из /usr/local, то тогда зачем вообще нужна данная директория? Что можно делать в /usr/local?
Блин, мешанина левого. 1.
Блин, мешанина левого.
1. Ошибка XML-Parser - это классика жанра, обновление libxml2 побило все пакеты от него зависимые. Пересборка revdep-rebuild + emerge XML-PArser.
2. Вторая классика жанра. su не использует переменные окружения рута, если не заходить под su -l, аналогично с sudo
Не грусти, товарищ! Всё хорошо, beautiful good!
Re: Блин, мешанина левого. 1.
1.
После удаления perl из /usr/local gimp скомпилися без ошибок.
2. За su -l спасибо. Буду знать.
Но сейчас su -l только ухудшило положение. Пока второй ls лежит в /usr/loca/bin
user_name@tux ~ $ su -l
Пароль:
tux ~ # ls
Podmenil ls!!!
Видимо /usr/local не стоит использовать для экспериментов с установкой программ.
Вас ещё удивляет тот факт,
Вас ещё удивляет тот факт, что в любом дистрибутиве установка программ мимо стандартного механизма управления ПО (в каждом дистрибутиве своего) ведёт к хаосу?
С
rm
'ом вне/home
тоже должно соблюдать осторожность.ЗЫ: Подобным образом ставить программы можно разве что в пределах домашнего каталога пользователя. Так хотя бы система не засоряется.
:wq
--
Live free or die
Это не бага, это фишка! (с)
Это не бага, это фишка! (с) Просто о ней надо помнить если по какой-то причине хочется держать исполняемые файлы с одинаковыми именами в разных папках перечисленных в $PATH
Естественно, запуская любую программу с правами рута нужно быть уверенным из каких-то общих соображений, что эта программа не бомба и не троян, что она не собирается сносить твою систему. Это верно для любого исполняемого файла, не только для команды make install
Если нет такой уверенности, программу нужно запускать с ограниченными правами, а лучше вообще не запускать, а удалить. :)