一、概述
FTP是file Transfer Protocoll文件传输下ieyi,用于Internet上的文件的双向传输。因ftp是明文传输,没有受到保护,所以具有一定危险性。
VSFTP是一个基于GPL发布的类unix系统上使用的FTP服务器软件。为了解决ftp传输安全性问题的,依然明文,未加密。
二、安全特性
1.vsftp程序的运行着一般是普通用户,降低了相对应进程的权限,提高了安全性。
2.任何需要执行较高权限的执行全都需要上层程序的许可。
3.ftp所需要使用的绝大多数命令都被整合到vsftp中,基本不需要系统额外提供命令。
4.拥有chroot功能,可以改变用户的根目录,限制用户职能再自己的家目录。
三、vsftp连接类型
控制连接(持续连接)—>TCP 21(命令信道)—>用户收发FTP命令
数据连接(按需连接)—>TCP 20(数据信道)—>用于上传下载数据
四、VSFTP工作模式
两种模式(主动模式port模式;被动模式Passive模式)
主动模式(port,默认)
FTP客户端和服务器的TCP21端口进行连接,用来发送命令,客户端需要接收数据的时候在这个通道上发送port命令。port命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP20端口连接至客户端的指定端口发送数据。FTP server必须和客户端建立一个新的连接用来传送数据。
被动模式(passive)
FTP客户端首先和服务器的TCP21端口建立连接,用来建立控制通道发送命令,但建立连接后客户端发送pasv命令。服务器收到pasv命令后,打开一个临时端口(端口大于1023小羽65535)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器的临时端口,然后ftp服务器将通过这个端口传输数据。
注:由于vsftp的被动模式是随机端口进行数据传输,所以设置防火墙时需要刻意放行。
五、VSFTP传输模式
Binary模式:不对数据进行任何处理,适合进行可执行文件、压缩文件,图片等。
ASCII模式:进行文本传输时,自动适应操作系统的结束符,如回车等。
Linux红帽发行版本中VSFTP默认采用的时binary模式,这样能保证绝大多数文件传输后能正常使用。
切换方式:在ftp>提示符下输入ascii即转换到ascii方式,输入binary即转换到binary模式
六、vsftp软件信息
服务端软件名
vsftpd
客户端软件名
ftp
服务名
vsftpd
端口号
20、21、或指定范围内随机端口
配置文件
/etc/vsftpd/vsftpd.conf
登录验证方式
匿名用户验证
用户账号名:ftp或anonymous
用户密码:无密码
工作目录:/var/ftp(类似家目录,别把文件放在这里)
默认权限:可下载可上传,上传权限由两部分组成(配置文件和文件系统)本地用户验证
用户账号名:把本地用户(/etc/passwd)
用户密码:用户密码(/etc/shadow)
工作目录:登录用户的宿主目录(用户家目录)
权限:最大权限(drwx------)虚拟(virtual)用户验证
1.创建虚拟用户来代替本地用户,减少本地用户曝光率
2.使用本地用户作为虚拟用户的映射用户,为虚拟用户提供工作目录和权限控制
3.能够设置严格的权限(为每一个用户生成单独配置文件)
人为创建,生成数据库文件,找一个系统用户作为虚拟用户的映射用户,借助系统用户的家目录作为默认登陆点,则默认登录位置:/home/*
每个虚拟账户的权限都可以被单独定制
七、VSFTP实验
匿名用户实现
匿名权限控制:(/etc/vsftpd/vsftpd.conf)
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为不限速,单位byte/s
注:anon就是anonymous,代表匿名用户。
实现需求和流程
1.实现可以上传
anon_upload_enable=yes
在/var/ftp/创建上传目录
修改上传目录的权限或所有者,让匿名用户有写入权限(不推荐设置/var/ftp目录权限,pub也不行)2.实现创建目录和文件其他操作
anon_mkdir_write_enable=yes
anon_other_write_enable=yes3.用户进入某文件时,弹出相应说明
在对应目录下创建.message文件,并写入提示内容。
确认dirmessage_enable是否启用
尝试切换目录查看效果,同一次登录仅提示一次。实现上传的文件可下载
默认情况下开放上传权限后,上传的文件是无法被下载的,因为文件的其他人位置没有r权限
设置anon_umask=022,可以让上传的文件other位拥有r权限,然后才能被其他人下载。
服务机安装vsftpd,客户端安装ftp
客户端通过ftp 服务器IP,即可通过vsftp访问。
常用命令:
?,获取帮助
get,下载文件,例如:get install.log
put,上传文件,例如:put install.log
delete,删除目录,例:delete laoli
mkdir,创建目录,例:mkdir laoli
rename,改名。例如:rename install.log ist
本地用户验证实现
本地用户权限控制:
local_enable=yes,是否启用本地用户
local_umask=022,本地用户所上传的文件的权限掩码
local_root=/var/ftp,设置本地用户的ftp根目录,默认本地用户家目录
chroot_local_user=yes,是否将用户禁锢在家目录
local_max_rate=0,限制最大传输速率
ftpd_baner=welcaome to blah FTP server,用户登陆时显示的欢迎信息
userlist_enable=yes&userlist_deny=yes,禁止/etc/vsftpd/user_list文件中出现的用户名用户登录FTP
userlist_enable=yes&userlist_deny=no,仅允许/etc/vsftpd/user_list文件中出现的用户名用户登录FTP
配置文件
/etc/vsftpd/ftpusers
禁止/etc/vsftpd/ftpusers文件中出现的用户名用户登录FTP,权限比user_list更好,即刻生效。
实现需求和流程
1.客户端需要创建用户并设置密码(用户不登陆操作系统,仅用来登录vsftp)
useradd -s /sbin/nologin username2.将所有用户禁锢在自己家目录下
chroot local_user=yes,默认不禁锢3.将部门用户禁锢在自己家目录下
chroot_list_enable=yes
开启白名单功能,允许白名单中的用户随意切换目录
chroot_list_file=/etc/vsftpd/chroot_list
白名单文件所在位置(需要自己配置)4.配置文件
/et/cvsftpd/ftpusers
所有写入此文件的用户都不允许登录ftp,立即生效5.修改被动模式数据传输使用端口
pasv_enable=yes
pasv_main_port=30000
pasv_max_port=35000
虚拟用户验证实验
1.建立FTP虚拟用户的用户数据库文件,在/etc/vsftpd/
vim vsftpd.user
注:文件名可以随便定义,文件格式是奇数行用户,偶数行密码
laoli
123456
写完后用命令进行文件类型转换
db_load -T -t hash -f vsftpd.user vsftpd.db
将vsftpd.user转换成vsftpd.db
-T,将文件转换成数据库文件
-t,加密类型,hash加密
-f,要转换的源文件,所以是-f vsftpd,user
再修改文件权限位600,保证其安全性
chmod 600 vsftpd.db
2.创建ftp用户的映射用户,并指定其家目录。
useradd -d /var/ftproot -s /sbin/nologin virtual
创建virtual用户作为ftp的虚拟用户的映射用户
3.建立支持虚拟用户的PAM认证文件,添加虚拟用户支持。
cp -a /etc/pan.d/vsftpd /etc/pam.d/vsftpd.pam
使用模板生成自己的认证配置文件,方便调用
4.编辑新生成的文件vsftpd.pam,清空原来的内容,添加以下内容
auth required pam_userdb.so db:/etc/vsftpd/vsftpd
account required pam_userdb.so db=/etc/vsftpd/vsftpd
5. 在vsftpd.conf添加支持配置
修改
pam_service_name=vsftpd.pam
添加
guest_enable=yes #开启虚拟用户
guest_username=virtual #映射用户是谁
user_config_dir=/etc/vsftpd/dir #配置文件目录,自己创建
6.为虚拟用户创建独立的配置文件,启动服务并测试
注:做虚拟用户配置文件时,将主配置文件中定义的匿名用户相关设置注释掉,因为虚拟用户和匿名用户使用同一种参数anon_xxx。如果主配置文件有自定义的配置,那么子配置文件不生效,仅是自定义的,原本默认的不改。
配置文件:用户可以上传:anon_upload_enable=yes
用户可以创建文件或目录:anon_mkdir_write_enable=yes
用户可以修改文件名,删除等写入权限
anon_upload_enable=yes
anon_other_write_enable=yes注:给映射用户的家目录,设置r权限,让虚拟用户有读写权限。
dir下的配置文件的名字和虚拟用户文件中的用户名相同即可,每个用户就有每个配置文件
取消匿名用户的相关设置(虚拟用户与匿名用户使用相同的参数,所以如果要设定虚拟用户,取消主配置文件中关于匿名用户的配置,子虚拟用户配置文件才有作用)
测试是否成功
openssl+vsftpd加密验证方式
使用tcpdump工具指定端口抓包,抓取ftp登录过程中的数据包
tcpdump -i ens33 -nn -x -vv port 21 and ip host-i,interface:指定tcpdump需要监听的接口
-n,对地址以数字方式显示,否则显示主机名
-nn,除了-n作用外,还会把端口显示为数值,否则显示端口服务名
-x,输出包的头部数据,会以16进制和ASCII两种方式同时输出
-vv,产生更详细的输出,可以-v -vvv例如:
tcpdump -i ens33 -nn -x -vv port 21 and ip host 192.168.1.130
指定监听本机ens33网卡的21端口,抓取来自192.168.1.130的包
注:此抓包就可以看到账户密码,表示vsftp确实以明文传输,可以和22端口抓的包作比较
所以需要使用openssl进行加密
具体操作:
https://blog.csdn.net/mango_kid/article/details/108147323
很详细,我这里也就不写了。