Proftpd или доступ по ftp к сайту

Установка и настройка PROFTPD

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

CentOS 7

sudo yum install -y proftpd proftpd-utils
systemctl enable proftpd

После установки ProFTPd сразу готов обслуживать доступ по небезопасному протоколу FTP. Для активации FTPS требуется совершить ряд дополнительных настроек, которые приведены ниже. Вы должны заменить %WEBSITE% на имя домена, указанного при генерации сертификата Let’s Encrypt.

<IfModule mod_tls.c>
TLSEngine                               on
TLSLog                                  /var/log/proftpd/tls.log
TLSProtocol                             SSLv23
TLSRequired                             yes

TLSRSACertificateFile    /etc/letsencrypt/live/%WEBSITE%-0001/cert.pem
TLSRSACertificateKeyFile /etc/letsencrypt/live/%WEBSITE%-0001/privkey.pem
TLSCACertificateFile     /etc/letsencrypt/live/%WEBSITE%-0001/chain.pem
</IfModule>

Debian, Ubuntu. Данный код можно добавить в /etc/proftpd/tls.conf.

CentOS 7. В CentOS 7 создайте файл /etc/proftpd/disabled_mod/tls.conf с вышеприведенным содержимым и активируйте модуль:

ln -s /etc/proftpd/disabled_mod/tls.conf  /etc/proftpd/enabled_mod/
systemctl restart proftpd

Теперь вы можете проверить работу FTPS, соединившись с сервером, например, с помощью LFTP:

touch file

lftp -e 'put file' ftp://administrator@proftp.cs2.netpoint-dc.com
Пароль: 
lftp administrator@proftp.cs2.netpoint-dc.com:~> ls                                              
-rw-r--r--   1 administrator administrator        0 Apr  6 22:59 file
lftp administrator@proftp.cs2.netpoint-dc.com:~> 

В процессе соединения LFTP должен сообщить об установке защищенного соединения. Поскольку мы принудительно требуем установки защищенного соединения с помощью директивы TLSRequired yes, то клиенты без поддержки TLS не смогут работать с сервером. Если вы хотите разрешить им выполнять загрузку в небезопасном режиме, установите TLSRequired в значение no.

На этом базовая настройка сервера FTP, обеспечивающего безопасные сессии пользователей по протоколу FTPS завершена.

Использование виртуальных пользователей

Для безопасности рекомендуется использовать не реальных пользователей системы, а виртуальных. Мы рассмотрим процесс их хранения в файле или базе данных.

Хранение в файле

Создаем виртуального пользователя командой:

ftpasswd —passwd —file=/etc/proftpd/ftpd.passwd —name=ftpvirt —uid=33 —gid=33 —home=/var/tmp —shell=/usr/sbin/nologin

* где: 

  • /etc/proftpd/ftpd.passwd — путь до файла, в котором хранятся пользователи; 
  • ftpvirt — имя пользователя (логин); 
  • uid и gid — идентификаторы пользователя и группы системной учетной записи (например, www-data); 
  • /var/tmp — домашний каталог пользователя; 
  • /usr/sbin/nologin — оболочка, запрещающая локальный вход пользователя в систему.

Открываем конфигурационный файл proftpd:

vi /etc/proftpd/proftpd.conf

Снимаем комментарий или редактируем опцию (если не сделали это раньше):

DefaultRoot                     ~

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

Создаем дополнительный конфигурационный файл для proftpd:

vi /etc/proftpd/conf.d/virtual_file.conf

RequireValidShell off
AuthUserFile /etc/proftpd/ftpd.passwd
AuthPAM off
LoadModule mod_auth_file.c
AuthOrder mod_auth_file.c

Перезапускаем сервис FTP-сервера:

systemctl restart proftpd

Хранение в MariaDB (MySQL)

Настройку разделим на два этапа:

  1. Установку и настройку СУБД.
  2. конфигурирование FTP-сервера.

