Ubuntu vsftp文件上传
导读:Ubuntu 下使用 vsftpd 实现文件上传 一 安装与基础配置 安装 vsftpd 执行:sudo apt update && sudo apt install vsftpd 备份并编辑配置文件 执行:sud...
Ubuntu 下使用 vsftpd 实现文件上传
一 安装与基础配置
- 安装 vsftpd
- 执行:
sudo apt update & & sudo apt install vsftpd
- 执行:
- 备份并编辑配置文件
- 执行:
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak - 编辑:
sudo nano /etc/vsftpd.conf
- 执行:
- 关键配置项(写入或确保取消注释)
- 启用本地用户与写入:
local_enable=YES、write_enable=YES - 禁匿名:
anonymous_enable=NO - 目录限制:
chroot_local_user=YES - 允许 chroot 可写:
allow_writeable_chroot=YES - 字符集:
utf8_filesystem=YES
- 启用本地用户与写入:
- 生效与开机自启
- 重启:
sudo systemctl restart vsftpd - 开机自启:
sudo systemctl enable vsftpd
- 重启:
- 防火墙放行(UFW)
- 主动模式:
sudo ufw allow 21/tcp - 被动模式端口段(示例):
sudo ufw allow 40000:50000/tcp - 如使用 FTPS:
sudo ufw allow 990/tcp
- 主动模式:
- 客户端连接
- 工具:FileZilla、WinSCP 或命令行
ftp < 服务器IP>。
- 工具:FileZilla、WinSCP 或命令行
二 权限与目录设置
- 目录归属与权限
- 建议将目标目录归属给登录用户(示例用户为 ftpuser):
sudo chown -R ftpuser:ftpuser /var/www/htmlsudo chmod 755 /var/www/html
- 避免使用 777 权限,按需设置组写并让 www-data(Apache/Nginx 运行用户)加入该组,实现 Web 可写:
sudo usermod -a -G ftpuser www-datasudo chmod 775 /var/www/html
- 建议将目标目录归属给登录用户(示例用户为 ftpuser):
- 上传后文件权限控制
- 通过
local_umask控制新建文件/目录的权限掩码(默认常见为 077):- 示例:
local_umask=022(目录常为 755,文件常为 644) - 若需更宽松:
local_umask=002(目录 775,文件 664)
- 示例:
- 通过
- 用户隔离与例外
- 使用
chroot_local_user=YES限制用户在主目录;如个别用户需例外,可结合chroot_list_enable=YES与/etc/vsftpd.chroot_list配置白名单。
- 使用
三 常见错误与快速排查
- 500 OOPS: could not read chroot() list file
- 原因:启用了
chroot_list_enable=YES但缺少名单文件。 - 解决:
sudo touch /etc/vsftpd.chroot_list
- 原因:启用了
- 500 OOPS: refusing to run with writable root inside chroot()
- 原因:chroot 根目录可写,出于安全被拒绝(vsftpd ≥ 3.0.2)。
- 解决:在
/etc/vsftpd.conf中加入allow_writeable_chroot=YES或将可写目录移出 chroot 根(如local_root=/home/ftpuser/ftp)。
- 登录成功但无法上传
- 检查:
write_enable=YES是否开启;目标目录对登录用户是否可写;是否误用了 777 导致权限错乱(建议改为 755/775 并合理设置属主/属组)。
- 检查:
- 被动模式连接超时
- 原因:未放行被动端口段或云服务器安全组未放通。
- 解决:在
vsftpd.conf设置pasv_enable=YES、pasv_min_port=40000、pasv_max_port=50000,并放行对应端口段与云安全组。
四 安全与替代方案
- 安全建议
- 生产环境优先使用 SFTP/FTPS 替代明文 FTP;FTP 传输不加密。
- 禁用匿名上传(保持
anonymous_enable=NO),必要时仅开放给受控用户。 - 结合日志审计:
xferlog_enable=YES、xferlog_file=/var/log/vsftpd.log。
- 虚拟用户方案(可选)
- 通过
guest_enable=YES、guest_username=ftpvirtual、user_config_dir=/etc/vsftpd/user_conf配置虚拟用户,隔离系统账号,便于权限细粒度控制。
- 通过
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu vsftp文件上传
本文地址: https://pptw.com/jishu/777105.html
