通过WP在线安装主题或更新插件时,WP会通过FTP协议获取访问网页服务器的权限。
安装vsftpd
vsftpd(very secure FTP daemon)是一款在Linux发行版中最受推崇的FTP服务器程序。
yum -y install vsftpd
systemctl start vsftpd.service #启动vsftpd
systemctl enable vsftpd.service #设置vsftpd开机自启动
配置vsftpd
vim /etc/vsftpd/vsftpd.conf
,修改如下参数,其他默认即可
#修改
anonymous_enable=NO #禁止匿名访问
data_connection_timeout=5 #数据连接超时时间。如果在使用vsftpd上传下载碎小文件的时候容易发生超时中断的问题,将120改成5或者更小为佳
#使ftp用户始终在项目部署的根目录范围内,禁止访问系统其它文件
chroot_local_user=YES #打开注释
chroot_list_enable=YES #打开注释
chroot_list_file=/etc/vsftpd/chroot_list #打开注释
allow_writeable_chroot=YES #添加
#默认保持不变
xferlog_enable=YES #启用上传和下载的日志功能。它可以对用户的操作进行日志记录,当出现问题的时候可以通过日志排查问题
如果/etc/vsftpd/chroot_list不存在,则需要创建该文件
vim /etc/vsftpd/chroot_list
:wq
配置完成重启vsftpd,systemctl restart vsftpd.service
创建FTP用户
添加名为ftpuser的用户,用户家目录为:/var/www/html,且禁止此用户登陆服务器:
useradd -d /var/www/html -s /sbin/nologin ftpuser
passwd ftpuser
调整防火墙
我用FileZilla登录,提示状态:服务器发回了不可路由的地址。使用服务器地址代替。错误:20 秒后无活动,连接超时。
如果使用实体机安装为request-firewall-server
,如果租赁的是VPS或ECS安装为requst-instance secure-firewall-server
。我使用的阿里云ECS,请求的端口会先经过实例安全组规则,再通过防火墙。从安全角度看,当然两者都开启拦截最好,不过如果你开启安全组规则或防火墙其中一个也可以,我的防火墙就是未激活状态。
FTP有两种模式,主动模式和被动模式。由于两种模式使用的端口不一样,所以调整的内容也不一样。
FTP主动模式
以FileZilla为例,进入编辑-设置-连接-FTP
,传输模式选择'主动';再进入被动模式
,选择'退回到主动模式'。
- 如果未启动防火墙,就可以直接访问了
- 如果使用的是iptables防火墙。配置iptables
vim /etc/sysconfig/iptables
,新加:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT #开放21端口
重启iptables,systemctl restart iptables.service
。
- 如果使用VPS或ECS,在安全组规则配置允许21端口访问。以阿里云为例,进入
实例-管理-安全组-配置规则
,在入方向添加21 port。
现在可以使用ftp cliet登陆ftp服务器了!
FTP被动模式(推荐使用)
以FileZilla为例,进入编辑-设置-连接-FTP
,传输模式选择'被动';再进入被动模式
,选择'使用服务器的外部IP地址来代替'。(默认选项)
- 编辑vsftpd的配置文件,
vim /etc/vsftpd/vsftpd.conf
#修改
connect_from_port_20=NO #关闭掉vsftpd的主动模式
#添加
pasv_enable=YES #使vsftpd运行在被动模式
pasv_min_port=30000 #被动模式最小端口号30000
pasv_max_port=31000 #被动模式最大端口号31000
我这里选择的是30000-31000端口,可自行选择。保存配置文件并退出。重启vsftpd服务,systemctl restart vsftpd.service
- 如果使用的是iptables防火墙,编辑iptables配置文件,
vim /etc/sysconfig/iptables
,添加
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT #开放ftp协议21端口
-A INPUT -p tcp --dport 30000:31000 -j ACCEPT #开放30000-31000号端口
保存配置文件并退出。重启iptables服务,systemctl restart iptables.service
- 如果使用VPS或ECS,在安全组规则配置允许21和30000-31000端口访问。以阿里云为例,进入
实例-管理-安全组-配置规则
,在入方向添加21/21和30000/31000。
现在可以使用ftp cliet登陆ftp服务器了!
调整文件夹权限
使用ftp工具登陆服务器之后,发现不管创建什么都会失败。
这个问题主要是在服务器的文件夹权限设置上。以笔者为例,笔者将ftp服务器登陆后的默认文件夹设置为/var/www/html,登陆ftp之后上传什么文件都显示553 Could not create file。
cd /var/www
ll
可以看到html文件夹的权限是drwxr-xr-x。非root用户没有写的权限。
chmod 777 html #开放最大权限
返回ftp工具,上传文件,一切正常!
参考链接