目录
一、FTP文件传输协议
1.1FTP工作原理
ftp是一种双通道协议,常用在局域网内使用,ftp使用的是tcp传输的21端口和20端口;
21端口:用于命令控制(传输权限等,以及告知数据传输的端口)
20端口:用于数据传输
1.2两种模式介绍
主动模式:服务端主动开启tcp的20端口 去传输数据给客户端
被动模式:服务端开放随机端口,通过21端口告诉了客户端,被动等待客户端连接
1.3FTP状态码
1XX:信息 125:数据连接打开
2XX:成功类状态 200:命令OK 230:登录成功
3XX:补充类 331:用户名OK
4XX:客户端错误 425:不能打开数据连接
5XX:服务器错误 530:不能登录
1.4FTP的三种用户分类
匿名用户:anonymous(匿名用户),对应Linux用户ftp(程序用户)
系统用户:Linux的用户,用户/etc/passwd,密码/etc/shadow
虚拟用户:特定服务的专用用户,独立的用户/密码文件 administer ##不常用
匿名用户(映射为系统用户ftp )共享文件位置:/var/ftp
系统用户共享文件位置:用户家目录
注意:
系统用户登录ftp服务器以后,显示的服务器的根是硬盘真正的根,但登录的位置是系统用户的家目录,再默认情况下,系统用户可以切换至硬盘的根目录下,约等于可以看到整个硬盘的内容(不是很安全)
客户端以匿名用户或者ftp用户登录以后,当前显示的根是服务器的根,也就是程序用户ftp的家目录:/var/ftp
匿名用户的默认权限有哪些(匿名用户可以查看,可以下载/var/ftp目录下的内容)
二、vsftpd软件的介绍
2.1服务端介绍
[root@localhost ftp]#rpm -qc vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd ##pam认证的配置文件
/etc/vsftpd/ftpusers ##与pam认证相结合,可以设置访问黑白名单
/etc/vsftpd/user_list ##与vsftpd.conf的配置结合,可以设置禁锢的黑白名单
/etc/vsftpd/vsftpd.conf ##服务端的配置文件
2.2不同操作系统下的客户端登录操作
linux系统下载ftp客户端
Windows下推荐filezilla软件,我个人比较喜欢
还可以直接在我的电脑路径下找
还可以在Windows的命令行操作
三、vsftpd的常见配置
3.1修改默认的命令端口
[root@localhost ftp]#vim /etc/vsftpd/vsftpd.conf
listen_port=2121 ##修改默认端口号为2121,配置文件中没有,直接添加
[root@localhost ftp]#systemctl restart vsftpd
3.2限制匿名用户登录(系统原本是默认匿名可以登录的)
[root@localhost ftp]#vim /etc/vsftpd/vsftpd.conf
12 anonymous_enable=no ##配置文件的第12行修改为no
[root@localhost ftp]#systemctl restart vsftpd
3.3默认匿名用户不可以上传,如果想要开启
[root@localhost pub]#vim /etc/vsftpd/vsftpd.conf
12 anonymous_enable=YES ##允许上传的前提一定是允许匿名登录
29 anon_upload_enable=YES ##原本是默认注释了,为关闭,需要取消注释,注意:文件系统权限
33 anon_mkdir_write_enable=YES ##原本是默认注释了,为关闭,需要取消注释
[root@localhost pub]#systemctl restart vsftpd
[root@localhost pub]#chmod 777 /var/ftp/pub
补充未做的关于ftp用户的实验配置(这些是配置文件没有的内容,需要自行添加):
anon_world_readable_only=NO 只能下载全部读的文件, 默认YES
anon_umask=0333 指定匿名上传文件的umask,默认077,注意:0333中的0不能省略
anon_other_write_enable=YES 可删除和修改上传的文件,默认NO
3.4指定匿名用户上传的文件默认的所有者和权限
[root@localhost pub]#vim /etc/vsftpd/vsftpd.conf
12 anonymous_enable=YES ##允许上传的前提一定是允许匿名登录
29 anon_upload_enable=YES ##原本是默认注释了,为关闭,需要取消注释,注意:文件系统权限
33 anon_mkdir_write_enable=YES ##原本是默认注释了,为关闭,需要取消注释
48 chown_uploads=YES ##默认是no,这里调整为yes,取消注释
49 chown_username=xueyin ##这里是指定将所有的上传文件的属主和属组权限映射为xueyin,取消注释
[root@localhost pub]#systemctl restart vsftpd
补充未添加的测试(这是配置文件中没有的):
chown_upload_mode=0644 ##可以添加匿名用户上传的落地文件属性
3.5系统用户的默认权限查看
/etc/vsftpd/vsftpd.conf
16 local_enable=YES ##默认允许linux用户登录
19 write_enable=YES ##默认允许linux用户上传文件,与文件夹的权限相配合
23 local_umask=022 ##默认系统用户上传文件的默认权限对应umask
3.6禁锢系统用户
登录以后的系统用户权限过大,相当于能够看到整个硬盘的内容,并且下载,所有有了系统用户禁锢,就是限制系统用户只能在自己的家目录下活动,不能切换到根下面去
[root@localhost ~]#vim /etc/vsftpd/vsftpd.conf
101 chroot_local_user=YES ##第101行默认关闭,这里取消注释
102 chroot_list_enable=YES ##第102行默认关闭,这里取消注释
104 chroot_list_file=/etc/vsftpd/chroot_list ##第104行默认关闭,这里取消注释
[root@localhost vsftpd]#vim chroot_list ##/etc/vsftpd目录下没有,需要自行添加
lisi
[root@localhost vsftpd]#chmod -R 555 /home ###这一步非常重要,要不然不在名单的系统用户会一直报错,但是对匿名用户没有影响,使用登录进去的根是服务器的家目录
[root@localhost ~]#systemctl restart vsftpd
补充搭配(黑名单就不做实验了):
当chroot_local_user=YES和chroot_list_enable=YES时,则chroot_list中用户不禁锢,即白名单
当chroot_local_user=NO和chroot_list_enable=YES时, 则chroot_list中用户禁锢,即黑名单
拓展,这种报错是什么原因?
回答:这是因为没有修改/home家目录的权限,需要有写的权限
[root@localhost opt]#ftp 192.168.20.18
Connected to 192.168.20.18 (192.168.20.18).
220 (vsFTPd 3.0.2)
Name (192.168.20.18:root): xueyin
331 Please specify the password.
Password:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Login failed.
421 Service not available, remote server has closed connection
3.7提示信息
87 ftpd_banner=Welcome to blah FTP service. ##默认关闭,这是取消注释,将其开启
3.8pam模块与黑白名单结合使用
[root@localhost vsftpd]#vim /etc/vsftpd/vsftpd.conf
101 chroot_local_user=YES
[root@localhost vsftpd]#vim ftpusers
16 lisi
[root@localhost vsftpd]#vim /etc/pam.d/vsftpd
3 auth required pam_listfile.so item=user sense=deny file=/etc/v sftpd/ftpusers onerr=succeed
表明以上实验是一个黑名单
改为下面这个配置,就是个白名单,实验就不做了
auth required pam_listfile.so item=user sense=allow file=/etc/vsftpd/ftpusers onerr=succeed
3.9限定匿名用户的最大传输速率(百度云盘下载限速用的类似的原理)
服务端配置:
[root@localhost ~]#vim /etc/vsftpd/vsftpd.conf
anon_max_rate=10240 ##这是配置文件里面没有的,需要自行添加
local_max_rate=10240000 ##这是配置文件里面没有的,需要自行添加
服务端还需要分别在服务器的家目录和用户的家目录下创建两个一模一样的文件,用于测试
[root@localhost pub]#dd if=/dev/zero of=/home/xueyin/bigfile bs=1M count=100
[root@localhost pub]#dd if=/dev/zero of=/var/ftp/pub/bigfile bs=1M count=100
客户端测试:
[root@localhost opt]#wget ftp://192.168.20.18/pub/bigfile ##匿名用户
[root@localhost opt]#wget ftp://xueyin:"123456"@192.168.20.18/bigfile ##本地用户