Linux文件服务器vsftpd用法详解(自签名SSL证书配置)

1.Ftp 介绍

文件传输协议(File Transfer Protocol,FTP),基于该协议FTP客户端与服务端可以实现共享文件、上传文件、下载、删除文件。FTP服务器端可以同时提供给多人共享使用。
FTP服务是Client/Server(简称C/S)模式,基于FTP协议实现FTP文件对外共享及传输的软件称之为FTP服务器源端,客户端程序基于FTP协议,则称之为FTP客户端,FTP客户端可以向FTP服务器上传、下载文件。
FTP Server
作用:提供文件共享服务,实现上传下载
端口:
21号—建立tcp连接 默认端口
20号—传输数据
软件包:vsftpd
配置文件:/etc/vsftpd/vsftpd.conf

1.1.ftp主动模式

ftp主动模式:客户端开启一个端口N(>1023)向服务端的21端口,建立连接,同时开启一个N+1,告诉服务端,我监听的是N+1端口,服务端接到请求之后,用自己的20端口连接到客户端的N+1端口,进行传输

1.2.ftp被动模式

ftp被动模式:客户端同时开启两个端口(1024,1025),一个端口(1024)跟服务端的21端口建立连接,并请求,大哥,我连上了,你再开一个端口呗。服务端接到请求之后,随机会开启一个端口(1027)并告诉客户端我开启的是1027端口,客户端用另一个端口(1025)与服务端的(1027)端口进行连接,传输数据

2.Vsftp服务器简介

非常安全的FTP服务进程(Very Secure FTP daemon,Vsftpd),Vsftpd在Unix/Linux发行版中最主流的FTP服务器程序,优点小巧轻快,安全易用、稳定高效、满足企业跨部门、多用户的使用(1000用户)等。

2.1.vsftp匿名用户配置(主动模式)

2.1.1.环境准备

实验环境--准备两台机器
ftp-server---192.168.246.160
client---192.168.246.161

关闭防火墙和selinux
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld    
[root@localhost ~]# setenforce 0

安装FTP Server(服务端)
[root@ftp-server ~]# yum install -y vsftpd
[root@ftp-server ~]# systemctl start vsftpd
[root@ftp-server ~]# systemctl enable vsftpd

2.1.2.FTP默认共享目录:/var/ftp

[root@ftp-server ~]# mkdir /var/ftp/upload  //创建自己的共享目录
[root@ftp-server ~]# touch /var/ftp/upload/test.txt  //创建文件到共享目录
[root@ftp-server ~]# cd /var/ftp/
[root@ftp-server ftp]# ls
pub upload
[root@ftp-server ftp]# chown ftp.ftp * -R  //修改根目录的属主与属组
[root@ftp-server ftp]# ll 
total 0
drwxr-xr-x. 2 ftp ftp 22 Aug  3 03:15 pub
drwxr-xr-x. 2 ftp ftp 22 Aug 27 03:15 upload

重点:改变根目录的属主,如果不改变的话,只能访问,其他权限不能生效。因为我们是以ftp用户的身份访问的,而默认的属主属组是root。
注意
修改完配置之后需要重启完服务才能生效
还需要重新从客户端登陆,否则修改后的配置看不到效果。
2.1.3.编辑配置文件

[root@ftp-server ~]# vi /etc/vsftpd/vsftpd.conf
                anon_umask=022  #添加匿名用户上传下载目录权限掩码
                anon_upload_enable=YES        #取消注释
                anon_mkdir_write_enable=YES   #取消注释
                anon_other_write_enable=YES    #添加

2.1.4.重启服务

[root@ftp-server ~]# systemctl restart vsftpd

使用FileZilla等客户端连接
1

2.2.vsftp配置本地用户登录(主动模式)

2.2.1.创建测试用户 zhangsan、lisi,密码都设置为 “123456”

[root@ftp-server ~]# useradd zhangsan 
[root@ftp-server ~]# useradd lisi
[root@ftp-server ~]# echo '123456' | passwd --stdin  zhangsan  //设置密码
Changing password for user zhangsan.
passwd: all authentication tokens updated successfully.
[root@ftp-server ~]# echo '123456' | passwd --stdin  lisi 
Changing password for user lisi.
passwd: all authentication tokens updated successfully.

2.2.2.配置本地用户ftp配置文件