В качестве СУБД будем использовать MariaDB / MySQL.

СУБД

Устанавливаем на Ubuntu СУБД и модуль mysql для ProFTPd:

apt-get install mariadb-server proftpd-mod-mysql

Разрешаем автозапуск сервиса mariadb:

systemctl enable mariadb

Задаем пароль для пользователя root в mysql:

mysqladmin -u root password

Подключаемся к базе данных:

mysql -uroot -p

Создаем базу данных для хранения пользователей:

> CREATE DATABASE proftpd DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

* в данном примере мы создали базу данных proftpd.

Создаем таблицу в созданной базе:

> CREATE TABLE `proftpd`.`users` (
`userid` VARCHAR( 32 ) NOT NULL ,
`passwd` CHAR( 41 ) NOT NULL ,
`uid` INT NOT NULL ,
`gid` INT NOT NULL ,
`homedir` VARCHAR( 255 ) NOT NULL ,
`shell` VARCHAR( 255 ) NOT NULL DEFAULT ‘/usr/sbin/nologin’,
UNIQUE (`userid`)           
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;

* данной командой мы создаем таблицу users в базе данных proftpd.

Создаем пользователя mariadb для доступа к таблицам базы proftpd:

> GRANT SELECT ON proftpd.* TO proftpd_user@localhost IDENTIFIED BY ‘proftpd_password’;

* мы создали пользователя proftpd_user с паролем proftpd_password, которому дали право подключаться только с локального сервера.

Добавляем FTP-пользователя в таблицу:

> INSERT INTO `proftpd`.`users` VALUES (‘sqluser’, ENCRYPT(‘sqlpassword’), ’33’, ’33’, ‘/var/tmp’, ‘/usr/sbin/nologin’);

* в данном примере мы создаем пользователя sqluser с паролем sqlpassword.

… и отключаемся от базы:

> \q

Настройка FTP-сервера

Открываем конфигурационный файл для proftpd:

vi /etc/proftpd/proftpd.conf

Снимаем комментарий для подключения файла sql.conf:

Include /etc/proftpd/sql.conf

Открываем на редактирование файл sql.conf:

vi /etc/proftpd/sql.conf

Приводим его к виду:

<IfModule mod_sql.c>

SQLBackend      mysql

SQLEngine on
SQLAuthenticate users

SQLAuthTypes Crypt

SQLConnectInfo proftpd@localhost proftpd_user proftpd_password

SQLUserInfo users userid passwd uid gid homedir shell

SqlLogFile /var/log/proftpd/sql.log

</IfModule>

* где нужно обратить внимание на следующие параметры:

  • SQLAuthenticate — указываем, что модуль должен выполнять аутентификацию по пользователю.
  • SQLAuthTypes — способ хранения пароля в базе. Можно перечислить несколько вариантов. Для наибольшей безопасности мы разрешили хранить пароли только в зашифрованном виде.
  • SQLConnectInfo — параметры для подключения к базе. Здесь мы задаем имя и сервер базы данных, а также данные пользователя для подключения.
  • SQLUserInfo — информация о таблице, где хранится пользователь. Мы указываем на название таблицы и перечисляем название полей, в которых хранятся нужные сведения.

Создаем дополнительный конфигурационный файл для proftpd:

vi /etc/proftpd/conf.d/virtual_mysql.conf

RequireValidShell               off
AuthOrder                       mod_sql.c

Открываем файл modules.conf:

vi /etc/proftpd/modules.conf

Снимаем комментарии для следующих строк:

LoadModule mod_sql.c

LoadModule mod_sql_mysql.c

Перезапускаем сервис FTP-сервера:

systemctl restart proftpd

Можно пробовать подключаться к базе под пользователем sqluser с паролем sqlpassword. 

Installation Overview

For detailed installation instructions, see the INSTALL file in the root
directory of the source distribution.

The ProFTPD source distribution is designed to be configured using the GNU
autotools, so compiling and installing follows the familiar command sequence of

./configure
make
make install

However, a significant portion of ProFTPD’s configurability is done at compile
time, so it is highly recommended that you read INSTALL and all of the
README.* files that pertain to your platform and desired features before
building the sources.

ProFTPD uses a single configuration file. A few examples are included in the
sample-configurations/ subdirectory of the source
distribution.

On most systems, the or configuration must be changed, either
to remove the current ftpd entry to run ProFTPD standalone, or to change the
current ftpd entry to use the proftpd daemon.

Настройка ProFTPD

Посмотрим файл конфигурации, который создал установщик /usr/local/etc/proftpd.conf

#
# For more information about Proftpd configuration
# see http://www.proftpd.org/
#
# This is a basic ProFTPD configuration file (rename it to
# 'proftpd.conf' for actual use. It establishes a single server
# and a single anonymous login. It assumes that you have a user/group
# "nobody" and "ftp" for normal operation and anon.

ServerName "ProFTPD Default Installation"
ServerType standalone
DefaultServer on
ScoreboardFile /var/run/proftpd/proftpd.scoreboard

# Port 21 is the standard FTP port.
Port 21

# Use IPv6 support by default.
UseIPv6 on

# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask 022

# To prevent DoS attacks, set the maximum number of child processes
# to 30. If you need to allow more than 30 concurrent connections
# at once, simply increase this value. Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd).
MaxInstances 30

CommandBufferSize 512

# Set the user and group under which the server will run.
User nobody
Group nogroup

# To cause every FTP user to be "jailed" (chrooted) into their home
# directory, uncomment this line.
#DefaultRoot ~

# Normally, we want files to be overwriteable.
AllowOverwrite on

# Bar use of SITE CHMOD by default
<Limit SITE_CHMOD>
 DenyAll
</Limit>

# A basic anonymous configuration, no upload directories. If you do not
# want anonymous users, simply delete this entire <Anonymous> section.


#########################################################################
# #
# Uncomment lines with only one # to allow basic anonymous access #
# #
#########################################################################

#<Anonymous ~ftp>
# User ftp
# Group ftp

### We want clients to be able to login with "anonymous" as well as "ftp"
 # UserAlias anonymous ftp

### Limit the maximum number of anonymous logins
 # MaxClients 10

### We want 'welcome.msg' displayed at login, and '.message' displayed
 ### in each newly chdired directory.
 # DisplayLogin welcome.msg
 # DisplayFirstChdir .message

Limit WRITE everywhere in the anonymous chroot
 # <Limit WRITE>
 # DenyAll
 # </Limit>
#</Anonymous>

По сути все должно уже работать с этим конфигом.

Настройка системы

Подготовим нашу операционную систему для корректной работы сервера FTP. Для этого настроим синхронизацию времени и правила в Firewall.

1. Время

Для корректного отображения времени создания файлов, необходимо синхронизировать его с внешним источником. Также необходимо задать корректный часовой пояс. Для этого вводим команду:

timedatectl set-timezone Europe/Moscow

* в данном примере мы задаем зону по московскому времени. Список все доступных зон можно посмотреть командой timedatectl list-timezones.

Устанавливаем chrony:

apt-get install chrony

systemctl enable chrony

2. Брандмауэр

Если в нашем сервере используется фаервол (по умолчанию, он работает с разрешающими правилами), разрешаем порты:

  • 20 — для передачи данных.
  • 21 — для передачи команд.
  • с 60000 по 65535 — набор для пассивного обмена FTP. Данный диапазон может быть любым из свободных, но практика показывает, что данные значения работают стабильнее.

В зависимости от утилиты управления брандмауэром, дальнейшие действия будут отличаться.

а) Iptables

