![ProFTPD 虚拟用户目录](https://linux22.com/image/515613/ProFTPD%20%E8%99%9A%E6%8B%9F%E7%94%A8%E6%88%B7%E7%9B%AE%E5%BD%95.png)
好吧,我试图复制一家网络托管公司的基本设置,通过 SQL 对虚拟用户进行身份验证,并将他们重定向/监禁到他们的目录中。我已经完成了这里的大部分目标,除了将他们重定向/监禁到他们的目录中之外。
目录存储在 中/home/ftp
,这就是DefaultRoot
设置的内容。我希望每个用户都有自己的目录并被限制在自己的目录中。SQLhomedir
中的设置似乎没有任何效果。任何用户登录 FTP 时,它都会登录到 ,而DefaultRoot
不会被限制目录或重定向。
我该如何完成这最后一项任务?
答案1
尝试注释掉 DefaultRoot 我认为它可能会覆盖从数据库后端读取的值。
编辑:
如果设置了 DefaultRoot 并且设置了除 ~ 之外的任何值,那么用户将被限制在以 DefaultRoot 为根的树中。
如果 DefaultRoot 是 ~ 那么用户将被囚禁在以其主目录为根的树中。
答案2
除了设置 DefaultRoot ~ 如上所述,您的 SQL 配置是什么样的 - 您实际上是从数据库中提取它的吗?
DefaultRoot ~
<IfModule mod_dso.c>
LoadModule mod_sql.c
LoadModule mod_sql_mysql.c
</IfModule>
SQLLogFile /var/log/proftpd/mod_sql.log
PersistentPasswd off
AuthPAM off
AuthUserFile /some/path/to/dummy/passwd.ftp
AuthGroupFile /some/path/to/dummy/group.ftp
AuthOrder mod_sql.c mod_auth_file.c
SQLConnectInfo proftpd@localhost:3306 userdatabase password
SQLAuthTypes Backend Crypt Plaintext OpenSSL
SQLUserInfo user user_id password NULL NULL ftp_homedir NULL
SQLAuthenticate users
SQLDefaultUID 14
SQLDefaultGID 50
SQLMinUserUID 13
SQLMinUserGID 49
这是一个或多或少简洁的例子,它从数据库执行 100% 身份验证,并将它们限制在数据库中列出的主目录中。如果您还想在他们登录时动态创建他们的主目录(如果您将它们添加到数据库中但不想登录服务器来执行此操作,则很有用),您可以添加:
CreateHome on dirmode 0755
...配置。上面列出的另外两个虚拟文件与您的 ProFTPd 安装相匹配,后者位于 Red Hat/Centos 服务器上:
密码文件
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
群组档案
ftp:x:50:
nobody:x:99:
这一切都使您的虚拟用户在硬盘上拥有 14:50 的 UID/GID,无论他们的登录用户名是什么。