阿里云centos7安装vfstpd
本来以为很简单的折腾很久,记录一下备忘。
参考网址
http://desert3.iteye.com/blog/1685734 配置说明
https://www.centos.bz/2017/08/centos-7-virtual-user-vsftpd/ 安装教程
https://www.chengzi520.com/?p=697 问题排查
我的Selinux是关闭的这一步记录供参考:
1 2
| setsebool -P ftp_home_dir=1 //设置ftp可以使用home目录 sersebool -P allow_ftpd_full_access=1 //设置ftp用户可以有所有权限
|
设置firewall 端口
1 2 3 4 5
| firewall-cmd --zone=public --add-port=21/tcp --permanent firewall-cmd --zone=public --add-port=20/tcp --permanent firewall-cmd --zone=public --add-port=3200/tcp --permanent firewall-cmd --reload firewall-cmd --list-prot #查看是否打开成功
|
最后记得去阿里云控制台的安全组把对应的端口一一打开,在这里卡了好久,一直连不上,配置也没错…
安装vsftpd,设置开机启动
1 2
| yum -y install vsftpd chkconfig vsftpd on
|
基于虚拟用户配置
基于虚拟用户的目的主要是不想在系统上创建用户,网络上很多教程都需要在系统创建一个用户。下面是复制别人的虚拟用户的描述:
虚拟用户就是没有使用真实的帐户,只是通过映射到真实帐户和设置权限的目的。虚拟用户不能登录CentOS系统
修改vsftp的配置文件,假设登录的是root用户
1 2
| cd /etc/vsftpd/ cp vsftpd.conf vsftpd.conf.bak #备份一下,改乱了也好改回来
|
然后 vim vsftpd.conf 做如下修改:
1 2 3 4 5 6 7 8
| anonymous_enable=NO //设定不允许匿名访问 local_enable=YES //设定本地用户可以访问。注:如使用虚拟宿主用户,在该项目设定为NO的情况下所有虚拟用户将无法访问 listen=YES //这个默认是NO,改成YES listen_ipv6=NO //这个默认是YES,改成NO chroot_list_enable=YES //使用户不能离开主目录 ascii_upload_enable=YES ascii_download_enable=YES //设定支持ASCII模式的上传和下载功能 pam_service_name=vsftpd //PAM认证文件名。PAM将根据/etc/pam.d/vsftpd进行认证
|
修改的时候注意:
- 配置文件中有不能有多余的空格或拼写错误,特别是复制网上教程的,记得把后面的注释和空格删除干净
- 配置文件参数错误(NO/YES是否一一写对)
**然后先systemctl stop vsftpd.service , 再启动服务 systemctl start vsftpd.service 看看服务是否可以正常开启,如果不行,先检查一下刚刚修改过的地方。**
然后编辑 vsftpd.conf 文件,在刚刚编辑的后面添加关于vsftpd虚拟用户支持的重要配置项,默认vsftpd.conf中不包含这些设定项目,需要自己手动添加。
1 2 3
| guest_enable=YES //设定启用虚拟用户功能 guest_username=ftp //指定虚拟用户的宿主用户,CentOS中已经有内置的ftp用户了 user_config_dir=/etc/vsftpd/vuser_conf //设定虚拟用户个人vsftp的CentOS FTP服务文件存放路径。存放虚拟用户个性的CentOS FTP服务文件(配置文件名=虚拟用户名)进行认证
|
创建虚拟用户授权信息,安装Berkeley DB工具
1
| yum install db4 db4-utils
|
创建用户帐号密码文本,奇行是用户名,偶行是密码 vim /etc/vsftpd/vuser_passwd.txt
1 2 3 4
| 1 test 2 123456 3 test2 4 123456
|
生成虚拟用户认证db文件
1
| db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db
|
然后编辑认证文件/etc/pam.d/vsftpd ,把原来存在的全部注释掉,再添加自己的认证
1 2 3 4
| vim /etc/pam.d/vsftpd :%normal I# //在全部以前存在的条目面前添加#号,并添加如下两句 auth required /usr/lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd account required /usr/lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
|
创建虚拟用户配置文件,先创建配置存放目录
1
| mkdir /etc/vsftpd/vuser_conf/
|
然后创建配置文件,文件名就是刚刚创建的用户名,创建一个test文件,一个test2文件,一一对应
1
| vi /etc/vsftpd/vuser_conf/test //文件名等于vuser_passwd.txt里`面的账户名,否则下面设置无效
|
文件内容如下
1 2 3 4 5 6 7
| local_root=/home/xxx/ftp //虚拟用户根目录,根据实际情况修改 write_enable=YES //可写 anon_umask=022 //掩码 anon_world_readable_only=NO anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES
|
设置FTP根目录权限
最新的vsftpd要求对主目录不能有写的权限所以data为755,主目录下面的子目录再设置777权限
1 2 3 4
| mkdir /home/xxx/ftp //创建根目录 mkdir /home/xxx/ftp/data //创建子目录 chmod -R 755 /ftp //用户对根目录只有读权限 chmod -R 777 /ftp/data //用户对子目录有所有权限
|
现在还是先关掉然后启动一下服务看看服务是否可以启动起来,如果不行,仔细查看刚刚的配置
配置PASV模式
vsftpd默认没有开启PASV模式,现在FTP只能通过PORT模式连接,要开启PASV默认需要通过下面的配置
打开/etc/vsftpd/vsftpd.conf,在末尾添加
1 2 3 4
| pasv_enable=YES //开启PASV模式 pasv_min_port=40000 //最小端口号 pasv_max_port=40080 //最大端口号 pasv_promiscuous=YES
|
firewall添加段端口
1 2
| firewall-cmd --zone=public--add-port=40000-40080/tcp --permanent firewall-cmd --reload
|
最后还是systemctl stop vsftpd.service, 再启动服务systemctl start vsftpd.service` 看看服务是否可以正常启动,然后就可以用客户端进行连接测试了