上一篇有讲到 ftp 设置用户登录的问题,然而由于权限的问题,折腾了各种配置依旧无法实现:某个用户登录后指定跳转至非根目录的目录这一需求,因此尝试换一种思路来实现。
我试了以下几种方案,均无效:
- setsebool ftpd_disable_trans 1 (Ubuntu server 没有安装 setsebool)SELinux 相关,猜测根目录设置在 /home 下有关
- chroot_list_file 相关的各种搭配
每次登录都会提示无法修改目录:
代码语言:javascript复制500 OOPS: cannot change directory:/test/docker/nginx/www.test.com
配置文件:
代码语言:javascript复制anonymous_enable=NO # 禁止匿名登录
local_enable=YES # 本地用户登录
write_enable=YES
local_umask=022
userlist_enable=YES
userlist_deny=NO
local_root=/home/ftp # ftp 根目录
use_localtime=YES
dirmessage_enable=YES
xferlog_enable=YES
port_enable=NO
xferlog_std_format=YES
pam_service_name=vsftpd
listen=YES
tcp_wrappers=YES
# 被动模式
pasv_enable=YES
pasv_min_port=50001
pasv_max_port=51001
allow_writeable_chroot=YES
配置的过程中有点绕的是 chroot_local_user
和 chroot_list_enable
这两个配置,因为涉及到权限问题。
| chroot_local_user=YES | chroot_local_user=NO |
---|---|---|
chroot_list_enable=YES |
|
|
chroot_list_enable=NO |
|
|
处理完权限问题后,使用 bind 的方式挂载任意位置的文件。
代码语言:javascript复制mount --bind /home/ftp/testUser/html /home/test/html
经过测试,原始文件文件夹需要有可执行权限,简单一点就是设置成 755, chmod -R 755
。
这样 FTP 登录后可以访问这个文件夹。