Я хотел бы настроить безопасную среду для небольшого количества ненадежных веб-сайтов PHP на сервере Debian. Сейчас все работает на одном и том же Apache2 с mod_php5 и vsftpd для доступа к административным файлам, так что есть возможности для улучшения.
Идея состоит в том, чтобы использовать nginx вместо apache, SFTP через OpenSSH вместо vsftpd и chrooted (в sshd_config), отдельных пользователей для каждого веб-сайта со своим собственным пулом процессов PHP. Все эти пользователи и nginx входят в одну группу.
Теперь теоретически я могу установить 700 разрешений для всех сценариев PHP и 750 для статических файлов, которые должен обслуживать nginx. Теоретически, если сайт скомпрометирован, все данные других пользователей в безопасности, верно?
Есть ли лучшие решения, которые требуют меньше времени на настройку и меньше памяти для каждого веб-сайта?
Ура
Использование директивы chroot внутри конфигурации php-fpm должно гарантировать достаточную безопасность; тогда, позволяя пользователям оставаться только внутри chrooted ftp (или scp), было бы достаточно с правильной конфигурацией Apache (не позволяйте символическим ссылкам вводить его в заблуждение!: P).
Тогда, имея все chrooted, должно быть достаточно: вам даже не нужно будет устанавливать права доступа для файлов, поскольку они не будут доступны для чтения из другой chrooted среды. :)
Возможны и другие решения, позволяющие избежать потребления памяти ... просто используйте кеширование с лаком или что-то подобное (я знаю, кстати, это будет не так просто настроить для недоверенных пользователей).
Принимая во внимание вашу желаемую конфигурацию дел для nginx, я только что наткнулся на отличный bash скрипт предназначен для использования на Debian и Ubuntu, который автоматизирует большинство задач, которые необходимо выполнить для достижения сценария настройки, аналогичного описанному вами.
Скрипт bash автоматизирует создание новых виртуальных хостов (серверных блоков) на nginx и позволяет запускать несколько пулов PHP. Все процессы PHP-FPM порождены из главного и для того, чтобы каждый пул работал от имени другого пользователя и / или группы. Каждый пул можно дополнительно изолировать, запустив его в среде chroot и переопределив значения php.ini по умолчанию для каждого пула.
Проверьте это на сайте разработчика:
Что еще делает скрипт:
Надеюсь, это поможет вам оптимизировать время настройки.