目录
- 前言
- 搭建步骤
- 踩坑
- 1、需要root权限执行 yum install -y vsftpd 命令
- 2、启动服务失败
- 3、连接失败:500, 权限不够
- 4、连接失败:530
- 5、root用户登录 530
- 6、FileZilla上传文件错误 553
前言
FTP:文件传输协议
环境:Centos7
搭建步骤
1、用命令安装
yum install -y vsftpd
2、设置用户和密码
useradd ftpuser
passwd ftpuser
3、修改配置文件
cd /etc/vsftpd/
vim vsftpd.conf
# 允许匿名访问
anonymous_enable=YES
# 允许本地用户
local_enable=YES
#设置本地用户登录所在的目录。
local_root=/usr/local/ftpdir
# 本地用户上传文件权限
local_umask=022
# 匿名用户上传文件权限
anon_umask=022
# 允许写入操作
write_enable=YES
# 允许匿名用户上传文件
anon_upload_enable=YES
# 控制匿名用户对文件和文件夹的删除和重命名
anon_other_write_enable=YES
# 允许匿名用户创建目录
anon_mkdir_write_enable=YES
# ftp工具连接成功提示
ftpd_banner=Welcome to blah FTP service.
# 所有用户均不能切换到上级目录
chroot_local_user=YES
# 是否启动限制用户的名单。YES为启用,NO禁用。默认禁用
chroot_list_enable=NO
# /etc/vsftpd/user_list文件不生效
userlist_enable=NO
#添加以下配置。不添加此项,文件无法上传
allow_writeable_chroot=YES
#匿名用户的根目录。
anon_root=/usr/local/ftpdir
#匿名用户不要密码就靠这个
no_anon_password=YES
# 匿名登录后的使用者
ftp_username=ftpuser
4、启动服务
systemctl start vsftpd
5、测试连接
6、设置开机自启
systemctl enable vsftpd.service
7、win 安装连接FTP服务的客户端 FileZilla 8、所有登录用户的目录 /usr/local/ftpdir
匿名用户上传文件的路径 /usr/local/ftpdir
踩坑
1、需要root权限执行 yum install -y vsftpd 命令
2、启动服务失败
[root@localhost local]# systemctl start vsftpd
Job for vsftpd.service failed because the control process exited with error code. See “systemctl status vsftpd.service” and “journalctl -xe” for details.
查看服务状态
[root@localhost vsftpd]# systemctl status vsftpd.service
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded
(/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset:
disabled)
Active: failed (Result: exit-code) since 三 2022-10-12
15:05:34 CST; 4min 28s ago
Process: 35719 ExecStart=/usr/sbin/vsftpd/etc/vsftpd/vsftpd.conf (code=exited, status=2)
10月 12 15:05:34 localhost.localdomain systemd[1]: Starting Vsftpd ftp
daemon…
10月 12 15:05:34 localhost.localdomain systemd[1]:
vsftpd.service: control process exited, code=exited status=2
10月 12 15:05:34 localhost.localdomain systemd[1]: Failed to start Vsftpd ftp daemon.
10月 12 15:05:34 localhost.localdomain vsftpd[35719]: 500 OOPS: unrecognised variable in config file: anonnon_upload_enable_umask
10月 12 15:05:34 localhost.localdomain systemd[1]: Unit vsftpd.service
entered failed state.
10月 12 15:05:34 localhost.localdomain systemd[1]: vsftpd.service failed. code=exited, status=2
解决方案:
1、查看端口:lsof -i:21 没有被占用
2、修改配置文件:禁用ipv6,打开iPv4
3、虚拟用户配置文件中,文件名与虚拟用户名不一致导致
用户名与文件名一致
最终解决方案
发现是配置文件中 # 匿名用户上传文件权限 anon_umask=022 语句被自动篡改。
3、连接失败:500, 权限不够
响应: 500 OOPS: cannot change directory:/home/ftpuser 错误: 无法连接到服务器
原因:ftpuser权限不够
解决方案
1、查看home目录下ftpuser的权限
修改权限
4、连接失败:530
需要输入用户名和密码 ftpuser ftpuser
5、root用户登录 530
ftpuers 文件中的用户不允许访问 root 默认不允许 访问ftp
修改ftpusers ,将root注释,重启服务systemctl restart vsftpd
userlist_enable=NO 设置为NO ,表示 user_list文件不生效(默认为yes,只允许user_list里面的用户登录)
6、FileZilla上传文件错误 553
ftpdir 权限 755 里面的文件 files 权限 777
selinux限制了,把selinux关掉就可以了。(setenforce 0)
先运行getsebool -a | grep ftp (查看selinux里有哪些关于ftp的)
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> off
ftpd_connect_db --> off
httpd_enable_ftp_server --> off
sftpd_anon_write --> off
sftpd_enable_homedirs --> off
sftpd_full_access --> off
sftpd_write_ssh_home --> off
tftp_anon_write --> off
接下来我们allow_ftpd_anon_write allow_ftpd_full_access 这两个ON掉
setsebool -P allow_ftpd_anon_write on
setsebool -P allow_ftpd_full_access on
这样子就OK了,如果出现