In <007801bfa905$cfb48c70$390710ac@rtsnet.ru> Denis Blinov (blinov@rtsnet.ru)
wrote:
DB> Привет
DB> Кто-нибудь смотрел в этом направлении? Пользователь аплоадит файл в свой
DB> домашний каталог. Естественно, хотелось бы, чтобы права на него принадлежали
DB> именно ему, а не nobody. SuExec не работает, так как используется mod_perl.
DB> Единственное, что приходит в голову - suid'ная программка, принадлежащая
DB> руту, принимающая от перлового скрипта данные и, прикинувшись нужным нам
DB> юзером, осуществляющая все файловые операции.
DB> Но как-то это некрасиво.
DB> Судя по архивам, с год назад тут нечто подобное обсуждалось. Ничего
DB> разумного тогда придумать не удалось?
Естественно. На то есть веские, я бы сказал, ПРИНЦИПИАЛЬНЫЕ причины. Дело не
в недостатке кваливикации у создателей Apache.
Итак, давайте посмотрим внимательно на происходящее:
1) имеем процесс с ошибками и дырами (apache) - не то, чтобы я сходу был
готов их продемонстрировать (хотя если подумать... и знать номера версий,
которые у вас стоят...), но и apache и perl НЕ СОЗДАНЫ для того, чтобы
быть 100% secure'ными, а скорее даже наоборот - созданы для того, чтобы
система не сильно пострадала от их взлома (а если еще учесть всякие .so
игрушки perl'овые)...
2) ВНУТРИ этого процесса (через mod_perl) пускаются всякие вещи, которые
могут контролировать ваши пользователи и при этом без больших проблем могут
испортить этот самый процесс...
3) вы хотите, чтобы этот процесс мог произвольным образом менять свою EUID
(чтобы можно было уничтожить не только все файлы, работа с которыми
происходит через эти mod_perl'овые скрипты, но и вообще всю систему
превратить в набор не связанных друг с другом битов)...
4) вы ДЕЙСТВИТЕЛЬНО этого хотите ? тогда пускайте свой apache из под root'а
и все файлы создавайте под ним же - по степени разрушительности это близкое
действие...
P.S. Да, как несложно заметить из вышеописанного, этот самый suid'ный бинарник
НИ В КОЕМ СЛУЧАЕ не должен абсолютно доверять тому, что его вызывает легальный
скрипт; в худшем случае нужно реализовать набор проверок a-la suexec, но лучше
всего вынести авторизацию в него...
=============================================================================
= Apache-Talk@lists.lexa.ru mailing list =
Mail "unsubscribe apache-talk" to majordomo@lists.lexa.ru if you want to quit.
= Archive avaliable at http://www.lexa.ru/apache-talk =