Защита общей настройки lighttpd - PullRequest
2 голосов
/ 06 июля 2010

(Да, я знаю, что вопросы, относящиеся к lighttpd, лучше подходят для SF, но я подумал, что здесь уместнее задавать вопросы, поскольку в первую очередь это касается политики безопасности.)

Мы планируем задатьнебольшой веб-сервер в моем колледже, чтобы люди могли получить некоторое веб-пространство для размещения веб-страниц и тому подобное.Они также могут загружать страницы PHP.Вся установка запускается изнутри chroot-тюрьмы.

Мы думаем об использовании той же инфраструктуры для создания дополнительных сервисов, например, дискуссионного форума. Моя проблема заключается в , поскольку форум находится в том же корне документа (или в той же среде chrooted), что позволяет любому пользователю размещать небольшие скрипты PHP в своих каталогах, которые могут получить доступ к файлам конфигурации форума (используя,скажем, file_get_contents).Это огромный риск для безопасности!Есть ли какой-нибудь способ решить эту проблему, кроме отключения PHP для учетных записей пользователей и только сохранения его включенным для дискуссионного форума и т. П., Или для обслуживания форума в другом месте и прокси его с помощью lighttpd?

Я сомневаюсь, что установка владельцев / разрешений сделает что-нибудь, чтобы это исправить, поскольку, как я вижу, процесс PHP FastCGI порождается веб-сервером, и, следовательно, любая страница, к которой может обращаться сервер(они все должны быть, видя, как именно сервер должен в конечном итоге обслуживать их) могут быть доступны для скриптов PHP, загруженных пользователем.

Любая помощь будет оценена!

Ответы [ 2 ]

2 голосов
/ 06 июля 2010

Ну, несколько баллов.

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

Во-вторых, PHP не нужно запускать от имени того же пользователя, что и Lighttpd. Вы можете использовать программу spawn_fcgi для запуска каждого слушателя fastcgi как пользователя этого сайта. Вы должны объявить бэкэнд fastcgi для каждого виртуального хоста. Обратите внимание, что вы, вероятно, не сможете использовать ни один из встроенных модулей vhost (simple_vhost и т. Д.). Просто используйте совпадение регулярного выражения:

Либо по IP и порту:

$SERVER["socket"] == "127.0.0.2:80" {
    fastcgi.server = (
        ".php" => (
            "username" => (
                "socket" => "/tmp/user_php.fastcgi",
            )
        )
    )
)

Или по имени хоста:

$HTTP["host"] =~ "example\.com" {
    # ...
}

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

1 голос
/ 06 июля 2010

Каждый пользователь должен иметь собственную учетную запись Linux. Затем вам нужно использовать SuPHP + LightHTTPD , чтобы убедиться, что код php запускается с привилегиями этого пользователя. Затем вы должны убедиться, что все файлы принадлежат правильному пользователю и chmod 700 или chmod 500 (лучше всего для файлов .php). Последние 2 нуля в chmod, наряду с suphp, делают его таким, что пользователи не могут file_get_contents() файлы друг друга.

...