vfstp折腾

Catalogue
  1. 1. 阿里云centos7安装vfstpd

阿里云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进行认证

修改的时候注意:

  1. 配置文件中有不能有多余的空格或拼写错误,特别是复制网上教程的,记得把后面的注释和空格删除干净
  2. 配置文件参数错误(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` 看看服务是否可以正常启动,然后就可以用客户端进行连接测试了