Допустим есть установленный ProFTPd сервер, например как я описывал в этой статье — Установка и настройка ProFTPd в Ubuntu
Далее опишу процесс настройки ProFTPd с виртуальными пользователями в файле.
Откроем конфигурацию ProFTPd в любом текстовом редакторе:
sudo nano /etc/proftpd/proftpd.conf
Укажем параметры:
DefaultRoot ~
RequireValidShell off
AuthUserFile /etc/proftpd/ftpd.passwd
AuthGroupFile /etc/proftpd/ftpd.group
AuthOrder mod_auth_file.c
Как видим для авторизации пользователей используется только модуль mod_auth_file.c, соответственно логины и пароли берутся только из файла /etc/proftpd/ftpd.passwd.
Теперь создадим например пользователя test:
sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=test --uid=60 --gid=60 --home=/srv/ftp/test/ --shell=/bin/false
После этой команды будет создан файл /etc/proftpd/ftpd.passwd схожей структуры с /etc/passwd.
UID и GID можно указывать любые, желательно кроме 0 (это root) и тех что указаны в /etc/passwd.
Можно также указать UID и GID аналогичные как у пользователя в /etc/passwd, например 33 как у пользователя www-data, чтобы предоставить похожие права к веб файлам и указать домашней директорией /var/www.
Можно создавать пользователей с одинаковыми UID и GID, разными домашними директориями и с учетом что им запрещено выходить выше уровня своей директории (параметр DefaultRoot ~ в конфигурации сервера).
Модуль mod_auth_file требует чтобы доступ к чтению и записи на файл /etc/proftpd/ftpd.passwd был запрещен для всех пользователей, по этому укажем права:
chmod 640 /etc/proftpd/ftpd.passwd
chown proftpd:root /etc/proftpd/ftpd.passwd
Иначе будет ошибка при запуске proftpd:
mod_auth_file/1.0: unable to use world-readable AuthUserFile ‘/etc/proftpd/ftpd.passwd’: Операция не позволена
Создадим файл ftpd.group:
sudo ftpasswd --group --name=nogroup --file=/etc/proftpd/ftpd.group --gid=60 --member test
Проверим правильность конфигурации:
sudo proftpd -t
Перезапустим ProFTPd чтобы применить изменения:
sudo /etc/init.d/proftpd restart
Так как пароли в файле хранятся в шифрованном виде, то менять пароль пользователю можно так:
sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=test --change-password
Можно заблокировать/разблокировать пользователя (добавляется/убирается символ ! в файле ftpd.passwd перед хешем пароля, тем самым делая невозможным подключение пользователя):
sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=test2 --lock
sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=test --unlock
Удалить пользователя можно так:
sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=test --delete-user
ftpasswd является скриптом написанным на Perl, обычно находится в /usr/sbin/ftpasswd.
Смотрите также мои статьи:
- Решение «mod_auth_file/1.0: unable to use world-readable AuthUserFile /etc/proftpd/ftpd.passwd»
- Решение ошибки ProFTPd «unable to open passwd file»
- Настройка ProFTPd с использованием MySQL базы данных пользователей