centos 安装 vsftpd 以及 php 调用遇到的坑
环境
1 | centsos 7.5 |
安装
这里我直接使用 yum 的安装方式
1 | yum install vsftpd |
如果需要连接其他 FTP 服务器,则可以安装 FTP 客户端。
1 | yum install ftp |
添加用户
1 | adduser userftp |
配置 VSFTP
路径: /etc/vsftpd/vsftpd.conf
1 | # 不允许匿名用户登录 |
指定用户访问指定目录c1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22用户相关操作
useradd -d /web-data/production-ftp -g ftp -s /sbin/nologin onelooks
设置密码
passwd onelooks
用户删除
userdel -r onelooks
与该功能相关的选项主要包括:
chroot_local_user
chroot_list_enable
chroot_list_file
可以通过如下两种方法来设置chroot,从而杜绝上述不安全的情况发生:
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
设置后,只有/etc/vsftpd.chroot_list文件中指定的用户不能返回上一层文件夹
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
设置后,只有/etc/vsftpd.chroot_list文件中指定的用户可以返回上一层
500 错误 可添加配置设置根目录写权限
allow_writeable_chroot=YES
启动服务
1 | service vsftpd start|stop|restart |
这里ftp服务器基本安装完成了, 下面怎么用php去连接它, 这也是我遇到的坑
php使用
php提供了ftp的扩展, 直接编译安装就行了, 编译安装php-FTP扩展
下面是最坑的时候…
php上传文件的时候一直报ftp_put(): Failed to establish connection.
问题原因分析:
- 防火墙, 阿里的安全组规则都开放21端口的访问, 如果 ftp 是主动模式就打开20端口, 被动模式则就打开
pasv_min_port
和pasv_max_port
之间的端口 - 目录权限问题
- ftp 配置
ascii_upload_enable
没有打开, 这个就是我导致错误的问题-_-!!!!