![ProFTPd为不同的用户创建不同的虚拟主机](https://linux22.com/image/803025/ProFTPd%E4%B8%BA%E4%B8%8D%E5%90%8C%E7%9A%84%E7%94%A8%E6%88%B7%E5%88%9B%E5%BB%BA%E4%B8%8D%E5%90%8C%E7%9A%84%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA.png)
我对 ProFTPd 服务器完全陌生,我真的不知道如何配置我需要的东西。我希望得到一些关于虚拟服务器和每个目录规则的解释。
我正在运行 Debian Debian Linux 6.0.7(Squeeze)和 ProFTPd 版本 1.33。
我需要的是两个不同的用户(假设ftpuser1
和ftpuser2
,我已经在服务器上将其创建为 Unix 用户)可以通过 FTP 访问两个不同的文件夹(/var/ftpfolder1
对于 ftpuser1 和/var/ftpfolder2
对于ftpuser2
)。
我的意思是,如果 ftpuser1 通过 FTP(例如使用 FileZilla 客户端)连接到我的服务器,他必须只能访问该文件夹/var/ftpfolder1
(用户“2”也一样)。他们无法查看服务器中的任何其他文件夹。
我认为最好的方法是给两个用户两个指向相同 IP(相同服务器)的不同 URL,即ftpsite1.domain.com
和ftpuser1
。因此,ftpsite2.domain.com
我尝试为用户 1 创建一个虚拟服务器,为用户 2 创建一个虚拟服务器,并在互联网上搜索有关该主题的一些教程,但我无法达到我想要的结果。我还尝试配置每个目录的指令,但没有成功。问题是用户能够通过 FTP 连接到服务器,但他们只能看到他们的 HOME 文件夹,而看不到我想要的文件夹。ftpuser2
您可以在这里找到我尝试的配置。
我还想从您那里了解虚拟服务器和每个目录指令之间的区别。我的意思是:我想象它与 Apache 可以做的事情类似...但我真的无法完全理解如何正确配置它们。
谢谢。
尝试目录配置
ftp用户1
<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>
ftp用户2
<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>
尝试虚拟服务器配置
ftp用户1
<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>
答案1
你不需要任何花哨的东西。你所需要做的就是将他们的 HomeDir 设置为不同的东西,然后通过 DefaultRoot ~
在你的配置中设置来使用 chroot。当每个用户登录时(无论使用什么名称访问它),他们都会被困在他们的目录中。不需要虚拟主机(因为他们需要单独的 IPS 或端口,因为 FTP 没有像 HTTP 那样的基于名称的虚拟主机)
答案2
您可以使用 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>