Если для управления netfilter мы используем утилиту Iptables, то вводим команду:

iptables -I INPUT -p tcp —match multiport —dports 20,21,60000:65535 -j ACCEPT

Для сохранения правил можно использовать утилиту:

apt-get install iptables-persistent

netfilter-persistent save

б) UFW

В ufw команда будет следующей:

ufw allow 20,21,60000:65535/tcp

Настройка базы данных

Войдите в предварительно установленный phpMyAdmin. В панели управления выберите вкладку Privileges и кликните Add user.

После этого нужно выбрать имя пользователя (в данном руководстве это ftpd) и создать пароль.

Примечание: Эти данные очень важны – они понадобятся в дальнейшем.

В разделе Database for user выберите «Create database with same name and grant all privileges»:

Это создаст пользователя и одноимённую БД для ProFTPD, а затем передаст пользователю все права на неё. Теперь нужно заполнить БД таблицами. Слева можно увидеть новую базу данных (её имя совпадает с именем пользователя, потому в данном случае она называется ftpd); кликните по ней.

Затем откройте вкладку SQL, внесите следующий код и нажмите Go:

Это создаст необходимую БД.

Шифрование при передаче данных

Следующим этапом настроим передачу данных через TLS.

В конфигурационном файле сервера ftp снимаем комментарий для строки:

vi /etc/proftpd/proftpd.conf

Include /etc/proftpd/tls.conf

Открываем конфигурационный файл tls.conf:

vi /etc/proftpd/tls.conf

Снимаем комментарии для следующих настроек:

TLSEngine                       on
TLSLog                          /var/log/proftpd/tls.log
TLSProtocol                     SSLv23

TLSRSACertificateFile           /etc/ssl/certs/proftpd.crt
TLSRSACertificateKeyFile        /etc/ssl/private/proftpd.key

TLSOptions                      NoCertRequest EnableDiags NoSessionReuseRequired

TLSVerifyClient                 off

TLSRequired                     on

* параметр TLSRequired можно задать в значение off, если мы не хотим требовать от клиента соединения по TLS.

Приводим значение для одного из раскомментированных параметров к следующему:

TLSProtocol                     SSLv23 TLSv1.2

* мы добавили TLSv1.2 для поддержки более актуального протокола шифрования. В противном случае, некоторые старые клиенты могут возвращать ошибку Error in protocol version.

Генерируем сертификат:

openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/ssl/private/proftpd.key -out /etc/ssl/certs/proftpd.crt -subj «/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=ftp.dmosk.local/CN=ftp»

* где ftp.dmosk.local — имя сервера в формате FQDN (не принципиально).

Перезапускаем ProFTPd:

systemctl restart proftpd

Запуск ProFTPD

В файл /etc/rc.conf добавляем строку

proftpd_enable="YES"

Запускаем без перезагрузки сервера сервис ProFTPD:

# service proftpd start

Вышла ошибка:

# service proftpd start
Starting proftpd.
2016-12-19 11:26:14,483 srv01 proftpd: fatal: UseIPv6: Use of the UseIPv6 directive requires IPv6 support (--enable-ipv6) on line 19 of '/usr/local/etc/proftpd.conf'
/usr/local/etc/rc.d/proftpd: WARNING: failed to start proftpd

Закомментировал строку:

# Use IPv6 support by default.
# UseIPv6 on

Запустил заново, вышла ошибка:

# service proftpd start
Starting proftpd.
2016-12-19 11:31:07,047 srv01 proftpd: warning: unable to determine IP address of 'srv01'
2016-12-19 11:31:07,047 srv01 proftpd: error: no valid servers configured
2016-12-19 11:31:07,047 srv01 proftpd: fatal: error processing configuration file '/usr/local/etc/proftpd.conf'
/usr/local/etc/rc.d/proftpd: WARNING: failed to start proftpd

Имя сервера у меня srv01, добавляю в hosts

192.168.146.252 srv01

Теперь все успешно запустилось:

# service proftpd start
Starting proftpd.

Перезапустить можно командой:

# service proftpd restart

Теперь можно на любом клиенте проверить доступ к серверу по следующему адресу (в адресной строке любого браузера набираете):

ftp://192.168.146.252/

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

Естественно вводите существующего пользователя системы FreeBSD 11.0

По сути вот мы и произвели простейшую настройку ФТП-сервера для использования в локальной сети.

Думаю надо остановиться на вопросах прописывания правил для файерволла ipfw, для того, чтобы открыть доступ снаружи к установленному фтп-серверу.

Подмена владельца файлов для виртуального пользователя

Бывает нужно чтобы файлы на сервер сохранялись сразу («на лету», во время закачки) под каким-то системным юзером (например «www-data» или «apache»), независимо от того под каким виртуальным пользователем ProFTPd происходит закачивание. Это намного удобнее, чем запускать специальные скрипты меняющие у файлов права пользователя после закачки или делать это из консоли.

Убил много времени на поиск того как это делается, перепробовав разные настройки ( UserOwner, GroupOwner, UserAlias и пр.) — оказалось есть простой способ.

При создании виртуального юзера, нужно его логин и пароль указывать новые, а ID юзера/группы — такие как у необходимого уже имеющегося системного юзера и/или группы (например это может быть 48 для «www-data»). Это самое простое решение проблемы.

Если виртуальному юзеру указать ID системных юзера/группы, то его файлы будут сохраняться от имени системных

Итак — подмена владельца закачиваемых файлов через указание ID системного пользователя, по порядку (*здесь описана файловая аутентификация, но для SQL варианта, подмена ID системного юзера/группы обычному виртуальному прописывается схожим образом):

1. Создаем папку если ее нет (под root в консоли):

Права — root:root 755

2. Прописываем виртуального пользователя в файл (под root в консоли):

где: —file=/etc/proftpd/vuser1.passwd — файл с паролями виртуальных юзеров —name=vuser1 — имя первого/очередного виртуального юзера—uid=48 — ID необходимого системного юзера (например «www-data») —gid=48 — ID необходимой системной группы (например «www-data») —home=/var/www/html/vuser1 — домашний каталог виртуального пользователя ВАЖНО! — владельцем файла «/etc/proftpd/ftpd.group» должен быть тот системный пользователь/группа, чей uid/gid подменяет виртуального — узнать uid и gid например для «www-data» можно набрав в консоли —

3. Прописываем группу виртуального пользователя в файл (под root в консоли):

где: —file=/etc/proftpd/ftpd.group — файл групп виртуальных юзеров —name=vgroup — имя виртуальной группы виртуального юзера —gid=48 — ID необходимой системной группы (например «www-data») —member=vuser1 — виртуальный юзер — член виртуальной группы ВАЖНО! — владельцем файла «/etc/proftpd/ftpd.group» должен быть тот системный пользователь/группа, чей uid/gid подменяет виртуального — если это не первый юзер в группе, то «member» надо перечислять: … —member=vuser1 —member=vuser2 ..

В предыдущих двух пунктах все достаточно стандартно, кроме UID=48 и GID=48, где 48 — UID и GID системного пользователя и группы «www-data» (имя группы и пользователя в этом примере совпадает)

4. Настройки proftpd.conf могут быть примерно такими:

