Могут ли другие получить доступ к моим файлам, если я скачал PHP / MySQL?

#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, который является частью браузера пользователя.