CentOS + интересная задача + /tmp (noexec)

1 234
Boris A Dolgov
На сайте с 04.07.2007
Offline
215
#21
Romka_Kharkov:

Boris A Dolgov - а у вас какие есть предложения по сути вопроса?

Настраивать серверы так, чтобы запущенный perl-скрипт (как и бинарник, как и php-скрипт, как и пользователь в ssh) не мог никому навредить.

Закрыть в iptables коннекты на 25 порт не от почтового сервера и слишком много коннектов на чужие серверы, хранить пользователей в chroot/jail/cagefs, выделять им ресурсы через rlimit/cgroups/lve.

С уважением, Борис Долгов. Администрирование, дешевые лицензии ISPsystem, Parallels, cPanel, DirectAdmin, скины, SSL - ISPlicense.ru (http://www.isplicense.ru/?from=4926)
Romka_Kharkov
На сайте с 08.04.2009
Offline
485
#22
WapGraf:
Romka_Kharkov, я описал конкретно только про perl, который упоминался ранее.
Возможно я и неверно понял суть задачи. Как правило с помощью noexec защищают временную директорию сервера, а не пользователя. Я так понял что речь идет об опасности, что пользователь может запускать не свое.
На каждого пользователя создавать noexec?

Вы вообще не услышали меня, еще раз поясняю, есть обычная папка /tmp В которую валятся сессии апача и прочее... прочее.... есть пользователи с ssh (и без него) доступом, допустим те кто с ним, вообще могут делать это без проблем, а те кто без доступа - заливают файл от имени апача....

Итого, при установленном noexec на раздел /tmp фиксируется только флаг +x .... но если запускать интерпритатор перл и передавать ему файл на вход, как показано в первом посте - noexec получается "за бортом"......

Для проверки сделайте следующее:

создайте /tmp/a.pl, потом установите на него 755, ну и ессесно смонтируйте /tmp с noexec после чего попробуйте от любого юзера выполнить сценарий путем cd /tmp ; ./a.pl , А после этого путем /usr/bin/perl /tmp/a.pl , вот тогда вы поймете о чем я . :)

---------- Добавлено 23.09.2013 в 00:59 ----------

Boris A Dolgov:
Настраивать серверы так, чтобы запущенный perl-скрипт (как и бинарник, как и php-скрипт, как и пользователь в ssh) не мог никому навредить.
Закрыть в iptables коннекты на 25 порт не от почтового сервера и слишком много коннектов на чужие серверы, хранить пользователей в chroot/jail/cagefs, выделять им ресурсы через rlimit/cgroups/lve.

Конкретно в моем случае, есть нечто похожее, файрвол закрывает очень много на выход если не все, по этому запущенные демоны не представляют угрозы и не листят порты для хакеров, но они запущены и в данном конкретном случае фиг понятно от какого пользователя, так как любой от nobody заливает в /tmp и крутит там )))) я вот недавно сервер анализировал выловил штук 5 таких вот запущенных демонов, а не обратил внимание ранее именно по тому, что они ничего не могли листить и тому подобное, просто обратил внимание не процессы и полез посмотреть ))) а у меня в /tmp там уже набор "юного хакера" :)

Чем помогут rlimit и lve ?