[root@ftp-server ~]# mkdir  -p /data/ftp/{zhangsan,lisi}
[root@ftp-server ~]# chmod 750 /data/ftp/zhangsan  /data/ftp/lisi
[root@ftp-server ~]# chown zhangsan  /data/ftp/zhangsan
[root@ftp-server ~]# chown lisi  /data/ftp/lisi
[root@ftp-server ~]# touch  /etc/vsftpd/chroot_list
[root@ftp-server ~]# vim /etc/vsftpd/vsftpd.conf  ---添加注释并修改 
anonymous_enable=NO        //将允许匿名登录关闭
#anon_umask=022            //注释掉匿名用户所上传文件的权限掩码 
#anon_upload_enable=YES    //注释掉允许匿名用户上传文件
#anon_mkdir_write_enable=YES    //注释掉允许匿名用户创建目录
#anon_other_write_enable=YES    //注释掉是否允许匿名用户有其他写入权(改名,删除,覆盖)
chroot_local_user=YES
chroot_list_enable=YES        //启用限制登陆用户在主目录里面
#(default follows)
chroot_list_file=/etc/vsftpd/chroot_list    //文件不存在,touch /etc/vsftpd/chroot_list
#是否禁锢在主目录,在文件列表中的用户表示不禁锢,可以访问主目录之外的目录。
allow_writeable_chroot=YES    //允许限制的用户对目录有写权限
local_root=/data/ftp          //设置本地用户的FTP根目录
local_max_rate=0              //限制最大传输速率(字节/秒)0为无限制

2.2.3.重启vsftpd

[root@ftp-server ~]# vim /etc/vsftpd/chroot_list
zhangsan    //是否禁锢在主目录,在文件列表中的用户表示不禁锢,可以访问主目录之外的目录。
[root@ftp-server ~]# systemctl restart vsftpd

客户端操作:使用FileZilla等客户端连接
zhangsan用户可以返回到上一级/data/目录,没有限制
2
3
2.2.4.服务器端查看

[root@ftp-server ~]# cd /data/ftp/zhangsan/
[root@ftp-server zhangsan]# ls

2.3.vsftp虚拟用户配置(被动模式)

2.3.1.环境准备

服务器IP:192.168.221.136
关闭防火墙,SeLinux
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0

安装vsftpd以及相关组件
[root@localhost ~]# yum -y install vsftpd
[root@localhost ~]# yum -y install libdb libdb-utils

2.3.2.建立虚拟用户口令库文件

格式:
	用户名
	密码
[root@localhost ~]# vim /etc/vsftpd/vusers.list
                    tom
                    tom123
                    jack
                    jack123
//虚拟用户的所有账号密码

2.3.3.生成vsftpd认证文件(并赋权)
生成vsftpd认证文件:/etc/vsftpd/vsftpd_login.db
方法一:(直接运行命令)

[root@localhost ~]# db_load -T -t hash -f /etc/vsftpd/vusers.list /etc/vsftpd/vsftpd_login.db

方法二:(生成脚本文件,授执行权)

[root@localhost ~]# vim /etc/vsftpd/adduser.sh
                    db_load -T -t hash -f /etc/vsftpd/vusers.list /etc/vsftpd/vsftpd_login.db
[root@localhost ~]# chmod +x /etc/vsftpd/adduser.sh
[root@localhost ~]# /etc/vsftpd/adduser.sh

为认证用户文件赋权(这个文件的权限必须是600)

[root@localhost ~]# chmod 600 /etc/vsftpd/vsftpd_login.db

注意:生成认证文件之后,新加或删除用户以后重新运行本命令
2.3.4.虚拟用户所需配置PAM配置文件

[root@localhost ~]# mv /etc/pam.d/vsftpd{,.bak}    //备份
[root@localhost ~]# cat >/etc/pam.d/vsftpd<<EOF
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required pam_userdb.so db=/etc/vsftpd/vsftpd_login
EOF

2.3.5.建立虚拟用户访问目录,设置权限

[root@localhost ~]# mkdir -p /data/ftp/
[root@localhost ~]# useradd -d /data/ftp -s /sbin/nologin vuser

//定义vsftpd虚拟用户vuser,宿主目录/data/ftp
[root@localhost ~]# chown -R vuser:vuser /data/ftp/
[root@localhost ~]# ls -l /data/
drwx------  2 vuser vuser 62 121 21:00 ftp

