Apache restrictions — различия между версиями
Материал из pNp Wiki
Andy (обсуждение | вклад) (→Проверка) |
Andy (обсуждение | вклад) (→Ограничение на основе хоста) |
||
Строка 84: | Строка 84: | ||
</body></html> | </body></html> | ||
[root@vm-02 ~]# | [root@vm-02 ~]# | ||
+ | </syntaxhighlight> | ||
+ | === Ограничение на основе аккаунта пользователя === | ||
+ | Для директории <code>/content/private</code> в конфигурационном файле <code>/etc/httpd/conf.d/vm-01.conf</code> укажем способ аутентикации и путь к файлу с аккаунтами пользователей и их | ||
+ | паролями, для доступа к содержимому данной директории: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | # Virtual Hosts | ||
+ | # | ||
+ | # Required modules: mod_log_config | ||
+ | |||
+ | # If you want to maintain multiple domains/hostnames on your | ||
+ | # machine you can setup VirtualHost containers for them. Most configurations | ||
+ | # use only name-based virtual hosts so the server doesn't need to worry about | ||
+ | # IP addresses. This is indicated by the asterisks in the directives below. | ||
+ | # | ||
+ | # Please see the documentation at | ||
+ | # <URL:http://httpd.apache.org/docs/2.4/vhosts/> | ||
+ | # for further details before you try to setup virtual hosts. | ||
+ | # | ||
+ | # You may use the command line option '-S' to verify your virtual host | ||
+ | # configuration. | ||
+ | |||
+ | # | ||
+ | # VirtualHost example: | ||
+ | # Almost any Apache directive may go into a VirtualHost container. | ||
+ | # The first VirtualHost section is used for all requests that do not | ||
+ | # match a ServerName or ServerAlias in any <VirtualHost> block. | ||
+ | # | ||
+ | <VirtualHost *:80> | ||
+ | ServerAdmin webmaster@vm-01.example.com | ||
+ | DocumentRoot "/content" | ||
+ | ServerName vm-01.example.com | ||
+ | ServerAlias www.vm-01.example.com | ||
+ | ErrorLog "/var/log/httpd/vm-01.example.com-error_log" | ||
+ | CustomLog "/var/log/httpd/vm-01.example.com-access_log" common | ||
+ | <Directory "/content"> | ||
+ | AllowOverride None | ||
+ | # Allow open access: | ||
+ | Require all granted | ||
+ | </Directory> | ||
+ | <Directory "/content/private"> | ||
+ | |||
+ | Require ip 192.168.1.2 | ||
+ | </Directory> | ||
+ | |||
+ | </VirtualHost> | ||
+ | </syntaxhighlight> | ||
+ | Создадим учетную запись <code>andy</code> и пароль для нее: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | [root@vm-01 ~]# htpasswd -c /etc/httpd/ | ||
+ | conf/ conf.d/ conf.modules.d/ logs/ modules/ run/ | ||
+ | [root@vm-01 ~]# htpasswd -c /etc/httpd/passwd andy | ||
+ | New password: | ||
+ | Re-type new password: | ||
+ | Adding password for user andy | ||
+ | [root@vm-01 ~]# | ||
</syntaxhighlight> | </syntaxhighlight> |
Версия 12:07, 24 января 2018
Содержание
Конфигурирование Apache. Ограничение доступа к директориям
Предварительные требования
- Виртуальная машина с двумя сетевыми интерфейсами
- Установленные пакеты:
bash-completion
,policycoreutils
,policycoreutils-python
,policycoreutils-devel
,setroubleshoot-server
,httpd
,elinks
,curl
Конфигурирование ограничений
Ограничение на основе хоста
Создадим директорию /content/private
и в ней файл index.html
:
[root@vm-01 ~]# mkdir /content/private
[root@vm-01 ~]# printf "This is private directory.\n$(date)\n" > /content/private/index.html
[root@vm-01 ~]# restorecon -vR /content/
[root@vm-01 ~]# ls -lahiZ /content/private/
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 .
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 ..
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
[root@vm-01 ~]#
Для директории /content/private
в конфигурационном файле /etc/httpd/conf.d/vm-01.conf
укажем адрес с которого разрешено обращаться
к содержимому данной директории:
# Virtual Hosts
#
# Required modules: mod_log_config
# If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#
# Please see the documentation at
# <URL:http://httpd.apache.org/docs/2.4/vhosts/>
# for further details before you try to setup virtual hosts.
#
# You may use the command line option '-S' to verify your virtual host
# configuration.
#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
#
<VirtualHost *:80>
ServerAdmin webmaster@vm-01.example.com
DocumentRoot "/content"
ServerName vm-01.example.com
ServerAlias www.vm-01.example.com
ErrorLog "/var/log/httpd/vm-01.example.com-error_log"
CustomLog "/var/log/httpd/vm-01.example.com-access_log" common
<Directory "/content">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
<Directory "/content/private">
AllowOverride None
# Allow open access:
Require ip 192.168.1.2
</Directory>
</VirtualHost>
Проверка
С виртуальной машины vm-02
обратимся к странице при помощи утилиты curl
:
[root@vm-02 ~]# curl "http://192.168.1.1/private/"
This is private directory.
Tue Jan 23 16:28:33 MSK 2018
[root@vm-02 ~]#
Как только изменяем значение директивы Require
виртуального хоста vm-01
, получаем следующее:
[root@vm-02 ~]# curl "http://192.168.1.1/private/"
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /private/
on this server.</p>
</body></html>
[root@vm-02 ~]#
Ограничение на основе аккаунта пользователя
Для директории /content/private
в конфигурационном файле /etc/httpd/conf.d/vm-01.conf
укажем способ аутентикации и путь к файлу с аккаунтами пользователей и их
паролями, для доступа к содержимому данной директории:
# Virtual Hosts
#
# Required modules: mod_log_config
# If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#
# Please see the documentation at
# <URL:http://httpd.apache.org/docs/2.4/vhosts/>
# for further details before you try to setup virtual hosts.
#
# You may use the command line option '-S' to verify your virtual host
# configuration.
#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
#
<VirtualHost *:80>
ServerAdmin webmaster@vm-01.example.com
DocumentRoot "/content"
ServerName vm-01.example.com
ServerAlias www.vm-01.example.com
ErrorLog "/var/log/httpd/vm-01.example.com-error_log"
CustomLog "/var/log/httpd/vm-01.example.com-access_log" common
<Directory "/content">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
<Directory "/content/private">
Require ip 192.168.1.2
</Directory>
</VirtualHost>
Создадим учетную запись andy
и пароль для нее:
[root@vm-01 ~]# htpasswd -c /etc/httpd/
conf/ conf.d/ conf.modules.d/ logs/ modules/ run/
[root@vm-01 ~]# htpasswd -c /etc/httpd/passwd andy
New password:
Re-type new password:
Adding password for user andy
[root@vm-01 ~]#