Как изменить доступ к файлам, с помощью .htaccess?
Для того чтобы это сделать, мы в корневой папке сайта создаем файл .htaccess. Данный файл необходимо открыть как обычный текстовик или с помощью программы для написания кода. Я открываю этот файл через программу Sublime Text.
ВНИМАНИЕ
Для файла .htaccess следует использовать права доступа 644 и загружать его в ASCII-режиме. Если ваш .htaccess файл не работает, то вам следует обратиться к системному администратору или в техподдержку вашего веб-хостинга и убедиться, что использование его разрешено для вашей учетной записи, так как некоторые хостинговые компании не позволяют его использование без предварительного разрешения, это в основном относится к бесплатным хостингам. Также, к сожалению, .htaccess не будет работать на Windows-серверах.
Первая директива, с которой мы познакомимся, это директива Order. Синтаксис директивы прост и она может быть использована в двух вариантах:
Order Deny,Allow # или Order Allow,Deny
Order Deny,Allow – это начала кода, которое показывает, что после него будут перечислены параметры ограничения доступа к файлам.
Allow – разрешает доступ.
Deny – запрещает.
В зависимости от выбранного варианта или для директивы Order, мы изменяем логику работы сервера. Если используем первый вариант (Deny,Allow), то мы сообщаем серверу, что хотим запретить доступ для всех (deny), кроме тех, которым разрешим (Allow).
Когда мы используете второй вариант (Allow,Deny), то подразумевается, что мы разрешаем доступ всем, кроме определенных IP.
Здесь стоит отметить, что на самом деле использование директивы Order не является обязательным и возможно использование директив Deny и Allow без директивы Order. Также не будет ошибкой, если, к примеру, объявив в директиве Order вариант Deny,Allow, мы сначала используем директиву Allow, а затем Deny. Хотя все же лучше будет, если мы в этом вопросе не будем отходить от рекомендаций документации.
Creating the password file
The first step is to create a simple text file that will store your username and password, separated by a colon (). The small catch is that the password must be encrypted. Luckily, there are many free web-based utilities that will encrypt the password for you. Try one of these:
- 4WebHelp’s online .htpasswd encryption tool
- Alterlinks .htaccess password generator
- htmlite’s htpasswd encryption page
Simply enter your desired username and password in one of these pages and submit the form. You’ll get back a string similar to the following:
fred:p29cmnwl4a0et
Now, open up your favourite text editor (e.g. Notepad or TextEdit), then copy and paste the username/password string into the editor. Save the file and call it .
Next, upload this file to your website. Make sure you place it outside the Web root of your site if possible, as you don’t want just anyone to be able to view the file! For example, place it above your or folder. (Having said this, Apache is often set up by default to block web-based access to files beginning with . Better safe than sorry though!)
If you can’t place your file outside your Web root, name it something that’s not easily guessable – for example, – so that people won’t be able to find it easily. (In addition, it helps to start the filename with ; as mentioned earlier, Apache usually blocks access to files starting with .)
Alternative: Creating the password file using
If you have SSH access to your web server (or you’re running Apache on a local machine), you can encrypt your password and add it to your password file in one go by using the utility that comes with Apache. Simply SSH to your server or open up a terminal window on your local machine, cd to the folder where you want to create your password file, and type:
htpasswd -c .htpasswd fred
(where fred is the username you want to use). You’ll be prompted to enter and retype your password, then the file will be created for you.
Защита Apache с помощью SSL сертификата
Вы можете защитить все соединения с помощью сертификата SSL. Предположим, на вашем сайте есть форма авторизации в которой пользователь вводит логин и пароль или иную конфиденциальную информацию, по умолчанию ваш веб-сервер будет отправлять эти данные в виде простого текста, но при использовании SSL сертификатов для вашего сайта, Apache будет отправляет информацию в зашифрованном виде.
О том как установить SSL сертификат на сервер и включить на сайте описано здесь:
- Let’s Encrypt. Как бесплатно добавить SSL/TLS сертификат и HTTPS протокол на сайт, пошаговая инструкция
- WoSing. Бесплатный SSL сертификат и HTTPS протокол для сайт на 3 года, пошаговая инструкция
- Как установить SSL сертификат
Apache Htpasswd protection using htaccess
You can also edit the file on your server to protect the contents. It is the easy method and you can create .htaccess file inside sub-directories too! Which means that you can create a new .htaccess file inside a specific directory to protect that directory with basic authentication.
Execute the following command to open the file in the edit mode. If it is not already present, the command will create a new file.
$ sudo nano /var/www/html/protected/.htaccess
Do not forget to replace the path of the directory you want to protect. Once the file is in edit mode, Add the following code at the top of the file.
AuthType Basic AuthName "Restricted Content" AuthUserFile /etc/apache2/.htpasswd Require valid-user
Once done, press CTRL+X followed by Y followed by the Enter key to save the file. Once done, try to access the protected directory or a website in the browser. It will ask you for username and password before the contents are displayed in the browser.
So, this is how you can protect the your website or a specific directory using Htpasswd and Htaccess.
Conclusion: Every application needs some kind of protection from anonymous users. With Htpasswd, you can protect specific directories and you can limit specific directories to specific users only. It is a good way to provide limited access to specific users. Htpasswd is fairly easy to install, create and configure. Let us know if you need help from us by mentioning the problem you are facing or a query you have in the comment section given below. We will reply you with the solution or an answer. If you are InterServer customer, please reach our support staff for further help!
HTTP-авторизация средствами PHP для серверной стороны
Рассмотрим создание HTTP-авторизации с помощью PHP, что позволит закрыть какой-либо раздел сайта, например административную часть.
Для установления подлинности HTTP обеспечивает простой механизм «вызов-ответ» (challenge-response), который может использоваться сервером для вызова (challenge) клиентского запроса, а клиентом для предоставления опознавательной информации (authentication information). Наиболее распространенной схемой авторизации является «Базовая схема установления подлинности» (Basic Authentication Scheme).
«Базовая» схема установления подлинности основана на том, что агент пользователя (браузер) должен подтвердить свою подлинность при помощи идентификатора пользователя (имени пользователя) и пароля для каждой защищенной области (realm). Сервер обслужит запрос, в случае если он может проверить правильность идентификатора пользователя и его пароля для данной защищенной области. Никаких дополнительных опознавательных параметров в данной схеме не предусмотрено.
После получения запроса на идентификацию, сервер отвечает вызовом (challenge), подобным следующему:
Please login" HTTP/1.1 401 Unauthorized
Здесь «Restricted Area» — строка, назначенная сервером, которая идентифицирует защищенную область запрашиваемого URI (Request-URI). Говоря простым языком — имя защищенной области.
Далее, чтобы получить права доступа, агент пользователя (браузер) отправляет на сервер идентификатор пользователя (имя пользователя) и пароль, разделенные одним символом двоеточия («:»), внутри base64-кодированной строки рекомендаций (credentials):
Здесь
- basic-cookie — base64-кодированая строка, содержащая user-pass
- user-pass — строка вида «userid:password»
- userid — текст, не содержащий символов «:»
- password — текст
Обратите внимание, что и имя пользователя и пароль являются чувствительными к регистру. То есть, например, User и user — два различных имени пользователя
Пример: особенность переадресации на синонимах
Предположим, есть домен domain1.tld и синоним domain2.tld. Если запросить в браузере адрес http://domain2.tld/dir/ со знаком слэша в конце, то будет отображена индексная страница из директории dir основного домена, при этом содержимое адресной строки браузера останется без изменений. Но если запросить http://domain2.tld/dir без слэша в конце, то произойдёт переадресация на http://domain1.tld/dir/, и содержимое адресной строки изменится соответствующим образом.
Если такое поведение веб-сервера вас не устраивает, добавьте в файл .htaccess следующие строки:
RewriteEngine on RewriteCond %{REQUEST_FILENAME} -d RewriteCond %{REQUEST_URI} !^domain2.tld$ RewriteRule ^(.+)$ http://domain2.tld/$1/
CC-BY-SA Анатольев А.Г., 10.06.2012
Доступ к файловой базе 1с через интернет в браузере
Теперь перемещаемся на виртуальную машину с nginx. Предварительно не забудьте добавить dns запись в каком-то домене, по которой вы будете ходить в базу через интернет. Она нам нужна, чтобы выпустить бесплатный tls сертификат, чтобы ходить в базу по https. Я не буду привязываться к какой-то конкретной операционной системе и рассказывать, как все делать именно в ней. Систему выбирайте на свой вкус. Настройка будет одинаковой. Нам нужны будут в системе 2 пакета: nginx и certbot. Установите их:
# yum install nginx certbot
или
# apt install nginx certbot
На данную виртуальную машину должны быть проброшены 80 и 443 порты с внешнего ip адреса. Как это будет сделано, зависит от ваших сетевых настроек. В случае с proxmox я настраиваю подобный проброс с самого хоста с помощью iptables. Пример настройки iptables читайте в отдельной статье. Там есть и про проброс. Не буду на этом задерживаться в статье про 1С.
Теперь нам нужно получить сертификат. Для этого запускайте в консоли certbot и следуйте инструкциям. Перед этим остановите nginx. Для быстрого получения сертификата certbot предлагает временно запустить свой веб сервер на 80-м порту.
# systemctl stop nginx # certbot certonly
Подробно получение сертификата let’s encrypt с помощью certbot я рассматриваю в статье про . Результатом работы certbot должны быть tls сертификаты в директории /etc/letsencrypt/live. Используем их в настройке виртуального хоста nginx для публикации баз 1С. Создаем в директории /etc/nginx/conf.d/ конфиг 1c.site.ru.conf примерно следующего содержания. Взял его с рабочего сервера.
server { listen 443 ssl http2; server_name 1c.site.ru; access_log /var/log/nginx/1c-access.log; error_log /var/log/nginx/1c-error.log; ssl_certificate /etc/letsencrypt/live/1c.site.ru/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/1c.site.ru/privkey.pem; location /.well-known/acme-challenge/ { root /tmp; } location / { auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/htpasswd.1c; proxy_pass http://10.10.10.11:80; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto https; } } server { listen 80; server_name 1c.site.ru; return 301 https://1c.site.ru$request_uri; }
В данном случае 10.10.10.11 — локальный ip адрес виртуальной машины с windows, где опубликована база 1С через apache. Доступ к 1С сразу же закрыт отдельным паролем и механизмом веб сервера auth basic. Создадим файл с именем пользователя и паролем, указанным в конфиге.
# htpasswd -c /etc/nginx/htpasswd.1c user1c
Если у вас нет в системе утилиты htpasswd, то установите пакет httpd-tools. Она из него. user1c — имя пользователя. Пароль вам предложат задать в консоли.
Теперь можно запускать nginx и проверять доступ к базе 1с по https с дополнительной авторизацией. Так как в конфиге nginx настроен proxy_pass всех запросов через location / , то на самой виртуалке с 1С вы можете публиковать сколько угодно баз через алиасы, например /buh3, /zup3 и т.д. Все они будут автоматом направляться с nginx на apache. При этом на самом nginx конфигурацию менять не придется.
Вот и все. Можно относительно безопасно выставлять такую конструкцию в интернет. В случае необходимости можно настроить fail2ban, если кто-то надумает перебирать пароли или просто выполнять непонятные запросы к веб серверу с опубликованными базами. При желании в том же nginx с помощью директив allow и deny можно ограничить доступ к виртуальному хосту с базами на уровне ip адресов. Это на случай, если не умеете делать то же самое на фаерволе. В nginx проще и быстрее.
Не забудьте настроить автоматическое обновление tls сертификатов. Как это сделать, я рассказываю в статье с настройкой web сервера. Ссылку на нее я дал выше.
Регулярно обновляйте Apache
Разработчики Apache постоянно работают над обеспечением безопасности и выпускают обновление с новыми параметрами безопасности. Поэтому рекомендуется использовать последнюю версию Apache в качестве веб-сервера.
Проверить версию Apache можно с помощью следующей команды:
httpd -v
Обновить версию можно с помощью следующей команды.
Обновление Apache для RHEL/CentOS/Fedora
yum update httpd
Обновление Apache для Debian/Ubuntu
apt-get install apache2
Так же рекомендуется обновлять ядро и версию ОС до последних стабильных релизов. Исключением может быть случай, когда вы используете приложение, которое работает только на конкретном ядре или версии ОС.
Пример: как закрыть директорию паролем
Одна из стандартных задач, которая решается путем использования .htaccess, это ограничение доступа к определенному каталогу на сервере. Например, нужно дать доступ к определенному каталогу отдельным посетителям, снабдив их при этом уникальным логином и паролем.
В каталоге, к которому хотим ограничить доступ по паролю, создаем файл .htaccess с такими директивами:
AuthType Basic AuthName "Some Name" AuthUserFile /home/uXXXXX/.htpasswd require valid-user
Путь /home/uXXXXX/.htpasswd обозначает полный путь к файлу паролей на диске нашего сервера. Если, например, вы поместите файл .htpasswd (в нем будут пароли) в домашний каталог, куда вы попадаете зайдя на сервер по FTP, то путь к этому файлу будет иметь вид /home/uXXXXX/.htpasswd, где uXXXXX — наименование вашей виртуальной площадки (например, u12345).
В директиве AuthUserFile указываем абсолютный путь к файлу с логинами/паролями, который мы создадим чуть позже
Если вы создаете файл .htaccess на своем компьютере, а не сразу на сервере при помощи текстового редактора, обратите внимание на то, что .htaccess должен передаваться по протоколу FTP строго в текстовом (ASCII) режиме
Создаем файл паролей. Файл с паролями должен содержать строки вида login:password. Пароль должен быть зашифрован с использованием алгоритма MD5. Один из способов создать такой файл — воспользоваться программой, входящей в поставку Apache — htpasswd (на нашем сервере она находится в каталоге /usr/local/bin/, полный путь — /usr/local/bin/htpasswd).
Рассмотрим как создать файл паролей в unix shell прямо на сервере, подключенному по протоколу ssh. Зайдем в shell и будем выполнять следующие команды:
-
htpasswd -mbc .htpasswd user1 sNQ7j9oR2w
создаем новый файл .htpasswd, в который добавляем запись для пользователя user1 с паролем, указанным в командной строке. Просьба обязательно заменить sNQ7j9oR2w на любой собственный пароль — здесь этот пароль указан только для примера
-
htpasswd .htpasswd user2
добавляем в уже существующий файл .htpasswd пользователя user2, а пароль вводим вручную в ответ на соответствующий запрос программы
Если вы используете Windows и не хотите пользоваться unix shell для генерации паролей, можно использовать Windows-версию программы htpasswd и создать файл с паролями на своем компьютере, после чего загрузить его на сервер. Если у вас уже установлена Windows-версия Apache, файл htpasswd.exe можно найти в каталоге Program Files\Apache Group\Apache\bin\.
Итак, получите htpasswd.exe и используйте его для генерации паролей таким образом:
-
htpasswd.exe -mc .htpasswd user1
создаем новый файл паролей htpasswd.exe, пароль и его подтверждение будут запрошены интерактивно
-
htpasswd.exe -m .htpasswd user2
добавляем пользователя user2 в существующий файл паролей htpasswd.exe, запросив пароль интерактивно
После окончания заведения всех логинов файл нужно загрузить на сервер.
Публикация web сервиса 1С на IIS 7.5
Как уже упоминал выше, с публикацией web сервиса на IIS 7.5 с первого раза у меня не задалось, хотя тонкий клиент запускается без проблем. Поскольку пароль в конфигурационном файле по соображениям безопасности меня не устраивал, вернулся к вопросу настройки IIS. Был опубликован web сервис с именем wsIIS и именем сервиса ServiceIIS и alias-ом serviceIIS.1cws. Галка в чекбоксе «Использовать аутентификацию операционной системы на веб-сервере» для простоты эксперимента была снята.
Публикация web сервиса 1С в IIS 7.5.
Корректная ссылка в моем случае: http://s-1c-1-hw/wsIIS/ws/ServiceIIS?wsdl. При попытке зайти из Chrome/IE получаем ошибку возвращенную IIS:
Как создать файл паролей .htpasswd
На первом этапе придумайте новый логин и сгенерируйте новый пароль, воспользовавшись страницей c инструментом генератора паролей. Сохраните полученные пароли.
Затем, вам нужно сгенерировать содержимое для .htpasswd файла, воспользовавшись htpasswd генератором. В поле «Юзер(Логин)» укажите придуманный вами логин (только латинскими буквами), в поле «Пароль», — сгенерированный ранее пароль. После этого вы получите результат, что то наподобие этого:
admin:$apr1$evskxt6q$p3RZUmYH.mVZn9nVMij850
Чтобы понять, что мы получили в результате, полученную строку можно представить как <login>:<password>, где admin — это наш «Юзер(Логин)», а $apr1$evskxt6q$p3RZUmYH.mVZn9nVMij850 это наш зашифрованный пароль.
Далее нам необходимо создать обычный текстовый файл с именем .htpasswd. И в этот файл нам необходимо вставить нашу строку admin:$apr1$evskxt6q$p3RZUmYH.mVZn9nVMij850 и сохранить файл. Если вам нужно сделать несколько учетных записей, то вам нужно повторить все шаги описанные выше еще раз и добавить еще одну запись в этот же файл, но уже с новой строки. Допустим если нам нужно 2 учетные записи, то содержимое файла будет выглядеть так:
admin:$apr1$evskxt6q$p3RZUmYH.mVZn9nVMij850 developer:$apr1$pngk7j62$Z/cOxoZMvrwUROGXrbMiY/
Где мы видим 2 учетные записи для логина admin и developer.
Еще стоит заметить, что вы можете сгенерировать .htpasswd файл с помощью программ, которые вы можете скачать в интернете, но это не рекомендуется делать, так как программы могут содержать вирусы.
Теперь нам осталось подключить .htpasswd файл к WEB-серверу. В этой статье мы рассмотрим подключение к Apache и Nginx.
Впуская более одного человека
Приведенные выше директивы пропускают в каталог только одного человека (в частности, человека с именем пользователя ). В большинстве случаев вам захочется впустить более одного человека. Именно здесь заходит .
Если вы хотите впустить более одного человека,вам нужно создать файл группы,который связывает имена групп со списком пользователей в этой группе.Формат этого файла довольно прост,и вы можете создать его с помощью любимого редактора.Содержимое файла будет выглядеть следующим образом:
GroupNamerbowen dpitts sungo rshersey
Это просто список членов группы в длинной очереди,разделенной пробелами.
Чтобы добавить пользователя к уже существующему файлу паролей,введите его:
htpasswd /usr/local/apache/passwd/passwords dpitts
Вы получите тот же ответ, что и раньше, но он будет добавлен к существующему файлу вместо создания нового файла. (Именно создает новый файл паролей).
Теперь вам нужно изменить ваш файл или блок так, чтобы он выглядел следующим образом:
AuthType Basic AuthName "By Invitation Only" # Optional line: AuthBasicProvider file AuthUserFile "/usr/local/apache/passwd/passwords" AuthGroupFile "/usr/local/apache/passwd/groups" Require group GroupName
Теперь любой, кто указан в группе и имеет запись в файле , будет впущен, если он введет правильный пароль.
Есть и другой способ впустить в это несколько пользователей-менее специфический.Вместо того,чтобы создавать групповой файл,можно просто использовать следующую директиву:
Require valid-user
Использование этого параметра вместо строки позволит любому, кто указан в файле паролей, и кто правильно введет свой пароль.
Назначение и использование файла .htaccess
Файл .htaccess может быть размещен в корневом каталоге веб-сервера (прямо в каталоге www). В этом случае директивы из такого .htaccess действуют по всему веб-серверу. Также .htaccess может находиться и в конкретном подкаталоге сервера. Тогда директивы, которые указаны в этом файле, «перекрывают» действие директив из «основного» файла, который размещен в каталоге www или в любом каталоге более высокого уровня. То есть, действие директив из .htaccess наследуется сверху вниз, но не наоборот. Изменения, внесенные в файл, вступают в силу немедленно. Это связано с тем, что информация из .htaccess перечитывается при каждом обращении к веб-серверу Apache.
Если использовать нужную директиву не получилось, и вы увидели ошибку после добавления директивы в .htaccess, скорее всего, использование команды запрещено в условиях виртуального хостинга.
4 ответа
2
Поскольку вы упомянули, что это для LAMP-сервера, и у вас есть доступ к SSH, вы можете сделать это достаточно просто с виртуальным хостом по умолчанию 000 (например, сменить example.com в свой домен):
Методы перезаписи не нужны, и перенаправление обеспечивает лучшую защиту от атак заголовков хоста . Пропуская обычные методы .htaccess или PHP и делая перенаправление, вы получаете максимально возможную производительность, хотя это, вероятно, не вызывает беспокойства, если большинство запросов относятся к вашему домену, а не к IP.
Для полноты, вот как вы это делаете с Nginx:
Одна небольшая разница, ответ Nginx’s 444 означает «нет ответа», и он сразу же отключает соединение. В маловероятном случае, когда вы захотите использовать перенаправление, вы можете изменить директиву на
На самом деле маловероятно, что законный трафик от ваших пользователей запрашивает ваш сайт по его IP-адресу, поэтому не тратьте много времени на его установку. Снимите или перенаправьте трафик.
4
Если вы хотите заблокировать всех пользователей, пытающихся получить доступ к вашему сайту, другими способами, чем ваше доменное имя, вы можете сделать это:
Все попытки доступа, отличные от example.com , приведут к:
ДРУГОЙ ПУТЬ, РАЗЛИЧНЫЙ РЕЗУЛЬТАТ :
Если вы хотите сделать правило перезаписи , поэтому все попытки доступа, отличные от example.com , приведут к перенаправление на example.com , вы можете сделать такое правило переадресации следующим образом:
Для www :
2
Если вы не хотите, чтобы сайт отвечал на IP-адрес, я бы использовал виртуальный хост в Apache. Установите виртуальный корень в другой каталог сервера Apache.
Теперь весь трафик по умолчанию используется в другом месте вашего пилотируемого сайта.
В противном случае, как уже отмечалось, я бы использовал перенаправление. Лично я бы использовал стиль htaccess. После тестирования в файле .htaccess я переместил инструкции в файл conf.
Отметив, что у меня всегда есть полный доступ к моим личным серверам.
EDIT:
Вы изменили свой httpd.conf aka apache2.conf? Если нет, не беспокойтесь о том, что ваш маршрут по умолчанию должен быть Если вы это изменили, я бы порекомендовал его вернуть.
Вот пример файла конфигурации Apache для одного из моих тестовых сайтов разработки под управлением Apache 2.2 на CentOS 6.5. Если вы нажмете IP-адрес хостинга или имя по умолчанию, вы найдете тестовую страницу Apache или просто белую страницу без содержимого.
Ниже приведен пример файла конфигурации на моей рабочей станции (Mint 17) Ubuntu. Опять же, если вы ссылаетесь на IP-адрес или имя сервера по умолчанию, вы столкнетесь со страницей по умолчанию.
Кроме того, вы можете видеть здесь, что я переместил директивы .htaccess в этот файл conf.
Легко. Просто сделайте перенаправление с IP-адреса на доменное имя.
Метод 1
Хороший способ сделать это, если ваш сервер поддерживает это, — создать файл PHP, содержащий следующее:
затем сохраните его как index.php в корневой папке документа вашего IP-адреса (возможно, в папке htdocs).
Метод 2
Если ваш сервер — apache, установлен модуль перезаписи и разрешены изменения конфигурации через файлы .htaccess, затем создайте этот файл и сохраните его в корневом каталоге документа вашего IP-адреса со следующим содержимым:
Хорошая вещь с помощью метода 2 заключается в том, что он перенаправляет любой URL-адрес, начиная с IP-адреса на главной странице в example.com.
Просто убедитесь, что вы поместили все файлы своего сайта в корневую папку документа example.com.
и, конечно же, замените example.com в моем ответе на ваше доменное имя.
Индексный файл
Индексный файл или файл-индекс — это тот файл, который открывается по умолчанию при обращении пользователя через веб к каталогу, а не к конкретному файлу. Например, ваш посетитель запросит адрес http://ваш_домен/price/, где price — название каталога. Индексный файл это тот файл, который будет показан пользователю при обращении к каталогу без указании имени конкретного файла в нем.
По умолчанию индексными файлами являются следующие: index.html, index.htm, index.php, index.php3, index.phtml, index.shtml, default.htm или default.html. Если вы хотите чтобы первым открывался какой-то иной файл, нужно переопределить текущие значения. Как это сделать читайте .