2.3.6.创建虚拟用户个人账号目录,设置权限

[root@localhost ~]# mkdir -p /data/ftp/{tom,jack}
[root@localhost ~]# chown -R vuser:vuser /data/ftp/tom  /data/ftp/jack

2.3.7.编辑vsftpd配置文件

[root@localhost ~]# cp /etc/vsftpd/vsftpd.conf{,.bak}
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
                anonymous_enable=NO
                local_enable=YES
                listen=YES            //standalone模式,独立服务
                listen_ipv6=NO
                xferlog_enable=YES    //启用日志
                xferlog_file=/var/log/xferlog
                xferlog_std_format=YES
                guest_enable=YES        //启用虚拟用户
                guest_username=vuser    //定义虚拟用户名
                allow_writeable_chroot=YES
                chroot_local_user=YES    //禁锢在宿主目录则使用
                user_config_dir=/etc/vsftpd/vsftpd_user_conf    //定义每个用户的配置文件夹
                pasv_enable=YES        //被动模式
                pasv_min_port=30000
                pasv_max_port=30999

2.3.8.不同虚拟用户,不同权限
创建虚拟用户配置文件夹:/etc/vsftpd/vsftpd_user_conf

[root@localhost ~]# mkdir /etc/vsftpd/vsftpd_user_conf

建立用户tom单独配置文件,文件名就是用户名,与vusers.list中的用户名相同

[root@localhost ~]# vim /etc/vsftpd/vsftpd_user_conf/tom
                local_root=/data/ftp/tom
                chroot_local_user=YES
                write_enable=YES
                virtual_use_local_privs=YES

建立用户jack单独配置文件

[root@localhost ~]# vim /etc/vsftpd/vsftpd_user_conf/jack
                local_root=/data/ftp/jack
                chroot_local_user=YES
                write_enable=YES
                virtual_use_local_privs=YES

参数说明

参数解释
local_root=/data/ftp/tom这里的虚拟用户目录可以根据实际情况修改,/data/ftp/tom目录提前建立,赋权vuser用户可以写入
chroot_local_user=YES禁锢在宿主目录则使用
write_enable=YES可以对虚拟用户用写入
virtual_use_local_privs=YES虚拟用户具有写权限(上传、下载、删除、重命名)

如果只具用下载权限,则只保留local_root=/data/ftp/tom
2.3.9.重启vsftpd服务

[root@localhost ~]# systemctl restart vsftpd

客户端操作:使用FileZilla等客户端连接
4

2.4.虚拟用户其他配置

可以为各用户分别配置,修改/etc/vsftpd/vsftpd_user_conf/jack,添加如下内容即可

max_clients=0
设置vsftpd允许的最大连接数,默认值为0,表示不受限制。若设置为100时,则同时允许有100个连接,超出的将被拒绝。只有在standalone模式运行才有效。

max_per_ip=0
设置每个IP允许与FTP服务器同时建立连接的数目。默认值为0,表示不受限制。只有在standalone模式运行才有效。

local_max_rate设置项 用于设置本地用户的最大传输速率,单位为B/s,值为0时表示不限制。
例如local_max_rate=500000表示FTP服务器的本地用户最大传输速率设置为500KB/s.

最终完整配置vsftpd.conf如下所示

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_username=vuser
allow_writeable_chroot=YES
chroot_local_user=YES
user_config_dir=/etc/vsftpd/vsftpd_user_conf
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30999

3.自签名SSL证书配置

wireshark抓包工具可以看到vsftpd的用户、密码等信息,为了保证安全性,使用SSL加密

生成自签名证书
[root@localhost ~]# DOMAIN=qf    //这里域名可以自定
[root@localhost ~]# openssl req -new -x509 -nodes -out /etc/vsftpd/vsftpd.pem -keyout /etc/vsftpd/vsftpd.pem -days 3650 -subj "/C=CN/ST=guangdong/L=shenzhen/O=${DOMAIN}/OU=${DOMAIN}.com/CN=${DOMAIN}.com/emailAddress=admin@${DOMAIN}.com" >& /dev/null
启用自签名证书加密
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
                ssl_enable=YES
                ssl_tlsv1=YES
                ssl_sslv3=YES
                force_local_logins_ssl=yes
                force_local_data_ssl=yes
                rsa_cert_file=/etc/vsftpd/vsftpd.pem
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TA548464

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值