参考文章:
CentOS7下安装FTP服务
详解CentOS7安装配置vsftp搭建FTP
centos7之vsftp安装和使用
# 查看是否已安装 方法一
[root@localhost ~]# rpm -q vsftpd
vsftpd-3.0.2-21.el7.x86_64
# 查看是否已安装 方法二
[root@localhost ~]# vsftpd -v
vsftpd: version 3.0.2
# 安装 vsftpd
[root@localhost ~]# yum -y install vsftpd
查看位置
[root@localhost ~]# whereis vsftpd
vsftpd: /usr/sbin/vsftpd /etc/vsftpd /usr/share/man/man8/vsftpd.8.gz
vi /etc/vsftpd/vsftpd.conf
#----------------------------------------------------------#
#保证下面3项为YES
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
#其它设置说明
listen_port=12121 # 修改端口号
anon_root= /data/pub # 本地文件路径, 默认存放到/var/ftp/pub
anonymous_enable=YES # 允许匿名访问
chroot_local_user=YES # 启用限定用户在其主目录下NO
use_localtime=YES # 使用本地时(自行添加)
chroot_list_enable=YES
local_enable=YES # 允许使用本地帐户进行FTP用户登录验证
allow_writeable_chroot=YES # 如果启用了限定用户在其主目录下需要添加这个配置,
# 解决报错 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
xferlog_enable=YES # 启用上传和下载的日志功能,默认开启。
local_umask=022 # 设置本地用户默认文件掩码022
# FTP上本地的文件权限,默认是077,不过vsftpd安装后的配置文件里默认是022
#----------------------------------------------------------#
#多用户配置需要自己手工添加配置,下面内容到vsftpd.conf末尾
use_localtime=YES # 使用本地时(自行添加)
chroot_local_user=YES # 启用限定用户在其主目录下
idle_session_timeout=300
data_connection_timeout=120 # 数据连接超时时间
guest_enable=YES # 设定启用虚拟用户功能
guest_username=ftpuser # 指定虚拟用户的宿主用户 ftpuser(就是我们后面会新建这个用户)
# guest_username=www
# 如果ftp目录是指向网站根目录,用来上传网站程序,
# 可以指定虚拟用户的宿主用户为nginx运行账户www,可以避免很多权限设置问题
user_config_dir=/etc/vsftpd/vuser_conf # 虚拟用户配置文件目录
virtual_use_local_privs=YES # NO时,虚拟用户和匿名用户有相同的权限,默认是NO
pasv_min_port=10060 # 被动模式最小端口号10060
pasv_max_port=10090 # 被动模式最大端口号10090
accept_timeout=5
connect_timeout=1
当virtual_use_local_privs=YES 时,虚拟用户和本地用户有相同的权限;
当virtual_use_local_privs=NO 时,虚拟用户和匿名用户有相同的权限,默认是NO。
当virtual_use_local_privs=YES,
write_enable=YES时,虚拟用户具有写权限(上传、下载、删除、重命名)。
当virtual_use_local_privs=NO,
write_enable=YES,
anon_world_readable_only=YES,
anon_upload_enable=YES时,虚拟用户不能浏览目录,只能上传文件,无其他权限。
当virtual_use_local_privs=NO,
write_enable=YES,
anon_world_readable_only=NO,
anon_upload_enable=NO时,虚拟用户只能下载文件,无其他权限。
当virtual_use_local_privs=NO,
write_enable=YES,
anon_world_readable_only=NO,
anon_upload_enable=YES时,虚拟用户只能上传和下载文件,无其他权限。
当virtual_use_local_privs=NO,
write_enable=YES,
anon_world_readable_only=NO,
anon_mkdir_write_enable=YES时,虚拟用户只能下载文件和创建文件夹,无其他权限。
当virtual_use_local_privs=NO,
write_enable=YES,
anon_world_readable_only=NO,
anon_other_write_enable=YES时,虚拟用户只能下载、删除和重命名文件,无其他权限。
systemctl enable vsftpd.service
systemctl start vsftpd.service
systemctl status vsftpd.service
安装完默认情况下是开启匿名登录的,对应的是 /var/ftp 目录,这时只要服务启动了,就可以直接连上FTP了。
默认用户名是ftp,密码是空的。如果你在配置里面配置了anonymous_enable=NO,匿名就无法登录。
$ ftp 192.168.188.114
Connected to 192.168.188.114.
220 (vsFTPd 3.0.2)
Name (192.168.188.114:kennywang): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||47867|).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 12 Jan 18 06:31 README.md
drwxr-xr-x 2 0 0 6 Nov 05 19:43 pub
226 Directory send OK.
yum -y install ftp
ftp localhost
220表示服务正常,可以登陆;230表示登陆成功。
systemctl stop firewalld.service
为防止机器重启后防火墙服务重新开启,可将防火墙服务永久关闭。
systemctl disable firewalld.service
我们设置了匿名访问的目录是/data/pub里面,还是上传不了文件,有人说直接改成777就可以,但是改成777就无法访问了,这是由于vsftpd的安全性设置,我们需要在pub里面再创建一个upload的文件(文件夹名字随便起),给他一个777的权限就OK了。
到上面为止,我们发现ftp目录下并不能读写文件,这是由文件夹权限和selinux引起的。
systemctl stop firewalld.service
#停止firewall
systemctl disable firewalld.service
#禁止firewall开机启动
#或者放开防火墙添加FTP服务。
firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload
设置文件夹权限,将pub文件夹的权限设置为777
chmod 777 -R /var/ftp/pub
setenforce 0 # 设置SELinux 成为permissive模式 (关闭SELinux)
setenforce 1 # 设置SELinux 成为enforcing模式 (开启SELinux)
# 或者修改配置
vi /etc/selinux/config
# SELINUX=enforcing
# 注释掉
# SELINUXTYPE=targeted
# 注释掉
SELINUX=disabled
# 增加
:wq! #保存退出
setenforce 0
#==============================================#
#或者设置SELinux
getsebool -a | grep ftp
setsebool -P ftpd_full_access on
将SELINUX=enforcing改为:SELINUX=disabled
shutdown -r now