Есть около 15.000 ipv4 !!! (http://onyx.net.ua/price.php#ipv4) Качественный хостинг с 2005 года - лучшее клиентам! (http://onyx.net.ua/)
Glueon
На сайте с 26.07.2013
Offline
172
#23

Romka_Kharkov,

Да, я серьезно не понял в чем смысл вопроса, потому что ответ очевиден:

noexec

Do not allow direct execution of any binaries on the mounted filesystem. (Until recently it was possible to run binaries anyway using a command like /lib/ld*.so /mnt/binary. This trick fails since Linux 2.4.25 / 2.6.0.)
Romka_Kharkov:
Для проверки сделайте следующее:
создайте /tmp/a.pl, потом установите на него 755, ну и ессесно смонтируйте /tmp с noexec после чего попробуйте от любого юзера выполнить сценарий путем cd /tmp ; ./a.pl , А после этого путем /usr/bin/perl /tmp/a.pl , вот тогда вы поймете о чем я .

root@localhost:/tmp# perl a.pl
1
root@localhost:/tmp# ./a.pl
-bash: ./a.pl: Permission denied
root@localhost:/tmp# sudo -u www-data perl /tmp/a.pl
1

Вроде как ожидаемый результат ...😕 Где проблема? noexec запрещает любой прямой вызов не смотря на права файла и действует только на файлы в той папке, у которой noexec указан.

Есть много IP-сетей в аренду под прокси, парсинг, рассылки (optin), vpn и хостинг. Телега: @contactroot ⚒ ContactRoot команда опытных сисадминов (/ru/forum/861038), свой LIR: сдаем в аренду сети IPv4/v6 (/ru/forum/1012475).
Boris A Dolgov
На сайте с 04.07.2007
Offline
215
#24
Romka_Kharkov:

Конкретно в моем случае, есть нечто похожее, файрвол закрывает очень много на выход если не все, по этому запущенные демоны не представляют угрозы и не листят порты для хакеров, но они запущены и в данном конкретном случае фиг понятно от какого пользователя, так как любой от nobody заливает в /tmp и крутит там )))) я вот недавно сервер анализировал выловил штук 5 таких вот запущенных демонов, а не обратил внимание ранее именно по тому, что они ничего не могли листить и тому подобное, просто обратил внимание не процессы и полез посмотреть ))) а у меня в /tmp там уже набор "юного хакера" :)

Чем помогут rlimit и lve ?

А кто у Вас может выполнять что-то под nobody? Обычные пользователи не должны. Возможно, это дырявый phpMyAdmin и его надо обновить.

rlimit и lve поможет снизить потребление ресурсов этими скриптами. Часто если открывать коннекты им запрещено, они начинают зависать в бесконечном цикле и потреблять cpu.

S
На сайте с 07.11.2008
Offline
152
#25
Romka_Kharkov:
а те кто без доступа - заливают файл от имени апача....

Кажется я понял, в чем у Вас проблема. Все php-скрипты пользователей у Вас выполняются от пользователя апач. А скрипты у школоло обычно дырявые. И в результате Вы не можете найти того, кто запускает что-то из tmp. Если это так, то Вам нужно не tmp фиксить, а пользователей переводить на работу от своего имени, т.к. хакер может залить скрипт в любую директорию пользователя, у которой будет доступ на запись, а потом просто запустить скрипт с другим путем. Неужели не сталкивались со скриптами, у которых путь "/".

Андрей
На сайте с 30.09.2009
Offline
482
#26
Romka_Kharkov:
а те кто без доступа - заливают файл от имени апача....

Ну вот и настройте систему чтобы не от одного апача все бегало.

Romka_Kharkov:
Вы вообще не услышали меня, еще раз поясняю, есть обычная папка /tmp В которую валятся сессии апача и прочее... прочее.... есть пользователи с ssh (и без него) доступом, допустим те кто с ним

И?

У каждого пользователя должна быть своя tmp. И даже если общая то пользователь выполнить сможет _только_свои_ файлы, ну разумеется если все не бегает по дефолту от нободи или апаче.

EuroHoster.org ( https://eurohoster.org/ru/ ) - территория быстрых серверов. Выделенные серверы, VPS, SSL, домены и VPN.
A
На сайте с 19.07.2010
Offline
130
#27
Romka_Kharkov:
любой от nobody заливает в /tmp и крутит там

скажите спасибо, что они оставили хоть какие-то следы :)

если у вас разрешен шелл и/или перл, то любое закрытие диры /tmp не поможет, т.к. по сути для записи или запуска эта дира не нужна. (stdin+perl)

ps: при помощи гугла попытался вспомнить перл... примеры сбросил в личку.

.............
Romka_Kharkov
На сайте с 08.04.2009
Offline
485
#28
Boris A Dolgov:
А кто у Вас может выполнять что-то под nobody? Обычные пользователи не должны. Возможно, это дырявый phpMyAdmin и его надо обновить.
rlimit и lve поможет снизить потребление ресурсов этими скриптами. Часто если открывать коннекты им запрещено, они начинают зависать в бесконечном цикле и потреблять cpu.

