目录

  • 前言
  • 搭建步骤
  • 踩坑
  • 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

centos ftp配置 centos ftp用户权限设置_服务器


5、测试连接

centos ftp配置 centos ftp用户权限设置_配置文件_02


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

centos ftp配置 centos ftp用户权限设置_服务器_03

3、虚拟用户配置文件中,文件名与虚拟用户名不一致导致
用户名与文件名一致

最终解决方案
发现是配置文件中 # 匿名用户上传文件权限 anon_umask=022 语句被自动篡改。

3、连接失败:500, 权限不够

响应: 500 OOPS: cannot change directory:/home/ftpuser 错误: 无法连接到服务器
原因:ftpuser权限不够

解决方案

1、查看home目录下ftpuser的权限

centos ftp配置 centos ftp用户权限设置_服务器_04

修改权限

centos ftp配置 centos ftp用户权限设置_配置文件_05

4、连接失败:530

需要输入用户名和密码 ftpuser ftpuser

5、root用户登录 530

centos ftp配置 centos ftp用户权限设置_配置文件_06

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了,如果出现