четверг, 22 марта 2012 г.

Настройка FTP сервера vsFTPd на Debian/Ubuntu

FTP сервер полезная вещь, он позволяет легко подключаться к серверу, для загрузки на сервер или скачивания с него данных.
Со всеми недостатками и изъянами в безопасности, FTP должен был отойти на второй план, как и протокол telnet, однако у него оказалось намного больше преимуществ, по этому он используется по сей день и довольно успешно. К нему появилось довольно много модификаций, которые позволяют например: заворачивать трафик в SSL/TLS для повышения безопасности переделываемых по сети данных, как это сделать можно ознакомиться в статье - Настройка ProFTPd для использования TLS. Но на этот раз не Proftpd.

Переходим в режим супер пользователя root:
Для Debian:
su


Для Ubuntu

sudo su

Устанавливаем vsFTPd:
aptitude install vsftpd

Нашей основной задачей является блокирование пользователя внутри своей домашней директории, для того, чтобы не допустить его переход в папки «соседей» по серверу. Для этого мы немного подредактируем конфигурационный файл vsftpd.conf.

nano /etc/vsftpd.conf

Находим и редактируем следующие строчки:

Разрешаем запись:
write_enable=YES

ascii_upload_enable=YES
ascii_download_enable=YES

напишем свой баннер для входа, хотя он и не обязателен( на работу он не влияет):
ftpd_banner=Welcome to our FTP service


Запираем пользователей в домашних директориях:
chroot_local_user=YES

Запрещаем анонимный доступ, необходимо найти строку:
#anonymous_enable=YES

И привести ее к виду:
anonymous_enable=NO

Ну и добавим работу в пассивном режиме:
pasv_min_port=50000 
pasv_max_port=60000

Поддержка IPv6 в vsFTPd
Для того чтобы добавить возможность работы с ip версии 6, то в конфигурационном файле находим строку:
listen=YES

Её необходимо за комментировать, чтобы она выглядела:
#listen=YES

Также, нам необходимо найти строку:
#listen_ipv6=YES

И снять с нее комментарий.
После этого, наш FTP сервер будет доступен по IPv4 и IPv6

Права доступа на файлы и директории


Параметр local_umask отвечает за то, какие права будут присвоены файлам, которые были закачаны через FTP, по умолчанию там установлено local_umask=022, маска расчитывается очень просто, по формуле 777-A=X
Где:
777-права полного доступа
А-права которые необходимо получить
Х-маска, которую необходимо выставить
Предположим, нам необходимо получить права 754 что соотвествует drwxr-xr--, тогда 777-754=23 получаетсяlocal_umask=023.
В любом случае, тот кто закачал файлы является их владельцем и может расширить права доступа к ним.
В общем, находим строку:
local_umask=022

И меняем 022 на 023 или на ту которая необходима в вашей ситуации:
local_umask=023

Авторизация vsftpd и /bin/false

Для обеспечения безопасности сервера, пользователям виртуальных хостов будет отключен шелл, как пишут на просторах интернетов, рекомендуется это делать следующим способом:

useradd username -b /home/ -m -U -s /bin/false

Создадим для него пароль:
passwd username

Рассмотрим это выражение более подробно.
Где:
username -имя пользователя(логин)
home-Директория где будет находиться его домашний каталог
ключ -m — указывает на то, что его домашней директории будет присвоено название которое было указано в username.
ключ -U -Указывает на то что необходимо создать одноименную группу.
-s /bin/false -что пользователю будет отключен шелл (это важный и тонкий момент!)
Назначение остальных ключей можно нагуглить за пару минут.

Если пользователю отключить шелл, то он не сможет залогиниться на FTP сервер, его будет просто отфутболивать.
Вдумчивое чтение документации по vsFTPd рассказало мне, что доступ к FTP могут получить пользователи которые имеют работоспособный шелл т.е. /bin/bash, для того чтобы пользователи с /bin/false могли авторизироваться на нашем ftp, нам необходимо отредактировать файл /etc/pam.d/vsftpd

nano /etc/pam.d/vsftpd

Найти и закоментировать строку (она самая последняя)
auth   required        pam_shells.so

чтобы она выглядела:
#auth   required        pam_shells.so

И перепапускаем vsftpd
/etc/init.d/vsftpd restart

И еще немного для общего развития- Пользователь с отключенным шеллом, не сможет подключиться по SSH! Это можно считать дополнительным плюсом к безопастности.
Как отключить шелл уже существующему в системе пользователю:
nano /etc/passwd

там находим нужного пользователя и /bin/bash меняем на /bin/false, после перезагрузки, изменения переменятся.

Комментариев нет:

Отправить комментарий