Ну... у меня еще есть пара серверов на которых все пользователи , а точнее их сайты из под nobody работают .... понимаю, что проблема больше в этом, нежели в самом noexec ;))) но все же :D

---------- Добавлено 23.09.2013 в 12:58 ----------

seolancer:
Кажется я понял, в чем у Вас проблема. Все php-скрипты пользователей у Вас выполняются от пользователя апач. А скрипты у школоло обычно дырявые. И в результате Вы не можете найти того, кто запускает что-то из tmp. Если это так, то Вам нужно не tmp фиксить, а пользователей переводить на работу от своего имени, т.к. хакер может залить скрипт в любую директорию пользователя, у которой будет доступ на запись, а потом просто запустить скрипт с другим путем. Неужели не сталкивались со скриптами, у которых путь "/".

Сталкивались, только вот в "/" положить не могут точно, а в "/tmp" пожалуйста, вы правильно поняли в чем проблема. Я знаю путь решения с переводом всех на свои UID, но если бы это все было так просто как хочется, я бы даже тему не создавал, есть куча проектов, есть старое PHP , есть старый апач, который работает и работает и работает много лет, он конечно обновлен, но вот перейти сейчас просто на suPHP - будет весьма напряжно, надо будет во первых мильен прав расставить правильно что бы у всех все заработало, а во вторых надо будет пересборкой заниматься половины установленного, да и в общем-то не факт что потом после апгрейда того же php 5.2 -> 5.3 у всех будет все в порядке.... этот путь мне известен и у меня так работают почти все сервера.... но есть и другие :D

S
На сайте с 07.11.2008
Offline
152
#29
Romka_Kharkov:
Сталкивались, только вот в "/" положить не могут точно, а в "/tmp" пожалуйста, вы правильно поняли в чем проблема. Я знаю путь решения с переводом всех на свои UID, но если бы это все было так просто как хочется, я бы даже тему не создавал, есть куча проектов, есть старое PHP , есть старый апач, который работает и работает и работает много лет, он конечно обновлен, но вот перейти сейчас просто на suPHP - будет весьма напряжно, надо будет во первых мильен прав расставить правильно что бы у всех все заработало, а во вторых надо будет пересборкой заниматься половины установленного, да и в общем-то не факт что потом после апгрейда того же php 5.2 -> 5.3 у всех будет все в порядке.... этот путь мне известен и у меня так работают почти все сервера.... но есть и другие :D

Хорошо. Закрыли Вы tmp. Дальше хакер запустил скрипт из 777-директории какого-то школоло. У этого процесса пользователь стоит апачевский, а путь изменен на /tmp.

Вариант 1:

Предположим, что Вам повезло, и Вы через strace смогли вычислить директорию, из которой на самом деле был запущен процесс. Вы пишите школоло, что он редиска, а он Вас в ответ посылает и съезжает с хостинга.

Вариант 2:

Вам не повезло, и путь до скрипта Вы не нашли. Вы просто убиваете процесс, и на этом все.

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

Нормальный вариант, Вы забиваете на страхи, переводите сервер на выполнение скриптов пхп от пользователей.

1. Вы сможете поставить скрипт, который сможет отлавливать подозрительные процессы пользователей, а особо подозрительные убивать.

2. Подозрительные процессы пользователя будут создавать нагрузку. Уже можно будет срубить с клиента бабла за нагрузку.

3. Поиск места запуска сужается до пользователя. В самом трудном случае, смотрите на время запуска процесса и на логи сайтов пользователя. Плюс прогнать по директории пользователя антивирус.

4. Пользователь не сможет смотреть на то, что лежит у соседа. (И это на хостинге самое главное!)

Т.е. в итоге Вы будете спокойно сидеть в кресле, и лениво клацать мышью: "Ага, подозрительный процесс!", клик - вирус "Убит" и отправилось гневное письмо пользователю.

Андрей
На сайте с 30.09.2009
Offline
482
#30

seolancer, позвольте изложу краткую версию - лучше один раз сделать как положено, чем пожизненно нервы трепать.

1 234

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий