VSFTP服务简介
Linux服务之vsftpd服务
·
网络服务之vsftp
1、vsftp概述
FTP是File Transfer Protocol(文件传输协议)的英文简称,用于Internet上的文件的双向传输。使用 FTP 来传输时,是具有一定程度的危险性, 因为数据在因特网上面是完全没有受到保护的明文传输方式!
VSFTP是一个基于GPL发布的类Unix 系统上使用的FTP服务器软件,它的全称是Very Secure FTP,从名称定义上基本可以看出,这是为了解决ftp传输安全性问题的。
安全特性
- vsftp 程序的运行者一般是普通用户,降低了相对应进程的权限,提高了安全性
- 任何需要执行较高权限的指令都需要上层程序许可
- ftp 所需要使用的绝大多数命令都被整合到了 vsftp 中,基本不需要系统额外提供命令
- 拥有 chroot 功能,可以改变用户的根目录,限制用户只能在自己的家目录
vsftp连接类型
- 控制连接(持续连接) → TCP 21(命令信道) → 用户收发FTP命令
- 数据连接(按需连接) → TCP 20(数据信道) → 用于上传下载数据
vsftp工作模式
- 主动模式(port):
- FTP 客户端首先和服务器的 TCP 21 端口建立连接;用来发送命令,
- 客户端需要接收数据的时候在这个通道上发送 PORT 命令。PORT 命令包含了客户端用什么端口接收数据。
- 在传送数据的时候,服务器端通过自己的 TCP 20 端口连接至客户端的指定端口发送数据。
- FTP server 必须和客户端建立一个新的连接用来传送数据。
- 被动模式(passive):
- FTP 客户端首先和服务器的 TCP 21 端口建立连接,用来建立控制通道发送命令,
- 但建立连接后客户端发送 Pasv 命令。
- 服务器收到 Pasv 命令后,打开一个临时端口(端口大于 1023小于 65535)并且通知客户端在这个端口上传送数据的请求;
- 客户端连接 FTP 服务器的临时端口,然后 FTP 服务器将通过这个端口传输数据。.
- 注意:由于VSFTP的被动模式是随机端口进行数据传输,所以在设置防火墙时需要刻意放行–>这里一定要放心vsftp的服务。
VSFTP 传输模式
- Binary模式:不对数据进行任何处理,适合进行可执行文件、压缩文件、图片等
- ASCII模式:进行文本传输时,自动适应目标操作系统的结束符,如回车符等
- Linux的红帽发行版中VSFTP默认采用的是Binary模式,这样能保证绝大多数文件传输后能正常使用
- 切换方式:在ftp>提示符下输入ascii即转换到ACSII方式,输入bin,即转换到Binary方式。
VSFTP 软件信息
- 服务端软件名:vsftpd
- 客户端软件名:ftp
- 服务名:vsftpd
- 端口号:20、21、指定范围内随机端口
- 配置文件:/etc/vsftpd/vsftpd.conf
登录验证方式
- 匿名用户验证:
- 用户账号名称:ftp或anonymous
- 用户账号密码:无密码
- 工作目录:/var/ftp
- 默认权限:默认可下载不可上传,上传权限由两部分组成(主配置文件和文件系统)
- 本地用户验证:
- 用户账号名称:本地用户(/etc/passwd)
- 用户账号密码:用户密码(/etc/shadow)
- 工作目录:登录用户的宿主目录
- 权限:最大权限(drwx------)
虚拟(virtual)用户验证:
- 创建虚拟用户用来代替本地用户,减少本地用户曝光率
- 使用本地用户作为虚拟用户的映射用户,为虚拟用户提供工作目录和权限控制
- 能够设置严格的权限(为每一个用户生成单独的配置文件)
三种登陆模式
客户端----->匿名用户登录---->匿名账号:ftp或者是anonymous 密码是空密码
默认的家目录:/var/ftp/目录下
客户端----->本地用户登录---->本地登录涉及到:普通用户和普通用户的家目录
/etc/passwd
/etc/shadow文件
客户端----->虚拟用户登录---->这个是最复杂的;
需要人为创建,生成数据库文件;
找一个系统用户作为虚拟用户的映射用户,借助系统用户的家目录作为默认的登陆点,/home下的其中一个用户名
每一个虚拟用户的权限都可以单独指定的
2、匿名用户验证实验
匿名用户的权限控制
anonymous_enable=YES #启用匿名访问
anon_umask=022 #匿名用户所上传文件的权限掩码
anon_root=/var/ftp #匿名用户的 FTP 根目录
anon_upload_enable=YES #允许上传文件
anon_mkdir_write_enable=YES #允许创建目录
anon_other_write_enable=YES #开放其他写入权(删除、覆盖、重命名)
anon_max_rate=0 #限制最大传输速率(0 为不限速,单位:bytes/秒)
实验要求
注意:在客户端登录后,默认情况下是可以下载的,但不能上传
实现可以上传:
- anon_upload_enable=YES
- 在/var/ftp/下创建上传目录
- 修改上传目录的权限或所有者,让匿名用户有写入权限
实现创建目录和文件其他操作
- anon_mkdir_write_enable=YES #允许创建目录
- anon_other_write_enable=YES #删除文件、文件改名、文件覆盖
用户进入某个文件夹时,弹出相应的说明
- 在对应目录下创建 .message 文件,并写入相应内容
- 确认dirmessage_enable=YES是否启用
- 尝试却换目录查看效果(同一次登录仅提示一次)
实现上传的文件可下载
- 默认情况下开放上传权限后,上传的文件是无法被下载的,因为文件的其他人位置没有r权限;
- 设置anon_umask=022,可以让上传的文件其他人位置拥有r权限,然后才能被其他人下载
整个实验的过程:
#首先,所有的实验都必须要关闭selinux和firewalld
[root@node0 ~]# systemctl stop firewalld
[root@node0 ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@node0 ~]# setenforce 0
#首先安装以下vsftpd服务-->lftp和ftp都是用于连接vsftpd的
[root@node0 ~]# yum -y install vsftpd ftp lftp
#设置开机自启动
[root@node0 ~]# systemctl start vsftpd
[root@node0 ~]# systemctl enable vsftpd
#尝试匿名用户登录--->用到另外一台服务器来登陆验证
[root@Node1 ~]# ftp 192.168.75.130
Connected to 192.168.75.130 (192.168.75.130).
220 (vsFTPd 3.0.2)
Name (192.168.75.130:root): ftp #用户名:ftp
331 Please specify the password.
Password: #这里直接回车-->空密码
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
#登陆好了,可以直接查看有什么命令可以使用
ftp> ?-------------->#这里直接输入文豪回车,就能够看到所有的命令
#查看一下是否能够-->目录
ftp> ls
227 Entering Passive Mode (192,168,75,130,224,69).
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 6 Oct 30 2018 pub
226 Directory send OK.
#这里匿名用户默认的家目录就是/var/ftp/目录下
ftp> pwd
257 "/"
#回到服务器创建一下文件验证家目录的位置
[root@node0 ftp]# mkdir upload
[root@node0 ftp]# ls
pub upload
#客户端查看也能看到upload目录
ftp> ls
227 Entering Passive Mode (192,168,75,130,195,24).
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 6 Oct 30 2018 pub
drwxr-xr-x 2 0 0 6 Nov 08 10:34 upload
226 Directory send OK.
#用客户端直接尝试下载看看是否成功--->这里明显发现出现了550的报错信息
ftp> get upload
local: upload remote: upload
227 Entering Passive Mode (192,168,75,130,59,121).
550 Failed to open file.
#再次使用客户端上传文件看看--->发现也是失败的;
local: /root/client.txt remote: /root/client.txt
/root/client.txt: not a plain file.
ftp>
#如果需要实现-->服务器端则要配置相对应的配置文件
[root@node0 ftp]# vim /etc/vsftpd/vsftpd.conf
#这几行都是新增添加的
anon_upload_enable=YES #允许匿名用户上传
anon_mkdir_write_enable=YES #允许匿名用户创建
anon_other_write_enable=YES #允许匿名用户删除、修改、覆盖文件
#这里重启一下服务
[root@node0 ftp]# systemctl restart vsftpd
#匿名用户的上传、修改、删除除了受到vsftpd的制约,还得收到文件本身的权限制约
#因此匿名用户如果想要上传下载的时候,建议是单独给到一个目录;不要把默认的/var/ftp目录权限放的很大
[root@node0 ftp]# ls -ld . upload/
drwxr-xr-x 4 root root 31 11月 8 18:34 .
drwxr-xr-x 2 root root 6 11月 8 18:34 upload/
[root@node0 ftp]# ls -ld . upload/
drwxr-xr-x 4 root root 31 11月 8 18:34 .
drwxrwxrwx 2 root root 6 11月 8 18:34 upload/
#用客户端再次验证;
[root@Node1 ~]# ftp 192.168.75.130
#进入到目录
ftp> cd upload
250 Directory successfully changed.
ftp> get haha.txt ---->#这里可以成功下载
local: haha.txt remote: haha.txt
227 Entering Passive Mode (192,168,75,130,139,67).
150 Opening BINARY mode data connection for haha.txt (0 bytes).
226 Transfer complete.
#尝试一下改名
ftp> rename haha.txt hh.txt
350 Ready for RNTO.
250 Rename successful.
ftp> ls
227 Entering Passive Mode (192,168,75,130,141,1).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Nov 08 10:51 hh.txt
226 Directory send OK.
#如果想要进入到一个文件夹的时候,有提示信息
1)在默认的目录下创建.message文件,编写内容
2)vsftpd配置文件需要打开此功能dirmessage_enable=YES
3)同一次的登陆只会显示一次的效果
#服务器配置
#首先编写一下欢迎信息
[root@node0 upload]# vim /var/ftp/upload/.message
LiangJiaWei is a goodboy
#修改一下配置文件
[root@node0 upload]# vim /etc/vsftpd/vsftpd.conf
............
dirmessage_enable=YES
#最后客户验证
[root@Node1 ~]# ftp 192.168.75.130
Connected to 192.168.75.130 (192.168.75.130).
220 (vsFTPd 3.0.2)
Name (192.168.75.130:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd upload
250-LiangJiaWei is a goodboy
250 Directory successfully changed.
3、本地用户验证实验
本地用户权限控制:
local_enable=YES #是否启用本地系统用户
local_umask=022 #本地用户所上传文件的权限掩码
local_root=/var/ftp #设置本地用户的 FTP 根目录
chroot_local_user=YES #是否将用户禁锢在主目录
local_max_rate=0 #限制最大传输速率
ftpd_banner=Welcome to blah FTP service #用户登录时显示的欢迎信息
userlist_enable=YES & userlist_deny=YES
#禁止/etc/vsftpd/user_list 文件中出现的用户名登录 FTP
userlist_enable=YES & userlist_deny=NO
#仅允许/etc/vsftpd/user_list 文件中出现的用户名登录 FTP
配置文件:ftpusers
#禁止/etc/vsftpd/ftpusers 文件中出现的用户名登录 FTP,权限比 user_list 更高,即时生效
实验需求与流程:
- 服务端需要创建用户并设置密码(所创建的用户,不需要登录操作系统,仅用来登录VSFTP)
- useradd -s /sbin/nologin username
- 将所有用户禁锢在自己的家目录下
- 注:默认没有禁锢用户时,客户端登录后可以随意切换目录,查看文件所在位置和文件名
- chroot_local_user=YES #开启用户家目录限制,限制所有用户不能随便切换目录
- 将部分用户禁锢在自己的家目录下
- chroot_list_enable=YES #开启白名单功能,允许白名单中的用户随意切换目录
- chroot_list_file=/etc/vsftpd/chroot_list #白名单文件所在位置(需自己创建)
- 配置文件:/etc/vsftpd/ftpusers
- 所有写入此文件内的用户名都不允许登录ftp,立刻生效。
- 修改被动模式数据传输使用端口
- pasv_enable=YES
- pasv_min_port=30000
- pasv_max_port=35000
实验过程:
#创建一个用于vsftpd的本地账户
[root@node0 ~]# useradd -s /sbin/nologin zhangsan
[root@node0 ~]# echo 1 | passwd --stdin zhangsan
更改用户 zhangsan 的密码 。
passwd:所有的身份验证令牌已经成功更新。
#这样子尝试登陆-->本地用户登录--->这里发现直接被拒绝登陆
[root@Node1 ~]# ftp 192.168.75.130
Connected to 192.168.75.130 (192.168.75.130).
220 (vsFTPd 3.0.2)
Name (192.168.75.130:root): zhangsan
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
#排错:--->具体的原因不明白;但是这么做能够实现本地用户登录
#然后修改一下/etc/pam.d/vsftpd这个文件的选项
[root@node0 ~]# vim /etc/pam.d/vsftpd
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth required pam_shells.so #注释掉这一行
auth include password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth
#普通用户登录后-->发现权限过大,可以随意切换目录
ftp> cd /etc/
250 Directory successfully changed.
ftp> ls
#这里就有一些限制的措施
1)把用户紧固在自己的家目录下;chroot_local_user=YES
2)可以分权,限制部分用户限制在自己的家目录;chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list #这个文件需要自己创建;
3)/etc/vsftpd/ftpusers这个文件下的用户都不能登录的
4)修改一下被动模式传输使用的端口
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=35000
#修改一下配置文件
[root@node0 ~]# vim /etc/vsftpd/vsftpd.conf
.............
local_enable=YES
chroot_loacal_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
allow_writeable_chroot=YES
.................
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=35000
#这里要创建一个chroot_list的文件并且写入内容-->不然会报错,导致无法启动
[root@node0 ~]# touch /etc/vsftpd/chroot_list
[root@node0 ~]# chown ftp. /etc/vsftpd/chroot_list
[root@node0 ~]# vim /etc/vsftpd/chroot_list
zhangsan
#重启服务查看
[root@node0 ~]# systemctl restart vsftpd
#为了区别功能,我们再次创建一个lisi的账户
[root@node0 ~]# useradd lisi
[root@node0 ~]# echo 1 | passwd --stdin lisi
更改用户 lisi 的密码 。
passwd:所有的身份验证令牌已经成功更新。
#使用客户端--->查看
#登陆李四用户-->发现无法查看除了自己家目录的信息
[root@Node1 ~]# ftp 192.168.75.130
Connected to 192.168.75.130 (192.168.75.130).
220 (vsFTPd 3.0.2)
Name (192.168.75.130:root): lisi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,75,130,118,181).
150 Here comes the directory listing.
226 Directory send OK.
ftp> cd /etc/
550 Failed to change directory.
#登陆张三查看--------->这里已经证明了张三是随意切换的
[root@Node1 ~]# ftp 192.168.75.130
Connected to 192.168.75.130 (192.168.75.130).
220 (vsFTPd 3.0.2)
Name (192.168.75.130:root): zhangsan
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /etc/
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (192,168,75,130,128,85).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 5090 Oct 30 2018 DIR_COLORS
-rw-r--r-- 1 0 0 5725 Oct 30 2018 DIR_COLORS.256co
#查看一下端口-->
[root@node0 ~]# netstat -antlup
........
tcp6 0 0 192.168.75.130:21 192.168.75.131:35990 ESTABLISHED 7519/vsftpd
4、虚拟用户实验
虚拟用户的对比图:
FTP_client--->FTP_server
/etc/pam.d/vsftpd
匿名用户:/etc/passwd
本地用户:/etc/passwd和/etc/shadow
/etc/pam.d/vsftpd.pam
虚拟的用户
执行创建
用户、密码文件
- 建立 FTP 的虚拟用户的用户数据库文件(在/etc/vsftpd)
- vim vsftpd.user(注:该文件名可以随便定义,文件内容格式:奇数行用户,偶数行密码)
- db_load -T -t hash -f vsftpd.user vsftpd.db #将用户密码的存放文本转化为数据库类型,并使用 hash 加密
- chmod 600 vsftpd.db #修改文件权限为 600,保证其安全性
- 创建 FTP 虚拟用户的映射用户,并制定其用户家目录
- useradd -d /var/ftproot -s /sbin/nologin virtual #创建 virtual 用户作为 ftp 的虚拟用户的映射用户
- 建立支持虚拟用户的 PAM 认证文件,添加虚拟用户支持
#使用模板生成自己的认证配置文件,方便一会调用
cp –a /etc/pam.d/vsftpd /etc/pam.d/vsftpd.pam
#编辑新生成的文件 vsftpd.pam (清空原来内容,添加下列两行)
auth required pam_userdb.so db=/etc/vsftpd/vsftpd
account required pam_userdb.so db=/etc/vsftpd/vsftpd
#在 vsftpd.conf 文件中添加支持配置 修改:
pam_service_name=vsftpd.pam
#添加:
guest_enable=YES
guest_username=virtual
user_config_dir=/etc/vsftpd/dir
- 为虚拟用户建立独立的配置文件,启动服务并测试
- 注:做虚拟用户配置文件设置时,将主配置文件中自定义的匿名用户相关设置注释掉。
#用户可以上传:
anon_upload_enable=YES #允许上传文件
#用户可以创建目录或文件:
anon_mkdir_write_enable=YES #允许创建目录
#用户可以修改文件名:
anon_upload_enable=YES #允许上传文件(为了覆盖开启的)
anon_other_write_enable=YES #允许重名和删除文件、覆盖
#注:给映射用户的家目录 设置 o+r 让虚拟用户有读权限。
实验过程
#首先,建立虚拟用户的数据库文件
#这里需要注意:奇数行是名字,偶数行是密码
[root@node0 ~]# vim /etc/vsftpd/vsftpd.user
liangjiawei01
123456
liangjiawei02
123456
liangjiawei03
123456
#然后把用户的数据库文件转化成db文件,并且hash加密
[root@node0 ~]# db_load -T -t hash -f /etc/vsftpd/vsftpd.user /etc/vsftpd/vsftpd.db
#一定要把这个文件的权限改成600
[root@node0 ~]# chmod 600 /etc/vsftpd/vsftpd.db
#创建虚拟用户登录的家目录-->这个也是虚拟用户的映射用户
[root@node0 ~]# useradd -s /sbin/nologin virtual
#让虚拟用户的家目录有读权限
[root@node0 ~]# chmod o+r /home/virtual/
[root@node0 ~]#
#建立一份虚拟用户的pam认证文件;
[root@node0 ~]# cp -a /etc/pam.d/vsftpd /etc/pam.d/vsftpd.pam
#然后修改一下pam认证文件的内容
[root@node0 ~]# vim /etc/pam.d/vsftpd.pam
#%PAM-1.
auth required pam_userdb.so db=/etc/vsftpd/vsftpd
account required pam_userdb.so db=/etc/vsftpd/vsftpd
#去到配置文件conf中添加支持的配置
[root@node0 ~]# vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd.pam #这一行要修改
guest_enable=YES #下面这些直接添加新得字段
guest_username=virtual
user_config_dir=/etc/vsftpd/dir
..........
#创建指定的虚拟用户的配置文件
[root@node0 ~]# mkdir /etc/vsftpd/dir
#注:做虚拟用户配置文件设置时,将主配置文件中自定义的匿名用户相关设置注释掉。
#指定01可以上传文件
[root@node0 ~]# vim /etc/vsftpd/dir/liangjiawei0.conf
anon_upload_enable=YES
#指定02可以创建
[root@node0 ~]# vim /etc/vsftpd/dir/liangjiawei02.conf
anon_mkdir_write_enable=YES
#指定03可以上传和下载
[root@node0 ~]# vim /etc/vsftpd/dir/liangjiawei03.conf
anon_upload_enable=YES
anon_other_write_enable=YES
#重启验证
[root@node0 ~]# systemctl restart vsftpd
[root@node0 ~]#
#客户端用虚拟用户登录
[root@Node1 ~]# ftp 192.168.75.130
Connected to 192.168.75.130 (192.168.75.130).
220 (vsFTPd 3.0.2)
Name (192.168.75.130:root): liangjiawei01
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
#到这里实验就成功了
4、optenssh+vsftpd加密实验
实验的思路:
拓展:使用tcpdump 工具进行指定端口抓包,抓取ftp登录过程中的数据包
#格式:
tcpdump -i eth0 -nn -X -vv tcp port 21 and ip host 来源ip
#参数解析:
-i #interface:指定tcpdump需要监听的接口
-n #对地址以数字方式显式,否则显式为主机名
-nn #除了-n的作用外,还把端口显示为数值,否则显示端口服务名
-X #输出包的头部数据,会以16进制和ASCII两种方式同时输出
-vv #产生更详细的输出
例子说明问题:
#首先安装一下tcpdump工具
[root@node0 ~]# yum -y install tcpdump
#验证一下做包工具-->这里可以明显看出,咋们的密码和用户名都是能够被抓取的
[root@node0 ~]# tcpdump -i ens32 -nn -X -vv tcp port 21 and ip host 192.168.75.31
tcpdump: listening on ens32, link-type EN10MB (Ethernet), capture size 262144 bytes
#然后使用客户端登陆
[root@Node1 ~]# ftp 192.168.75.130
Connected to 192.168.75.130 (192.168.75.130).
220 (vsFTPd 3.0.2)
Name (192.168.75.130:root): liangjiawei01
331 Please specify the password.
Password:
- 查看是否安装了 openssl
- rpm -q openssl
- 查看 vsftpd 是否支持 openssl
- ldd /usr/sbin/vsftpd | grep libssl
- 生成加密信息的秘钥和证书文件
- 位置:/etc/ssl/certs/
#建立服务器私钥,生成 RSA 密钥
openssl genrsa -out vsftpd.key 1024
#需要依次输入国家,地区,城市,组织,组织单位,Email 等信息。最重要的是有一个 common name,
#可以写你的名字或者域名。如果为了 https 申请,这个必须和域名吻合,否则会引发浏览器警报。
#生成的 csr 文件交给 CA 签名后形成服务端自己的证书
openssl req -new -key vsftpd.key -out vsftpd.csr
#使用 CA 服务器签发证书,设置证书的有效期等信息
#注意 1:生成完秘钥和证书文件后,将本目录{/etc/ssl/certs/}的权限修改为 500.
#注意 2:在实验环境中可以用命令生成测试,在生产环境中必须要在 https 证书厂商注册(否则浏览器不识别)
openssl x509 -req -days 365 -sha256 -in vsftpd.csr -signkey vsftpd.key -out vsftpd.crt
- 修改主配置文件/etc/vsftpd/vsftpd.conf
ssl_enable=YES
#启用 ssl 认证
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
#开启 tlsv1、sslv2、sslv3 都支持
allow_anon_ssl=YES
#允许匿名用户{虚拟用户}
force_anon_logins_ssl=YES
force_anon_data_ssl=YES
#匿名登录和传输时强制使用 ssl
force_local_logins_ssl=YES
force_local_data_ssl=YES
#本地登录和传输时强制使用 ssl
rsa_cert_file=/etc/ssl/certs/vsftpd.crt
#rsa格式的证书
rsa_private_key_file=/etc/ssl/certs/vsftpd.key
#rsa格式的密钥
注:密钥文件要在配置文件中单独声明(写入配置文件时,注释要单独一行,否则会报错)
实验过程:
#查看一下是否安装了openssl
[root@node0 ~]# rpm -q openssl
openssl-1.0.2k-16.el7.x86_64
#再查看vsftpd是否支持openssl
[root@node0 ~]# ldd /usr/sbin/vsftpd | grep libssl
libssl.so.10 => /lib64/libssl.so.10 (0x00007fdde32cc000)
#去到生成的加密信息的密钥和证书文件
[root@node0 certs]# chmod 500 /etc/ssl/certs/
[root@node0 ~]# cd /etc/ssl/certs/
[root@node0 certs]#
#生成服务器私钥、生成RSA密钥
[root@node0 certs]# openssl genrsa -out vsftpd.key 1024
Generating RSA private key, 1024 bit long modulus
.........................................................................++++++
....++++++
e is 65537 (0x10001)
#然后在生成证书文件
需要依次输入
国家,
地区,
城市,
组织,
组织单位,
Email 等信息
最重要的是有一个 common name,
可以写你的名字或者域名。如果为了 https 申请,这个必须和域名吻合,否则会引发浏览器警报。生成的 csr 文件交给 CA 签名后形成服务端自己的证书
[root@node0 certs]# openssl genrsa -out vsftpd.key 1024
Generating RSA private key, 1024 bit long modulus
.........................................................................++++++
....++++++
e is 65537 (0x10001)
[root@node0 certs]# openssl req -new -key vsftpd.key -out vsftpd.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:GD
Locality Name (eg, city) [Default City]:GZ
Organization Name (eg, company) [Default Company Ltd]:NS
Organizational Unit Name (eg, section) []:YK
Common Name (eg, your name or your server's hostname) []:YKKJ
Email Address []:123456@qq.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
#最后使用CA服务器签发证书
[root@node0 certs]# openssl x509 -req -days 365 -sha256 -in vsftpd.csr -signkey vsftpd.key -out vsftpd.crt
Signature ok
subject=/C=CN/ST=GD/L=GZ/O=NS/OU=YK/CN=YKKJ/emailAddress=123456@qq.com
Getting Private key
#这里要注意两个问题
注意 1:生成完秘钥和证书文件后,将本目录{/etc/ssl/certs/}的权限修改为 500.
注意 2:在实验环境中可以用命令生成测试,在生产环境中必须要在 https 证书厂商注册(否则浏览器不识别)
#这里准备好了之后可以修改配置文件
[root@node0 certs]# vim /etc/vsftpd/vsftpd.conf
............
#添加一下几个内容
ssl_enable=YES
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
allow_anon_ssl=YES
force_anon_logins_ssl=YES
force_anon_data_ssl=YES
rsa_cert_file=/etc/ssl/certs/vsftpd.crt
rsa_private_key_file=/etc/ssl/certs/vsftpd.key
#重启服务验证即可
[root@node0 certs]# systemctl restart vsftpd
[root@node0 certs]#
#到这里实验就结束了;
更多推荐
已为社区贡献1条内容
所有评论(0)