...
DefaultRoot			~ vgroup
RequireValidShell		off
...
<Global> 
  ... 
  AuthUserFile            /etc/proftpd/ftpd.passwd  
  AuthGroupFile           /etc/proftpd/ftpd.group  
  ...
  <Directory /var/www/html/vuser1/*>
      ...    
      <Limit LOGIN>
        AllowUser vuser1
        DenyAll
      </Limit>
      ...
  </Directory>
  ...
</Global>
...

DefaultRoot   ~  vgroupRequireValidShell   offAllowUser   vuser1

ВАЖНО! Не забываем прописать модуль аутентификации из файла в настройках —

Настройка

Начать нам придется с настройки не самого ProFTP, а с файервола. Если на компьютере, на котором Вы установили и запустили ProFTP, он (файервол) включен, то в нем потребуется открыть порт, используемый для FTP. Обычно это 21-й порт. При желании, Вы сможете настроить ProFTP-сервер на использование порта с другим номером (об этом ниже). В таком случае, в файерволе нужно будет открыть тот порт, который Вы использовали для FTP. О том, каким образом в Mandriva Linux можно открыть порты в файерволе, я уже писал тут.

Теперь о настройке собственно ProFTP. Сразу же после установки сервер ProFTP сконфигурирован в некоем «умолчательном» варианте и уже запущен. Если Вы установили только сам ProFTP (с неким набором модулей, идущим в «комплекте по умолчанию»), и не устанавливали никаких дополнительных пакетов с модулями для ProFTP, то вся настройка сервера осуществляется в единственном файле — /etc/proftpd.conf. По этому, именно его мы и открываем в (любом) текстовом редакторе.

Находим в указанном файле первый интересующий нас параметр — имя сервера. Он задан вот такой строкой:

Как по мне — не самый важный параметр. Но тем не менее — Вы можете для своего сервера ввести то имя, которое Вам нравится. Находим следующий параметр, который можно изменить «на свой вкус и цвет». Это упоминавшийся ранее номер порта:

Менять его или нет — решать Вам. Если Вы планируете создать у себя публичный FTP-сервер, то однозначно не стоит. Потому как, по умолчанию, когда кто-то в своем браузере набирает «ftp://some.ftp.server.com», то запрос пойдет именно на 21-й порт указанного сервера. С другой стороны, Вы можете использовать ProFTP только для «личных нужд». В этом случае, можно уйти со стандартных номеров портов, которые в первую очередь сканируются злоумышленникам и при попытке взлома…

Еще пара «глобальных» параметров сервера:

Они задают пользователя и группу, от имени которых запущен сервер. Этот «бесправный» (в прямом смысле слова) пользователь «автоматом» создается для нужд ProFTP. В данном случае, на мой взгляд, ничего менять не нужно.

Следующий параметр, который я изменил в файле конфигурации:

Причину этого действия я уже описал у себя в блоге ранее. Дело в том, что если значение параметра установлено в «on«, ProFTP для нужд ведения своего лога (журнала работы) выполняет DNS-запрос имени компьютера, пытающегося к нему подключиться. В случае неудачи (а такое случается, например, в описанном мной случае — из-за кривизны настройки у провайдера «домашней сети») удаленный компьютер подключиться не сможет. С другой стороны, если данный параметр выключен («off«), то в лог пишется просто IP-адрес удаленного компьютера. На мой взгляд, этого вполне достаточно.

Таким образом, подводя итог всего сказанного выше, получается, что их всех настроек, изначально присутствовавших в файле /etc/proftpd.conf (по умолчанию), я изменил всего лишь одну — отключил запрос имен компьютеров, подключающихся к моему FTP-серверу. На этом, с «глобальными» настройками я покончил.

Есть еще одна вещь, которую нужно сделать. Необходимо в текстовом редакторе (от имени «root-а») открыть файл /etc/shells и добавить в него такую строку:

Этим мы добавляем «пустую» командную оболочку. Она потребуется нам при создании пользователей, которым мы предоставим возможность записи файлов на наш FTP-сервер. В итоге, этим «избранным» пользователям в нашем сервере будут доступны только команды протокола FTP, и ничего более. Безопасность, однако…

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

Конфигурация

Давайте же сконфигурируем демона так, чтобы обезопасить наш сервер. Для этого откроем конфигурационный файл ProFTPd /etc/proftpd/proftpd.conf и посмотрим на представленные опции:

  • UseIPv6 — включить ли поддержку IPv6 или оставить только IPv4. Я рекомендую включить поддержку, а то малоли что — хуже не будет.
  • ServerName — имя сервера, которое будет отображаться при коннекте с помощью ProFTPd. Установите для красоты, хотя в дальнейшем, когда у вас будет много серверов это может носить и полезный характер.
  • DefaultRoot — опция, которая устанавливает домашнюю директорию пользователя выше, которой он не сможет подняться. Подробней об этой возможности пойдет речь ниже, так что пока особо не парьтесь.
  • RequireValidShell — опция запрета коннекта для пользователей, у которых не указана рабочая командная среда, т.е. пользователи с /bin/false не будут иметь доступ через FTP. Думаю эта опция нужна только в особенных случая, но на всякий случай я вам о ней сказал.
  • Port — стандартный порт подключения, который будет слушать ProFTPd. Для повышения безопасности рекомендую его изменить.
  • MaxInstances — максимальное количество одновременных подключений. Будьте внимательны, это именно количество одновременных соединений, а не пользователей, т.е. для каждого пользователя может быть по несколько соединений. Установите ту цифру, которую считает оправданной в вашем случаи, например, если вы единственный администратор сервера, то думаю 5 коннектов вам хватит за глаза.
  • Umask — маска создаваемых пользователем файлов. Т.е. в зависимости от маски создаваемым файлам и папкам будут присвоены определенные права доступа. По-умолчанию стоит маска 022, что значит что директории будут создаваться с chmod 755, а файлы — 644, что разрешает полный доступ только для пользователя FTP, который создал файлы, а остальные смогут только открывать на чтение.
  • AllowOverwrite — опция разрешающая перезапись файлов, т.е. в том случаи если опция в off, то пользователь не сможет заменить одноименный файл. Рекомендую установить в on, чтобы иметь возможность перезаписи, если ваша задача не требует иного.

Это основные опции для настройки демона, которые позволят немного обезопасить ваш сервер и сделать его использование более гибким. Хотя это далеко не все опции, их там гораздо больше, но на мой взгляд, это самые необходимые. Если вам интересно, то вы можете почитать официальную документацию этой утилитки и узнать побольше интересностей о настройках.

Кстати, для того чтобы любые изменения вступили в силу необходимо перезапустить демон proftpd:

Shell

sudo /etc/init.d/proftpd restart

1 sudoetcinit.dproftpd restart

Устранение проблем

Для решения проблем в работе FTP-сервера можно просмотреть файл журнала. Файлов может быть несколько и они находятся в каталоге /var/log/proftpd. Основной — proftpd.log.

Для просмотра вводим команду:

tail -f /var/log/proftpd/proftpd.log

По умолчанию, настройка лога в конфигурационном файле proftpd выглядит так:

TransferLog /var/log/proftpd/xferlog
SystemLog   /var/log/proftpd/proftpd.log

При необходимости, можно настроить дополнительный файл журнала:

ExtendedLog                     /var/log/proftpd/access.log WRITE,READ write
ExtendedLog                     /var/log/proftpd/auth.log AUTH auth

* в данном примере в файле /var/log/proftpd/access.log будут храниться логи обращения к файлам; /var/log/proftpd/auth.log — аутентификации.

Не забываем перезагрузить сервис:

systemctl restart proftpd

Создание пользователя

Кликните на таблицу ftpuser в левом столбце, а затем – на вкладку Insert.

Это позволяет вставить пользователя

Заполните поля userid (имя пользователя, которое будет использоваться для входа в FTP) и homedir (домашний каталог пользователя FTP; обратите внимание: нельзя указать несуществующий каталог, а затем создать его)

Пароль в поле passwd должен быть зашифрованным; чтобы создать такой пароль, можно использовать этот фрагмент (в оболочке сервера):

Примечание: Конечно, условный пароль password нужно заменить своим настоящим паролем.

В целом, остальные поля понятны без объяснений и, как правило, заполняются позже (например, login count, last logged in и т.п.).

Итак, необходимая база данных подготовлена, осталось только настроить ProFTPD для её использования.

Для «себя любимого»

Ну и напоследок о «себе любимом». Точнее, обо всех пользователях, зарегистрированных в системе. Все они имели возможность подключаться к ProFTP сразу же после его установки и запуска. При этом им необходимо использовать FTP-клиент, позволяющий ввести имя пользователя и пароль, (например, FileZilla), Имя и пароль необходимо указывать те, под которыми пользователь входит в систему. К чему получит доступ такой клиент, залогинившись по FTP? Это определяется одной единственной строкой файла конфигурации. Снова заглянем в файл /etc/proftpd.conf и найдем там следующую строку:

По умолчанию эта строка закоментирована. Если же ее раскоментировать, то в своих перемещениях по файловой системе сервера пользователи будут ограничены пределами своей домашней папки. Но, если эту строку не трогать и оставить закоментированой, то пользователи получат доступ ко всей файловой системе сервера, начиная от корневого каталога (естественно, в четком соответствии с установленными в системе правами доступа). Таким образом, «для себя любимого» с самого начала ничего настраивать не надо было…

Установка ProFTPD

Найдем нужный порт и установим его через portmaster.

# whereis proftpd
proftpd: /usr/ports/ftp/proftpd
# portmaster /usr/ports/ftp/proftpd

Либо через порты:

#cd /usr/ports/ftp/proftpd && make install clean

===> SECURITY REPORT: This port has installed the following files which may act as network servers and may therefore pose a remote security risk to the system. /usr/local/libexec/proftpd/mod_snmp.so /usr/local/sbin/proftpd /usr/local/libexec/proftpd/mod_radius.so /usr/local/bin/ftpdctl

This port has installed the following startup scripts which may cause these network services to be started at boot time. /usr/local/etc/rc.d/proftpd

If there are vulnerabilities in these programs there may be a security risk to the system. FreeBSD makes no guarantee about the security of ports included in the Ports Collection. Please type ‘make deinstall’ to deinstall the port if this is a concern.

For more information, and contact details about the security status of this software, see the following webpage: http://www.proftpd.org/

===>>> Installation of ftp/proftpd (proftpd-1.3.5b) complete

Установка завершена, перейдем к настройке.

Установка

Ах, Mandriva Linux — тысячи пакетов в репозиториях! Чтобы там не нашлось такого популярного сервера как ProFTP — да не может этого быть! Запускаем «Центр управления Mandriva», в нем «Установку и удаление программ» и в поле поиска вводим «proftpd». Ответ не был для меня неожиданностью — есть такой пакет proftpd. Ставим «птицу», жмем «Применить». Несколько минут терпения, и всё — сервер установлен и запущен.

Есть и другой вариант — установка в консоли, единственное условие — обязательно запущенной от имени «root-а». Достаточно всего лишь ввести команду:

Итог будет тот же самый — сервер ProFTP будет установлен и запущен.

Установка:

Shell

sudo apt-get install proftpd

1 sudo apt-getinstall proftpd

Во время установки выскочит синий экран предложением двух различных вариантов установки:

  • From inetd — демон ProFTPd будет работать из-под службы inetd.
  • Standalone — ProFTPd будет установлен как самостоятельный демон.

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

Shell

sftp 127.0.0.1

1 sftp127.0.0.1

Если демон работает, то произойдет подключение и у вас потребуют имя пользователя под которым инициализировать коннект. Можете ввести любого созданного пользователя у вас в системе. Потом попросят ввести пароль этого пользователя. Если были введены корректные данные, то вы получите доступ к командной строке FTP, где можете выполнять определенные команды. Но всё что нам нужно было это попасть в эту строку, чтобы убедиться в работоспособности демона. Потому набираем команду exit и выходим.

Далее лезем в /etc/shells , он должен содержать строчку : /bin/false если не содержит, дописываем.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: