«Nginx переадресация c www на http» и «FTP-сервер с виртуальными пользователями на базе vsftpd»: разница между страницами

Материал из support.qbpro.ru
(Различия между страницами)
imported>Vix
(Новая страница: «* Пример с просторов интернета: <hr> server { server_name mysite.com; root /var/www/user/data/www/mysite.com; index index...»)
 
imported>Vix
(Новая страница: «''Автор: Уваров А.С. 29.01.2016'' vsftpd-virtual-user-000.jpg<br> Протокол FTP, несмотря на преклонный возраст...»)
 
Строка 1: Строка 1:
* Пример с просторов интернета:
''Автор: Уваров А.С. 29.01.2016''
[[vsftpd-virtual-user-000.jpg]]<br>
Протокол FTP, несмотря на преклонный возраст и серьезные недостатки продолжает широко применяться, во многом благодаря простоте и поддержке со стороны самого широкого спектра устройств и ПО. FTP-сервер является неотъемлемой частью любого веб-сервера, применяется в системах автоматизированного обмена данными. Наиболее часто встающей перед администраторами таких систем задачей является создание сервера с виртуальными пользователями. Сегодня мы расскажем, как это сделать.
 
Про настройку FTP-сервера на базе vsftpd мы уже рассказывали на страницах нашего сайта, недавно существенно дополнив и обновив статью Простой FTP-сервер на базе Ubuntu (vsftpd). В ней мы рассказали каким образом можно ограничить список пользователей, имеющих возможность подключаться к серверу, и их права. Однако локальные пользователи остаются при этом локальными пользователями и несмотря на ограниченные права могут оказаться объектом атаки, направленной на повышение прав, например, через уязвимости в каком-либо ПО.
 
Кроме того, ручное редактирование списков и настроек пользователей может оказаться весьма трудоемким делом если их не один-два, а существенно больше. Также иногда возникает ситуация, что светить данные реальных пользователей просто нежелательно, например, FTP используется движком сайта (CMS), связка пользователь-пароль явно прописана в конфиге и теоретически доступна любому работающему с сайтом сотруднику.
 
В таких ситуациях следует использовать виртуального пользователя, который будет иметь доступ исключительно к данному FTP-ресурсу и учетные данные которого можно смело сообщить всем принимающих участие в работе реальным сотрудникам.
 
В нашей статье мы настроим FTP-сервер для реализации следующей схемы:
 
[[vsftpd-virtual-user-001.jpg]]<br>
Пусть в нашем распоряжении имеется некий веб-сервер под управлением которого находятся три сайта: blue.lab, green.lab и red.lab, физически расположенные в одноименных директориях. Наша задача создать FTP-сервер с виртуальными пользователями, каждый из которых имеет доступ только к своему сайту.
 
Важное замечание, в данной схеме все сайты должны работать от имени веб-сервера (www-data), если вы используете запуск каждого сайта от имени своего (реального) пользователя, то вам лучше настроить FTP-сервер для работы с реальными пользователями или дополнительно обеспечить нужные права доступа для виртуальных пользователей, что может представлять из себя нетривиальную задачу.
 
Прежде всего установим соглашение: имя виртуального пользователя должно совпадать и именем корневой FTP-папки, в нашем случае папки сайта, а все такие папки должны располагаться в одном месте, т.е. подпадать под шаблон /var/www/$USER. Это позволит в дальнейшем с легкостью манипулировать сайтами и виртуальными пользователями, а также избежать путаницы в именах и настройках.
 
Определившись с моделью размещения данных можно переходить к настройкам ПО. Кроме vsftpd нам понадобятся пакеты libpam-pwdfile и apache2-utils. Последний входит в состав одноименного веб-сервера и если у вас уже работает Apache, то устанавливать его не надо.
 
Сама установка предельно проста:
 
apt-get install vsftpd libpam-pwdfile apache2-utils
После чего перейдем к настройкам FTP-сервера, которые расположены в файле /etc/vsftpd.conf, мы перечислим опции в порядке их нахождения в файле.
 
Данная опция запускает FTP-сервер как службу
 
listen=YES
ниже имеется аналогичная взаимоисключающая опция:
 
listen_ipv6=NO
Первая из них обеспечивает поддержку IPv4, вторая сразу IPv6 и IPv4, поэтому должна быть включена только одна из них.
 
Запрещаем анонимных пользователей:
 
anonymous_enable=NO
И разрешаем локальных (и виртуальных) пользователей:
 
local_enable=YES
Также разрешаем запись:
 
write_enable=YES
и задаем маску для вновь создаваемых файлов и папок:
 
local_umask=022
Это обеспечит установку прав 755 на папки и 644 на файлы, т.е. полный доступ только владельцу и чтение для группы и остальных.
 
Чтобы FTP использовал локальное время сервера, а не GMT установим:
 
use_localtime=YES
И включим лог загружаемых и скачиваемых файлов:
 
xferlog_enable=YES
Разрешаем передачу данных через порт 20, требуется для лучшей совместимости с некоторыми клиентами:
 
connect_from_port_20=YES
Задаем путь к логу и его формат:
 
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
Укажем таймауты:
 
idle_session_timeout=600
data_connection_timeout=120
Первый задает время отключения бездействующего пользователя, а второй время ожидания возобновления неоконченной передачи.
 
Для корректной работы с текстовыми данными, в частности с символами переноса строки в разных ОС (CR+LF в Windows, LF в Linux) включим поддержку ASCII, это полезно, если вы скачиваете скрипты или файлы с Linux сервера, правите их в среде Windows и заливаете обратно. В этом случае FTP автоматически будет менять символы переноса строки для соответствия стандартам системы.
 
ascii_upload_enable=YES
ascii_download_enable=YES
Обязательно изолируем пользователя в корне его домашней директории и рядом впишем опцию, разрешающую запись в корень:
 
chroot_local_user=YES
allow_writeable_chroot=YES
Остальные опции оставляем без изменения.
 
Ниже добавим необходимые нам настройки. Разрешим пассивный режим и явно укажем диапазон портов:
 
pasv_enable=YES
pasv_min_port=62000
pasv_max_port=62999
Включим виртуальных пользователей:
 
guest_enable=YES
Укажем от имени какого реального пользователя они будут работать, так как в нашем случае нам надо работать с содержимым веб-сервера, то указываем соответствующего пользователя www-data.
 
guest_username=www-data
Применяем к виртуальным пользователям настройки локальных, иначе к ним будут применены ограничения анонимных.
 
virtual_use_local_privs=YES
Укажем шаблон для автоматической генерации домашнего каталога виртуального пользователя:
 
user_sub_token=$USER
Теперь можно задать сами домашние директории
 
local_root=/var/www/$USER
Также иногда неплохо будет скрыть реальных владельцев содержимого, для этого добавьте:
 
hide_ids=YES
Если вы используете Ubuntu, то добавьте следующую недокументированную опцию:
 
seccomp_sandbox=NO
Это позволит избежать ошибки 500 OOPS: prctl PR_SET_SECCOMP failed, которая возникает из некорректной совместной работы vsftpd и системы безопасности seccomp, в Debian данная ошибка не проявляется.
 
На этом настройка FTP-сервера закончена, сохраняем файл и переходим к настройке правил аутентификации. Откроем /etc/pam.d/vsftpd, закомментируем в нем все строки и добавим две свои:
 
auth required pam_pwdfile.so pwdfile /etc/vsftpwd
account required pam_permit.so
После этого аутентификация локальных пользователей на FTP-сервере будет невозможна, работать будут только виртуальные. Опция pwdfile /etc/vsftpwd указывает путь к файлу паролей, его нам необходимо будет создать на следующем шаге.
 
Для создания пользователей будем использовать утилиту htpasswd из состава apache2-utils, для создания файла паролей и первого пользователя введите:
 
htpasswd -c -d /etc/vsftpwd blue.lab
Ключ -c предписывает создать файл паролей, если он существует, то все данные в нем будут очищены, а файл перезаписан, -d задает необходимый для vsftpd алгоритм шифрования хэша пароля.
 
Следующие пользователи создаются командой (в нашем примере это пользователь green.lab):
 
htpasswd -d /etc/vsftpwd green.lab
Для удаления пользователя используйте (удаляем red.lab):
 
htpasswd -D /etc/vsftpwd red.lab
После чего можно перезапустить службу FTP-сервера и проверить его работу:
 
service vsftpd restart
Как видим, настроить FTP-сервер с виртуальными пользователями по нашей инструкции (в отличие от многих иных "инструкций" в сети) абсолютно несложно и недолго. Если вы будете внимательно следовать всем нашим рекомендациям, то сложностей у вас возникнуть не должно.
 
'''ИСТОЧНИК:'''
<hr>
<hr>
server {
* [https://interface31.ru/tech_it/2016/01/nastraivaem-ftp-server-s-virtual-nymi-pol-zovatelyami-na-baze-vsftpd.html Записки IT специалиста]
  server_name mysite.com;
  root /var/www/user/data/www/mysite.com;
        index index.php;
    try_files  $uri $uri/ @rewrite;
  listen 123.456.789.11;
  listen 123.456.789.11 ssl http2;
  charset UTF-8;
.....
  set $root_path /.......;
        ssl_certificate /......;
        ssl_certificate_key /......;
      ......
.....
..........
        add_header Strict-Transport-Security "max-age=31536000";
.....
......
if ($scheme = http) {
rewrite ^ https://$http_host$request_uri? permanent;
}
if ($http_host !~ "^mysite.com$"){
rewrite ^(.*)$ https://mysite.com$1 redirect;
}
......
.....
}
 
* [https://qna.habr.com/q/477930 Как настроить редирект с www на без www + HTTPS в Nginx?]

Версия от 02:18, 13 декабря 2020

Автор: Уваров А.С. 29.01.2016 vsftpd-virtual-user-000.jpg
Протокол FTP, несмотря на преклонный возраст и серьезные недостатки продолжает широко применяться, во многом благодаря простоте и поддержке со стороны самого широкого спектра устройств и ПО. FTP-сервер является неотъемлемой частью любого веб-сервера, применяется в системах автоматизированного обмена данными. Наиболее часто встающей перед администраторами таких систем задачей является создание сервера с виртуальными пользователями. Сегодня мы расскажем, как это сделать.

Про настройку FTP-сервера на базе vsftpd мы уже рассказывали на страницах нашего сайта, недавно существенно дополнив и обновив статью Простой FTP-сервер на базе Ubuntu (vsftpd). В ней мы рассказали каким образом можно ограничить список пользователей, имеющих возможность подключаться к серверу, и их права. Однако локальные пользователи остаются при этом локальными пользователями и несмотря на ограниченные права могут оказаться объектом атаки, направленной на повышение прав, например, через уязвимости в каком-либо ПО.

Кроме того, ручное редактирование списков и настроек пользователей может оказаться весьма трудоемким делом если их не один-два, а существенно больше. Также иногда возникает ситуация, что светить данные реальных пользователей просто нежелательно, например, FTP используется движком сайта (CMS), связка пользователь-пароль явно прописана в конфиге и теоретически доступна любому работающему с сайтом сотруднику.

В таких ситуациях следует использовать виртуального пользователя, который будет иметь доступ исключительно к данному FTP-ресурсу и учетные данные которого можно смело сообщить всем принимающих участие в работе реальным сотрудникам.

В нашей статье мы настроим FTP-сервер для реализации следующей схемы:

vsftpd-virtual-user-001.jpg
Пусть в нашем распоряжении имеется некий веб-сервер под управлением которого находятся три сайта: blue.lab, green.lab и red.lab, физически расположенные в одноименных директориях. Наша задача создать FTP-сервер с виртуальными пользователями, каждый из которых имеет доступ только к своему сайту.

Важное замечание, в данной схеме все сайты должны работать от имени веб-сервера (www-data), если вы используете запуск каждого сайта от имени своего (реального) пользователя, то вам лучше настроить FTP-сервер для работы с реальными пользователями или дополнительно обеспечить нужные права доступа для виртуальных пользователей, что может представлять из себя нетривиальную задачу.

Прежде всего установим соглашение: имя виртуального пользователя должно совпадать и именем корневой FTP-папки, в нашем случае папки сайта, а все такие папки должны располагаться в одном месте, т.е. подпадать под шаблон /var/www/$USER. Это позволит в дальнейшем с легкостью манипулировать сайтами и виртуальными пользователями, а также избежать путаницы в именах и настройках.

Определившись с моделью размещения данных можно переходить к настройкам ПО. Кроме vsftpd нам понадобятся пакеты libpam-pwdfile и apache2-utils. Последний входит в состав одноименного веб-сервера и если у вас уже работает Apache, то устанавливать его не надо.

Сама установка предельно проста:

apt-get install vsftpd libpam-pwdfile apache2-utils

После чего перейдем к настройкам FTP-сервера, которые расположены в файле /etc/vsftpd.conf, мы перечислим опции в порядке их нахождения в файле.

Данная опция запускает FTP-сервер как службу

listen=YES

ниже имеется аналогичная взаимоисключающая опция:

listen_ipv6=NO

Первая из них обеспечивает поддержку IPv4, вторая сразу IPv6 и IPv4, поэтому должна быть включена только одна из них.

Запрещаем анонимных пользователей:

anonymous_enable=NO

И разрешаем локальных (и виртуальных) пользователей:

local_enable=YES

Также разрешаем запись:

write_enable=YES

и задаем маску для вновь создаваемых файлов и папок:

local_umask=022

Это обеспечит установку прав 755 на папки и 644 на файлы, т.е. полный доступ только владельцу и чтение для группы и остальных.

Чтобы FTP использовал локальное время сервера, а не GMT установим:

use_localtime=YES

И включим лог загружаемых и скачиваемых файлов:

xferlog_enable=YES

Разрешаем передачу данных через порт 20, требуется для лучшей совместимости с некоторыми клиентами:

connect_from_port_20=YES

Задаем путь к логу и его формат:

xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES

Укажем таймауты:

idle_session_timeout=600
data_connection_timeout=120

Первый задает время отключения бездействующего пользователя, а второй время ожидания возобновления неоконченной передачи.

Для корректной работы с текстовыми данными, в частности с символами переноса строки в разных ОС (CR+LF в Windows, LF в Linux) включим поддержку ASCII, это полезно, если вы скачиваете скрипты или файлы с Linux сервера, правите их в среде Windows и заливаете обратно. В этом случае FTP автоматически будет менять символы переноса строки для соответствия стандартам системы.

ascii_upload_enable=YES
ascii_download_enable=YES

Обязательно изолируем пользователя в корне его домашней директории и рядом впишем опцию, разрешающую запись в корень:

chroot_local_user=YES
allow_writeable_chroot=YES

Остальные опции оставляем без изменения.

Ниже добавим необходимые нам настройки. Разрешим пассивный режим и явно укажем диапазон портов:

pasv_enable=YES
pasv_min_port=62000
pasv_max_port=62999

Включим виртуальных пользователей:

guest_enable=YES

Укажем от имени какого реального пользователя они будут работать, так как в нашем случае нам надо работать с содержимым веб-сервера, то указываем соответствующего пользователя www-data.

guest_username=www-data

Применяем к виртуальным пользователям настройки локальных, иначе к ним будут применены ограничения анонимных.

virtual_use_local_privs=YES

Укажем шаблон для автоматической генерации домашнего каталога виртуального пользователя:

user_sub_token=$USER

Теперь можно задать сами домашние директории

local_root=/var/www/$USER

Также иногда неплохо будет скрыть реальных владельцев содержимого, для этого добавьте:

hide_ids=YES

Если вы используете Ubuntu, то добавьте следующую недокументированную опцию:

seccomp_sandbox=NO

Это позволит избежать ошибки 500 OOPS: prctl PR_SET_SECCOMP failed, которая возникает из некорректной совместной работы vsftpd и системы безопасности seccomp, в Debian данная ошибка не проявляется.

На этом настройка FTP-сервера закончена, сохраняем файл и переходим к настройке правил аутентификации. Откроем /etc/pam.d/vsftpd, закомментируем в нем все строки и добавим две свои:

auth required pam_pwdfile.so pwdfile /etc/vsftpwd
account required pam_permit.so

После этого аутентификация локальных пользователей на FTP-сервере будет невозможна, работать будут только виртуальные. Опция pwdfile /etc/vsftpwd указывает путь к файлу паролей, его нам необходимо будет создать на следующем шаге.

Для создания пользователей будем использовать утилиту htpasswd из состава apache2-utils, для создания файла паролей и первого пользователя введите:

htpasswd -c -d /etc/vsftpwd blue.lab

Ключ -c предписывает создать файл паролей, если он существует, то все данные в нем будут очищены, а файл перезаписан, -d задает необходимый для vsftpd алгоритм шифрования хэша пароля.

Следующие пользователи создаются командой (в нашем примере это пользователь green.lab):

htpasswd -d /etc/vsftpwd green.lab

Для удаления пользователя используйте (удаляем red.lab):

htpasswd -D /etc/vsftpwd red.lab

После чего можно перезапустить службу FTP-сервера и проверить его работу:

service vsftpd restart

Как видим, настроить FTP-сервер с виртуальными пользователями по нашей инструкции (в отличие от многих иных "инструкций" в сети) абсолютно несложно и недолго. Если вы будете внимательно следовать всем нашим рекомендациям, то сложностей у вас возникнуть не должно.

ИСТОЧНИК: