Я рекомендовал бы учиться доверять разработчикам и судить их на объеме хорошего кода, который они производят, не, прекратили ли они работать для проигрывания нескольких раундов Solataire при обдумывании проблемы.
Кто-либо, кто работал бы в среде, где они так недоверяемы, что снимки экрана их экранов хранятся на сервере для других людей для шпионажа за ними, или отчаянно нуждается в работе или тайно знает, что им нельзя доверять. Так или иначе они не будут хорошо работать в своих заданиях, или они пошли бы куда-нибудь, где их рассматривали как люди.
Ответ David является хорошей базовой линией общих принципов укрепления сервера. Как David указал, это - огромный вопрос. Определенные методики Вы, взятие могло зависеть высоко от Вашей среды и как Ваш сервер будет использоваться. Предупреждение, это может взять большую работу в тестовой среде, чтобы пристроить и быть сделанным правильно. Сопровождаемый большой работой для интеграции в продуктивную среду, и что еще более важно, бизнес-процесс.
Во-первых, однако, проверка, чтобы видеть, имеет ли Ваша организация какие-либо стабилизирующие политики, поскольку это могло бы быть наиболее непосредственно соответствующее. В противном случае в зависимости от Вашей роли, это могло бы быть прекрасным временем для пристраивания их. Я также рекомендовал бы заняться каждым компонентом отдельно с самого начала.
L
Существует много хороших руководств, доступных для выручения Вас. Этот список может или не может помочь Вам в зависимости от Вашего распределения.
A
Apache может быть забавой защитить. Я нахожу легче укрепить ОС и поддержать удобство использования или, чем Apache или, чем PHP.
M
P
Это работает с головой во всю эту мысль о Безопасных Практиках программирования, которая является всей собственной дисциплиной. БЕЗ и OWASP имеют смешной объем информации на предмете, таким образом, я не попытаюсь копировать его здесь. Я сфокусируюсь на конфигурации во время выполнения и позволю Вашим разработчикам волноваться об остальных. Иногда 'P' в ЛАМПЕ обращается к Perl, но обычно PHP. Я принимаю последнего.
Вы задали вопрос, то есть, вполне откровенно говоря, достойный нескольких книг по теме. Но существуют некоторые общие основные инструкции, которые работают хорошо:
Надежда, которая помогает Вам начать.
Добавляя к тому, что предлагает Дэвид, тем более модульная ваша установка, я имею в виду ограничение доступа для определенных пользователей / групп, созданных специально для одной задачи, и ограничение их области, тем более безопасным будет ваш стек LAMP: Примером этого является наличие пользователя Apache для файлов / папок Apache с соответствующими разрешениями, а не в каких-либо группах, которые могут получить доступ к критическим системным файлам / папкам. Пользователь, который может получить доступ к таблицам MySql, связанным с вашими веб-сайтами, которые вы собираетесь обслуживать, и только к этим таблицам. Кроме того, вы можете ограничить их доступ, чтобы предоставить минимальный объем доступа из вызова PHP. Кроме того, убедитесь, что имя пользователя MySQL, используемое / предоставляемое через файл PHP, не совпадает с именем пользователя или паролем, используемым для другого пользователя.
Что это означает: если пользователь apache или пользователь MySql скомпрометированы, они не смогут наносить какой-либо вред за пределами папки (папок), к которой apache имеет доступ (в случае пользователя apache) и за пределами таблицы (таблиц) / баз данных (в случае пользователя базы данных MySQL).
Если каким-то образом пользователь MySQL будет скомпрометирован, он не сможет, например, получить доступ к базе данных и удалить все базы данных из MySQL и испортить все ваши данные. Они МОГУТ при некоторых обстоятельствах иметь возможность отбрасывать таблицы или вставлять информацию в некоторые таблицы в изолированной базе данных, поэтому важно предоставлять доступ к таблицам только там, где это абсолютно необходимо, и предоставлять только необходимые разрешения ... если вы этого не сделаете. t должны иметь привилегии удаления таблиц или привилегии обновления, тогда не давайте их этому пользователю.
Кроме того, если по какой-то причине имя пользователя и пароль вашей административной учетной записи обнаружены для MySQL, если вы используете другое имя пользователя, чем любое имена пользователей в вашей системе, они должны сначала взломать безопасность вашей системы, прежде чем проникнуть в вашу базу данных, чтобы нанести ущерб. Я собираюсь привести пример системы, чтобы упростить идею.
скажем, у вас есть пользователи в вашей системе (root должен быть отключен для безопасности с помощью чего-то вроде umod -l или passwd -l и т. Д.): john, barney, terence и lisa.
вы можете создать пользователя в 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 проблему вместо того, чтобы начинать все заново с нуля.
Вот хороший контрольный список, с которого мне нравится начинать.