Виртуальные пользователи в Pure-Ftp

Хочу рассмотреть вариант использования виртуальных пользователей в pure-ftpd.

Предполагаю, что Pure-Ftp у Вас установлен.

Если же нет выполните следующую команду:

apt-get install pure-ftpd-common pure-ftpd

или

yum install pure-ftpd

Нужно подредактировать конфигурационный файл (/etc/pure-ftpd/pure-ftpd.conf) и удостовериться, что следующие параметры не закоментированы и выставлены должным образом:

ChrootEveryone yes  
PureDB /etc/pure-ftpd/pureftpd.pdb  
PAMAuthentication yes  
PassivePortRange 30000 50000

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

pure-pw useradd **username** -u **ftpuser** -d /home/ftpusers/username

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

На пример, в системе есть пользователь techuser, его домашний каталог - /home/techuser. В этом каталоге есть какая-то папка, который мы хотим поделиться. Пускай это будет /home/techuser/documents/shared_docs.

pure-pw useradd ftptechuser -u techuser -d /home/techuser/documents/shared_docs

Другой пример, который является более практичным: нужно организовать доступ к файлом сайта, которые принадлежат пользователю www-data (apache) и хранятся в папке /var/www/html. Нужно что бы после заливки через фтп новые файлы принадлежали пользователю www-data (apache).
Создайте вот такого виртуального пользователя:

pure-pw useradd ftpapache -u www-data -d /var/www/html

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

pure-pw passwd **username**

Пароли виртуальных юзерОв хранятся в файле /etc/pure-ftpd/pureftpd.passwd

Обновляется файл следующей командой:

pure-pw mkdb

Посмотреть информацию о виртуальном пользователе можно вот так:

pure-pw show **username**

Посмотреть, какие пользователи существуют в конфиге можно с помощью:

pure-pw list

В CenoS обязательно обратите внимание на id пользователя на которого линкуется виртуальный юзер pure-ftpd. Значение должно быть больше 1000. Раньше можно было подредактировать /etc/pure-ftpd/pure-ftpd.conf и сменить в нем значения MinUID и TrustedGID с 100 на 48, в случае с пользователем apache.

В последних версиях pure-ftpd отказывается кушать эту таблетку и настойчиво продолжает выдавать следующую ошибку в /var/log/messages:

[INFO] New connection from 109.123.120.187  
[WARNING] Can't login as [user]: account disabled  
[INFO] Logout.

Выполните следующую команду для получения id системного пользователя:

id www-data

В стандартном варианте получите 48. Следующая комбинация моканд Вам поможет:

usermod -u 1021 -p -U www-data  
groupmod -g 1021 www-data  
sed -i 's/48/1021/g' /etc/pure-ftpd/pureftpd.passwd  
pure-pw mkdb

В Ununtu/Debian все ровно. Просто подредактируйте следующий файл idшником системного пользователя www-data (обычно это 33):

/etc/pure-ftpd/conf/MinUID

Учтите, что после таких действий системный пользователь www-data перестанет быть владельцем тех файлов, которые ему принадлежали раньше.

Не забудьте обновить права доступа с помощью команды chown

В Ubuntu столкнулся с такими ошибками в /var/log/auth.log

pure-ftpd: pam_unix(pure-ftpd:auth): authentication failure; logname= uid=0 euid=0 tty=pure-ftpd ruser=username rhost= user=username

и такими в /var/log/syslog

Jun 19 14:48:43 pure-ftpd: ([email protected]) [INFO] PAM_RHOST enabled. Getting the peer address  
Jun 19 14:48:48 pure-ftpd: ([email protected]) [WARNING] Authentication failed for user

Конфигурация pure-ftpd отличается в Ubuntu от CentOS. Что бы заработали виртуальные пользователи выполните следующие команды:

sudo echo 'no' > /etc/pure-ftpd/conf/PAMAuthentication  
sudo echo 'no' > /etc/pure-ftpd/conf/UnixAuthentication  
sudo echo '/etc/pure-ftpd/pureftpd.pdb' > /etc/pure-ftpd/conf/PureDB  
sudo ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/50pure

Не забываем про порты для пасивного режима:

iptables -A INPUT -p tcp -m tcp -sport 1024: -dport 1024: -m conntrack -ctstate ESTABLISHED -j ACCEPT -m comment -comment 'Allow passive inbound connections'  
iptables -A OUTPUT -p tcp -m tcp -sport 1024: -dport 1024: -m conntrack -ctstate ESTABLISHED,RELATED -j ACCEPT -m comment -comment 'Allow passive inbound connections'

В случае с CentOS 7:

firewall-cmd -permanent -zone=public -add-service=ftp  
firewall-cmd -permanent -add-port=30000-50000/tcp  
firewall-cmd -reload

Tags:

Categories:

Updated: