Это канонический вопрос о защите стека LAMP
Каковы абсолютные рекомендации по обеспечению безопасности сервера LAMP?
Это канонический вопрос о защите стека LAMP
Каковы абсолютные рекомендации по обеспечению безопасности сервера LAMP?
Ответы:
Ответ Дэвида является хорошей основой общих принципов защиты серверов. Как указал Дэвид, это огромный вопрос. Конкретные методы, которые вы используете, могут сильно зависеть от вашей среды и того, как будет использоваться ваш сервер. Предупреждение, это может занять много работы в тестовой среде, чтобы построить и сделать все правильно. Затем следует большая работа по интеграции в производственную среду и, что более важно, бизнес-процесс.
Однако сначала проверьте, есть ли в вашей организации какие-либо политики ужесточения, поскольку они могут быть наиболее актуальными. Если нет, в зависимости от вашей роли, это может быть отличное время для их создания. Я также рекомендовал бы заниматься каждым компонентом отдельно снизу вверх.
L
Есть много хороших гидов, которые могут вам помочь. Этот список может или не может помочь вам в зависимости от вашего распространения.
Аналого
Apache может быть интересно , чтобы обеспечить. Мне легче укрепить ОС и поддерживать удобство использования, чем Apache или PHP.
М
Р
Это идет вразрез с самой идеей Безопасных Программных Практик, которая является целой дисциплиной. SANS и OWASP располагают смехотворным количеством информации по этому вопросу, поэтому я не буду пытаться копировать ее здесь. Я сосредоточусь на конфигурации времени выполнения и позволю вашим разработчикам беспокоиться об остальном. Иногда буква «P» в LAMP относится к Perl, но обычно к PHP. Я предполагаю последнее.
Вы задали вопрос, который, честно говоря, достоин нескольких книг на эту тему. Но есть некоторые общие основные рекомендации, которые хорошо работают:
Надеюсь, что это поможет вам начать.
Вот хороший контрольный список, с которого я хотел бы начать.
В дополнение к тому, что предлагает Дэвид, чем более модульна ваша установка, я имею в виду ограничение доступа к определенным пользователям / группам, созданным специально для одной задачи, и ограничение их области действия, тем более безопасным будет ваш стек LAMP. Примером этого является наличие пользователя Apache. для файлов / папок Apache с соответствующими разрешениями, а не в группах, которые могут получить доступ к критическим системным файлам / папкам. Пользователь, который может получить доступ к таблицам MySql, связанным с вашими веб-сайтами, которые вы собираетесь обслуживать, и только к этим таблицам. Кроме того, вы можете ограничить их доступ, чтобы предоставить минимальный объем доступа из вызова PHP. Кроме того, убедитесь, что имя пользователя MySQL, используемое / предоставляемое через файл PHP, не совпадает с именем пользователя или паролем, используемым для другого пользователя.
Что это означает: если пользователь apache или пользователь MySql скомпрометированы, они не могут нанести какой-либо вред за пределами области папок, к которой у apache есть доступ (в случае пользователя apache) и за пределами таблицы ( s) / database (s) (в случае пользователя для базы данных MySQL).
Если каким-либо образом пользователь MySQL будет скомпрометирован, он не сможет, например, получить доступ к базе данных, удалить все базы данных из MySQL и испортить все ваши данные. При некоторых обстоятельствах они МОГУТ иметь возможность удалять таблицы или вставлять информацию в некоторые таблицы в изолированной базе данных, поэтому важно предоставлять доступ к таблицам только там, где это абсолютно необходимо, и предоставлять только необходимые разрешения ... если вы не не нужно иметь привилегии удаления таблиц или обновления, а затем не передавать их этому пользователю.
Кроме того, если по какой-то причине имя пользователя и пароль вашей административной учетной записи обнаружены для MySQL, если вы используете имя пользователя, отличное от любых имен пользователей в вашей системе, они должны сначала нарушить безопасность вашей системы, прежде чем попасть в вашу базу данных, чтобы нанести ущерб. То же самое относится и к пользователю apache и доступу к файлам.
Пример времени! Я собираюсь привести системный пример, чтобы упростить идею.
скажем, у вас есть пользователи в вашей системе (root должен быть отключен для безопасности через что-то вроде umod -l или passwd -l и т. д.): Джон, Барни, Теренс и Лиза.
Вы можете создать пользователя в MySQL с именем bigbird (убедитесь, что вы используете хешированный пароль). Bigbird имеет только права выбора и обновления, но не удаляет и не создает, и, конечно, нет . Кроме того, вы создаете другого административного пользователя MySQL с именем garfield для работы с базой данных MySQL и удаляете пользователя root из базы данных MySQL, чтобы его нельзя было использовать в качестве компромисса. Гарфилд был предоставлен . привилегии по всему MySQL (по сути, это просто переименование root).
Теперь вы создаете группу Apache или пользователя, и мы назовем его apweb2. Appweb2 не является членом других групп, и все файлы / папки для apache хранятся в / home / apweb2 /. Каждый виртуальный хост будет иметь свою собственную подпапку, и каждый из этих хостов будет иметь корневую папку документа, установленную на эту подпапку. Симлинки будут отключены, чтобы случайно не предоставить доступ к остальной части системы.
Кроме того, вы можете ограничить доступ по ssh только определенным пользователям (или определенным группам, я хотел бы поместить их в группу ssh и сделать так, чтобы единственное, что могло использовать ssh).
Кроме того, вы можете выбрать, какие пользователи имеют привилегии sudo, чтобы еще больше ограничить ситуацию. Еще один шаг, который вы можете предпринять, это сделать любого пользователя ssh не способным sudo, вы можете создать специальных пользователей, которые могут использовать sudo, которые не могут использовать ssh, так что после входа в ssh вы должны войти в систему другого пользователя, чтобы иметь доступ к sudo.
Таким образом, при модульности каждого сегмента, если он скомпрометирован, весь стек не будет скомпрометирован, и вы сможете устранить проблему 1 вместо того, чтобы начинать все заново с нуля.
Я нашел этот документ от SANS.org действительно полезным http://www.sans.org/score/checklists/linuxchecklist.pdf
В настоящее время не стоит пренебрегать виртуализацией контейнеров, а именно Docker, systemd-nspawn и механизмами виртуализации контейнеров, на которых они построены (пространства имен, cgroups). Использование виртуализации контейнеров позволяет изолировать процессы, например, если одна из служб скомпрометирована, злоумышленник не получит доступ к другим службам.
В случае LAMP можно использовать, например, четыре контейнера Docker с SSH-сервером, Apache, MySQL, PHP-FPM / Python / Perl / и т. Д.