vsftpd - local_root=/var/www/sites/$USER 没有得到解释?

Paw*_*wel 12 linux ftp settings vsftpd

当我尝试连接到 FTP 服务器时,我得到: “500 OOPS:无法更改目录:/home/$USER/public_html”

  • 当我 echo $USER - 我得到正确的用户名
  • 似乎在我的 /etc/vsftpd.conf 中没有解释 $USER
  • 当我删除“local_root=/var/www/sites/$USER”时,我一切正常。

我正在运行 vsftpd 2.2.2 和 Ubuntu 10.04.1 LTS 版本:10.04 代号:lucid

小智 21

您需要使用的是 user_config_dir 和 local_root 的组合。在主配置文件 /etc/vsftpd/vsftp.conf 中,您有如下条目:

chroot_local_user=YES
user_config_dir=/etc/vsftpd/users
Run Code Online (Sandbox Code Playgroud)

在该目录 (/etc/vsftpd/users) 中,您有一个与用户同名的配置文件(在您的情况下为 $USER),在该文件中,您有:

local_root=/var/www/sites/USER
dirlist_enable=YES
download_enable=YES
write_enable=YES
Run Code Online (Sandbox Code Playgroud)

...其中 USER 是实际名称(不是字面上的 USER 或 $USER)。

  • 这里重要的传递是使用:`user_sub_token=$USER`,这使得原始海报配置起作用,因为 $USER 变量获得了一个可用的值。请参阅我在另一个答案中的评论。 (3认同)

小智 7

您必须设置user_sub_token

user_sub_token=$USER
local_root=/var/www/sites/$USER
Run Code Online (Sandbox Code Playgroud)

  • 有趣的是,这是真正的真正解决方案,原始海报想要做的实际上是适用的。您也可以在其他建议的示例中使用它,但您不需要启用 `user_config_dir`。你可以做也可以不做,这取决于你的口味。这里重要的传递是`user_sub_token=$USER`,因为这是用conf中可用的东西填充`$USER`变量的那个。请参阅手册页中的 `user_sub_token` 描述:“如果 local_root 包含 user_sub_token,则此选项也会生效。” (2认同)