Я совершенно не знаком с сервером ProFTPd и действительно не могу понять, как настроить то, что мне нужно. Я хотел бы получить некоторые пояснения по поводу виртуальных серверов и правил для каталогов.
Я использую Debian Debian Linux 6.0.7 (Squeeze) и ProFTPd версии 1.33.
Мне нужно, чтобы 2 разных пользователя (скажем, ftpuser1
и ftpuser2
, который я уже создал как пользователи Unix на сервере) может иметь доступ через FTP к 2 разным папкам (/var/ftpfolder1
для ftpuser1 и /var/ftpfolder2
для ftpuser2
).
Я имею в виду, что если ftpuser1 подключается через FTP (например, с клиентом FileZilla) к моему серверу, он должен иметь доступ ТОЛЬКО к папке /var/ftpfolder1
(то же самое для пользователя «2»). Они НЕ МОГУТ видеть другие папки на сервере.
Я думаю, что лучший способ - дать двум пользователям два разных URL-адреса, указывающих на один и тот же IP-адрес (тот же сервер), т.е. ftpsite1.domain.com
для ftpuser1
и ftpsite2.domain.com
для ftpuser2
.
Поэтому я попытался создать виртуальный сервер для пользователя 1 и еще один для пользователя 2, ища в Интернете несколько руководств по этому вопросу, но я не могу достичь желаемого результата. Я также безуспешно пытался настроить директивы для каждого каталога. Проблема в том, что пользователи могут подключаться к серверу через FTP, но они могут видеть только свои HOME папки, а не те папки, которые мне нужны.
Здесь вы найдете мою попытку конфигурации.
Я также хотел бы понять от вас разницу между виртуальным сервером и директивой для каждого каталога. Я имею в виду: я полагаю, что это что-то похожее на то, что может делать Apache ... Но я действительно не могу полностью понять, как их правильно настроить.
Спасибо.
<Directory /var/ftpfolder1>
<Limit ALL>
DenyAll
</Limit>
<Limit ABOR APPE LIST MLSD NLST NOOP OPTS REST STOR PASS FEAT PWD USER CWD>
DenyAll
AllowUser ftpuser1
</Limit>
</Directory>
<Directory /var/ftpfolder2>
<Limit ALL>
DenyAll
</Limit>
<Limit ABOR APPE LIST MLSD NLST NOOP OPTS REST STOR PASS FEAT PWD USER CWD>
DenyAll
AllowUser ftpuser2
</Limit>
</Directory>
<VirtualHost ftpsite1.domain.com>
ServerName "FTP for user 1"
#Port 21
#Umask 027
<Limit LOGIN>
DenyAll
AllowUser ftpuser1
</Limit>
<snt_ftp /var/ftpfolder1>
User ftpuser1
Group proftpdusers
UserAlias ftpuser1
<Limit LOGIN>
AllowAll
</Limit>
<Limit WRITE>
DenyAll
AllowUser ftpuser1
</Limit>
</snt_ftp>
</VirtualHost>
Вы можете использовать chroot
# useradd -s /sbin/nologin -d /var/ftpfolder1 ftpuser1
# useradd -s /sbin/nologin -d /var/ftpfolder2 ftpuser2
Добавьте следующую опцию в proftpd.conf
DefaultRoot ~ !adm
<Global>
RequireValidShell no
...
</Global>
И перезапустите сервер. Если вам действительно нужен виртуальный хост, вы можете попробовать что-то вроде следующего
<VirtualHost ftpsite1.domain.com>
ServerName "FTP1."
DefaultRoot ~
Umask 002
Port 21
<LIMIT LOGIN>
AllowUser ftpuser1
</LIMIT>
</VirtualHost>
<VirtualHost ftpsite2.domain.com>
ServerName "FTP2."
DefaultRoot ~
Umask 002
Port 21
<LIMIT LOGIN>
AllowUser ftpuser2
</LIMIT>
</VirtualHost>
вам не нужно ничего такого фантастического. все, что вам нужно сделать, это установить их HomeDir на что-то другое, а затем использовать chroot, установив DefaultRoot ~
в вашем конфиге. когда каждый пользователь входит в систему (независимо от имени, используемого для доступа к нему), он застревает в своем каталоге. не требуются виртуальные хосты (поскольку им потребуются отдельные IPS или порты, поскольку FTP не имеет виртуального хостинга на основе имени, такого как HTTP)