Vsftp服务
一、Vsftp概述
FTP是File Transfer Protocol(文件传输协议),用于互联网上的文件的上传和下载;使用FTP传输时,具有一定危险程度,因为数据在互联网上面是没有受到保护的明文传输方式
Vsftp是在类unix系统上使用的FTP服务器软件,全称是Very Security FTP,为了解决ftp传输安全性问题的
优点:文件传输、可跨平台
缺点:只能实现文件传输,无法实现文件系统挂载;无法直接修改文件
软件名:vsftpd
服务名:vsftpd
端口号:20、21,指定范围内随机端口
配置文件:/etc/vsftpd/vsftpd.conf
1.安全特性
1.vsftp程序的运行者一般是普通用户,降低了权限
2.任何需要执行较高权限的指令都需要上层程序许可
3.ftp所需要的命令都被整合到vsftp中,不需要系统额外提供命令
4.拥有chroot功能,可用改变用户的根目录,限制用户只能在自己的家目录
2.连接类型
控制连接(持续连接) —> TCP21(命令) —> 用户收发FTP命令
数据连接(按需连接) —> TCP20(数据) —> 用于上传下载数据
3.工作模式
主动模式
客户端首先和服务器的21端口建立连接,用来发送命令
客户端需要接收数据的时候向服务器发送port命令,port命令包含了客户端用什么端口接收数据
在传输的时候,服务器端通过自己的20端口连接至客户端的指定端口发送数据
ftp server必须和客户端建立一个新的连接用来传输数据
被动模式
客户端首先和服务器的21端口建立连接,用来发送命令
建立连接后,客户端发送pasv命令
服务器收到pasv命令后,打开一个临时端口(大于1023小于65535)并通知客户端连接服务器的临时端口
然后ftp服务器将通过这个端口传输数据
4.传输模式
Binary模式:不对数据进行任何处理,适合进行可执行文件、压缩文件、图片等
Ascii模式: 进行文本传输时,自动适应目标操作系统的结束符,如回车等
linux红帽发行版中默认才用Binary模式
5.登录验证方式
匿名用户验证
用户账号名称:ftp或anonymous
用户密码:无
工作目录:/var/ftp
默认权限:默认可下载不可上传,上传权限由两部分组成(主配置文件和文件系统)
本地用户验证
用户账号名称:本地用户(/etc/passwd)
用户账号密码:用户密码(/etc/shadow)
工作目录:登录用户的宿主目录
默认权限:最大权限(drwx------)
虚拟用户验证
创建虚拟用户来代替本地用户,减少本地用户曝光率
使用本地用户作为虚拟用户的映射用户,为虚拟用户提供工作目录和权限控制
能够设置严格的权限(为每一个用户生成单独的配置文件)
二、服务搭建
1.匿名用户验证实验
匿名用户权限控制
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
message_file=.message
同一次登录仅提示一次
2.本地用户验证实验
本地用户权限控制
local_enable=YES #是否启用本地系统用户
local_umask=022 #本地用户所上传文件的权限掩码
local_root=/var/ftp #设置本地用户的ftp根目录
chroot_local_user=YES #是否将用户禁锢在主目录
chroot_list_file=/etc/vsftpd/chroot_list#允许名单中的用户随意切换目录
local_max_rate=0 #限制最大传输速率
ftpd_banner=Weclome to ftp #用户登陆时显示欢迎信息
userlist_enable=YES & userlist_deny=YES #禁止/etc/vsftpd/user_list文件中的用户登录
userlist_enable=YES & userlist_deny=NO #仅允许/etc/vsftpd/user_list文件中的用户登录
配置文件:ftpusers
#禁止/etc/vsftpd/ftpusers文件中出现的用户登录ftp,权限比user_list更高,即时生效
实验流程
1.服务端需要创建用户并设置密码(不需要登录linux,仅用来登录ftp)
useradd -r -s /sbin/nologin username
2.将所有用户禁锢在自己的加目录下
chroot_local_user=YES
3.将部分用户禁锢在自己的家目录下
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list#允许名单中的用户随意切换目录
4.配置文件:/etc/vsftpd/ftpusers
所有写入此文件内的用户名不允许登录
5.修改被动模式数据传输使用端口
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=35000
3.虚拟用户验证实验
1.建立FTP虚拟用户的用户数据库文件(/etc/vsftpd)
vim /etc/vsftpd/vsftpd.user #奇数行为用户,偶数行为密码
testuser
123.com
db_load -T -t hash -f /etc/vsftpd/vsftpd.user vsftpd.db
chmod 600 /etc/vsftpd/vsftpd.user
2.创建FTP虚拟用户的映射用户,并指定其用户家目录
useradd -d /var/ftproot -s /sbin/nologin virtual
3.建立支持虚拟用户的PAM认证文件,添加虚拟用户支持
cp -a /etc/pam.d/vsftpd /etc/pam.d/vsftpd.pam #使用模板生成自己的认证配置文件,方便一会调用
vim /etc/pam.d/vsftpd.pam
auth required pam_userdb.so db=/etc/vsftpd/vsftpd
account required pam_userdb.so db=/etc/vsftpd/vsftpd
4.在vsftpd.conf文件中添加支持配置
pam_service_name=vsftpd.pam
guest_enable=YES
guest_username=virtual
user_config_dir=/etc/vsftpd/dir
5.为虚拟用户建立独立的配置文件
vim testuser
anon_upload_enable=YES #允许上传文件
anon_mkdir_write_enable=YES #允许创建目录
anon_other_write_enable=YES #开放其他写入权(删除,覆盖,重命名)
4.Openssl+vsftpd加密验证方式
ssl原理
密钥:解密加密的数据包,*.key
证书:提供加密所需的功能(加密类型,加密长度),*.csr
签字后的证书:*.crt(有一定有效期,有加密类型,有一定有效期限)
1.当客户端要发送数据包时,服务器要求客户端下载签字后的证书文件
2.客户端使用证书将要发送的数据包加密,然后进行传输
3.服务器接收到客户端的加密数据包后,拿着密钥文件进行解密,得到明文
搭建
1.查看是否安装了openssl
rpm -q openssl
2.查看vsftpd是否支持openssl
ldd /usr/sbin/vsftpd | grep libssl
3.生成加密信息的密钥和证书文件
cd /etc/ssl/certs/
openssl genrsa -out vsftpd.key 1024 #建立私钥
openssl req -new -key vsftpd.key -out vsftpd.csr #生成csr文件
openssl x509 -req -days 365 -sha256 -in vsftpd.csr -signkey vsftpd.key -out vsftpd.crt
#注意1:生成密钥后,将/etc/ssl/certs的权限修改为500;
#注意2:生产环境中必须要在https证书厂商注册(否则浏览器不识别)
4.修改ftp主配置文件
ssl_enable=YES #启用ssl认证
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
allow_anon_ssl=YES #允许匿名用户(虚拟用户)
force_anon_logins_ssl=YES #匿名登录和传输时强制使用ssl
force_anon_data_ssl=YES
force_local_logins_ssl=YES #本地登录和传输时强制使用ssl
force_local_data_ssl=YES
rsa_cert_file=/etc/ssl/certs/vsftpd.crt #rsa证书文件
rsa_private_key_file=/etc/ssl/certs/vsftpd.key