Устанока:

apt-get install pure-ftpd

[ Пере ] Запуск / остановка / текущий статус:

systemctl [re]start pure-ftpd.service
systemctl stop pure-ftpd.service
systemctl status pure-ftpd.service

Автозапуск:

systemctl enable pure-ftpd.service

Далее мы должны создать группу пользователей FTP и пользователя, который будет находиться в этой группе, и под которым будут работать все пользователи FTP как виртуальные  (не нужно плодить реальных пользователей в системе — удобно)

groupadd ftpgroup
 useradd -g ftpgroup -d /dev/null -s /etc ftpuser

Теперь можно добавить виртуального пользователя:

pure-pw useradd remote -u ftpuser -g ftpgroup -d /home/pubftp/remote -N 10

Где remote  имя пользователя для доступа к FTP, а /home/pubftp/remote — персональная директория, с которой он будет работать. -N 10 задает квоту в 10МБ (ограничение на использование дискового пространства). Эту директорию не нужно создавать вручную, т.к. она появится автоматически (параметр задается при конфигурировании, об этом чуть позже) при первом подключении и обмене данными с сервером.

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

Список существующих пользователей:

pure-pw list

Подробная информация о пользователе:

pure-pw show remote
 

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

pure-pw userdel remote

pure-ftpd может использовать следующие методы авторизации:

  • Unix Authentication (любой пользователь, имеющий системную учетную запись сможет зайти на FTP сервер)
  • PureDB авторизация использует отдельную базу виртуальных пользователей pure-ftpd.

В данной статье предлагается использовать PureDB вариант, как более безопасный.

Удаляем методы авторизации имеющиеся по умолчанию:

rm /etc/pure-ftpd/conf/PAMAuthentication /etc/pure-ftpd/auth/70pam

Включаем puredb — преимущества в скорости работы, наверное

ln -s ../conf/PureDB /etc/pure-ftpd/auth/45puredb

При первом запуске команда создает БД, а после любых операций с пользователями — обновляет (не забывайте ее запускать каждый раз):
pure-pw mkdb

Теперь остается задать важные параметры в конфиге, например:
Создавать домашнюю директорию автоматически:

echo "yes" > /etc/pure-ftpd/conf/CreateHomeDir

Запрещать анонимный доступ:

echo "yes" > /etc/pure-ftpd/conf/NoAnonymous

Пользователь не уйдет дальше своего каталога (не подымется выше):

echo "yes" > /etc/pure-ftpd/conf/ChrootEveryone

Человеческий лог:

echo "yes" > /etc/pure-ftpd/conf/VerboseLog

Работаем только по IPv4:

echo "yes" > /etc/pure-ftpd/conf/IPV4Only

Максимальное количество клиентов:

echo "100" > /etc/pure-ftpd/conf/MaxClientsNumber

Максимальное количество клиентов с одного IP:

echo "8" > /etc/pure-ftpd/conf/MaxClientsPerIP

Не показывать системный файлы (вида .имя_файла):

echo "no" > /etc/pure-ftpd/conf/DisplayDotFiles

Время простоя до отключения — 15 минут:

echo "15" > /etc/pure-ftpd/conf/MaxIdleTime

Максимальная параллельная (?) загрузка:

echo "16" > /etc/pure-ftpd/conf/MaxLoad

FTP, порты пассивного режима:

echo "50000 50300" > /etc/pure-ftpd/conf/PassivePortRange

Не забываем после изменений сделать перезапуск/

P.S. Когда нужно организовать доступ к одной и той же папке для двух пользователей, можно указать одинаковый путь. Может оказаться полезным одному пользователю дать полные права на создание, изменение и удаление файлов, а другому — только чтение. Делается это следующим образом.

Помимо созданной ранее пользователя ftpuser, создаем еще одного пользователя:

useradd -g ftpgroup -d /dev/null -s /etc ftpuser-read

Оба пользователя будут в группе ftpgroup. Теперь можно создать виртуального пользователя, который в будущем не сможет создавать, изменять и удалять файлы и папки на сервере:

pure-pw useradd reader -u ftpuser-read -g ftpgroup -d /home/pubftp/remote

Далее нужно сменить владельца папки на ftpuser/ftpgroup. В нашем случае можно не этого не делать, если все данные в папках размещались созданным ранее пользователем remote, так как он сразу будет их владельцем. Теперь нужно установить разрешения для папки в 755.

chmod -R 755 /home/pubftp/remote
Не забываем:
pure-pw mkdb

Теперь пользователь remote будет иметь полный доступ, пользователь reader, только доступ на чтение.

Смена пароля (имя пользователя PureDB):

pure-pw passwd ftpuser