Проблема с безопасностью.

В один прекрасный день у меня возникла необходимость собрать несколько приложений с помощью ./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
Если нет такой уверенности, программу нужно запускать с ограниченными правами, а лучше вообще не запускать, а удалить. :)

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".