#php #mysql #linux
#php #mysql #linux
Вопрос:
У меня есть университетский интернет. У него есть IP, скажем, 220.81.184.12. У меня есть проект с именем, скажем, MyProject (это папка). Когда я пытаюсь ввести 220.81.184.12/MyProject, он запускает мой сайт. Это означает, что каждый в университете может получить доступ к моей папке и сайту? Я использую Ubuntu и установил PHP и MySQL. А также я могу получить доступ к phpmyadmin через IP, например 220.81.184.12 / phpmyadmin.
Итак, что происходит?
РЕДАКТИРОВАТЬ: И что это значит? Что произойдет, если другой человек установит PHP на свой компьютер?
Ответ №1:
Здесь достаточно много всего, так что давайте углубимся…
Как упоминал Марк Б., если вы установите веб-сервер на общедоступный IP-адрес без брандмауэра, каждый пользователь Интернета сможет получить к нему доступ. Это не значит, что вы находитесь в такой ситуации — вы говорите, что находитесь в университетской сети, и вы, скорее всего, обнаружите, что они реализуют некоторую форму локальной сети, которая имеет уровень NAT и / или брандмауэр между вашим ПК и Интернетом. Тем не менее, вы все равно можете обнаружить, что все в университетской сети (или, по крайней мере, в вашем сегменте — см. Подсети и VLAN) могут получить доступ к вашему веб-серверу.
Что вы можете сделать, чтобы предотвратить это?
Это далеко не исчерпывающий список, но вот некоторые из наиболее часто используемых подходов к управлению безопасностью веб-сервера.
Настройте свой веб-сервер на прослушивание только на localhost (Марк Б уже рассмотрел это, но для уточнения):
Основной файл конфигурации Apache, httpd.conf, использует директиву, вызываемую Listen
для определения того, какие прослушивающие сокеты создавать и привязывать к ним при запуске. По умолчанию обычно Listen 80
, что означает, что сервер будет прослушивать TCP-порт 80 на каждом IP-адресе, зарегистрированном на компьютере. Этими IP-адресами будут 127.0.0.1
, адрес обратной связи и любые IP-адреса, связанные с любыми сетевыми интерфейсами, которые вы установили, например, в приведенном выше примере 220.81.184.12
.
Вы можете изменить эту директиву, чтобы она была более строгой. Например, если вы хотите принимать соединения только со своего локального компьютера, вы можете изменить его на Listen 127.0.0.1 80
. Сделав это, вы сможете получить доступ к своему веб-серверу со своего локального компьютера по адресу http://127.0.0.1/
, http://localhost/
, и http://220.81.184.12/
— да, вы все равно можете использовать любой адрес, связанный с машиной, из-за способа работы loopback — но ни одна другая машина в мире не сможет напрямую получить к нему доступ, используя любой адрес.
Настройте брандмауэр для блокировки подключений с других компьютеров:
Почти все брандмауэры по умолчанию блокируют каждый входящий запрос, и вы должны явно разрешить открытым портам и / или приложениям принимать входящие соединения. Если вы не хотите, чтобы другие машины могли получить доступ к вашему серверу, не открывайте порт, разрешающий приложение. Многие брандмауэры позволят вам более избирательно относиться к этим правилам, разрешая входящие запросы с определенных IP-адресов, но не с других.
Если вы хотите запретить другим людям доступ к сетевым ресурсам, размещенным на вашем компьютере, брандмауэр обычно является хорошим местом для начала. Вы должны обнаружить, что ваша установка Ubuntu поставляется с включенными iptables.
Ограничьте доступ удаленных клиентов к каталогам в вашем файле конфигурации Apache:
Пожалуйста, обратите внимание: эта информация описывает использование директив Apache, которые в настоящее время устарели. См. сноску № 1
Как вы, наверное, уже знаете, чтобы заставить Apache обслуживать каталог, вы должны создать <Directory>
для него раздел httpd.conf
. В файле конфигурации по умолчанию вы найдете раздел, предварительно настроенный для обслуживания DocumentRoot
, который будет содержать несколько строк, которые выглядят следующим образом:
Order allow,deny
Allow from all
Это разрешает все запросы от каждого клиента. Как вы можете видеть, там есть две директивы — Order
и Allow
(которая имеет дополнительную директиву, Deny
). Понимание того, что делают эти директивы и как они работают, важно, если вы собираетесь администрировать сервер Apache. Они очень подробно объясняются на страницах руководства по ссылкам, поэтому я не буду вдаваться в подробности здесь — давайте просто приведем пример:
Order deny,allow
Deny from all
Allow from 127.0.0.1
Изменение значения по умолчанию на это приводит к отклонению каждого запроса, если только он не был отправлен с 127.0.0.1
вашего локального компьютера. Теперь предположим, что вы хотите разрешить своему другу, у которого есть IP-адрес 172.32.64.218
, также получить доступ к странице — мы добавляем Allow
директиву для его IP-адреса в конец приведенной выше конфигурации:
Allow from 172.32.64.218
После того, как вы настроите это, ваш друг сообщит вам, что ему принадлежат все IP-адреса между 172.32.64.216
и 172.32.64.223
, и он хочет иметь возможность использовать любой из них для доступа к вашему серверу. Вместо создания 8 отдельных Allow
директив мы можем определить их в одной: используя сокращение CIDR, мы можем выразить эту подсеть как 172.32.64.216/29
, и мы можем использовать это в Allow
директиве:
Allow from 172.32.64.216/29
<Directory>
Разделы определяют правила для каталога и всех его подкаталогов, поэтому, если вы примените правило к /myDir
, те же правила будут применяться и к /myDir/subDir
and /myDir/subDir/subSubDir
. Но вы можете переопределить эти правила ниже по дереву — так что вы можете создать <Directory>
раздел для /myDir/subDir/subSubDir
с другими правилами. Вы также можете использовать файлы .htaccess для определения правил, если вы включаете их с AllowOveride
помощью директивы.
Как вы можете видеть, этот метод контроля того, кому разрешен доступ к вашему сайту, относительно прост в настройке и может обеспечить мощный и гибкий контроль правил.
Чтобы ответить на ваш вопрос If other person installed PHP in his PC, what would happen?
— ничего. PHP — это язык сценариев на стороне сервера и не может напрямую влиять на что-либо на любом другом компьютере, особенно с точки зрения контроля доступа к удаленной машине.
Сноска # 1 06/2012
Просто краткое примечание, чтобы упомянуть, что директивы Order
Allow
and Deny
устарели в Apache 2.4. Этот тип контроля доступа теперь объединен со стандартным процессом аутентификации и теперь предоставляется с использованием Require ip
Require host
Require local
директив and, поддерживаемых mod_authz_host .
Поддержка Order
Allow
и Deny
по-прежнему предоставляется через mod_access_compat для обратной совместимости, но новые конфигурации для ветки 2.4 и выше должны использовать соответствующие Require
структуры, а старые конфигурации должны быть преобразованы для использования новых механизмов, как только они будут перенесены. Старые механизмы управления будут удалены в будущей версии Apache.
Документ, содержащий введение в использование новых директив, доступен здесь .
Ответ №2:
Вы разместили веб-сервер на общедоступном IP-адресе … он будет доступен из любой точки мира. Если вы хотите сохранить сервер закрытым, вам нужно настроить Apache так, чтобы он НЕ прослушивал общедоступный IP-порт, и настроить его так, чтобы он отвечал только на 127.0.01. Это делается с помощью Listen
директив в httpd.conf.
Другой альтернативой является использование брандмауэра для блокирования доступа к портам Apache с любых, кроме авторизованных IP-адресов.
Комментарии:
1. Изменен файл httpd.conf, ничего не изменилось.
2. Убедитесь, что в другом месте нет других директив Listen . Многие установки Apache содержат несколько файлов .conf для разных целей, и один из них, загруженный после httpd.conf, может переопределять ваши изменения. И вам нужно перезапускать Apache после каждого изменения .conf.
3. Я перезапустил. Хорошо, перейдем к изменению всех файлов .conf.
4. @привет: я не могу получить доступ
http://220.81.184.12/MyProject
. Если вы тестируете самостоятельно, вам нужно протестировать дважды: один раз со своего компьютера, который должен работать, и один раз с компьютера во внешней сети, который не должен иметь к нему доступа.
Ответ №3:
Я бы рекомендовал использовать HTTP Auth для защиты каталогов, к которым вы не хотите делиться. Таким образом, если вы когда-нибудь захотите поделиться одним из них, вы можете просто поделиться данными для входа с человеком, которому вы хотите предоставить доступ.
PHP запускается на самом сервере. Это просто способ генерации HTML, это не язык сценариев, такой как Javascript, который является частью браузера пользователя.