ftp(file transfer protocol)是互联网中最老牌的文件传输协议
在ftp的使用中,通常会遇到两个概念:上传和下载
上传:将文件从自己的计算机拷贝至远程主机上
下载:从远程主机拷贝文件到自己的计算机上
1.yum install vsftpd -y
2.关闭selinux
3.关闭firewalld
4.systemctl start vsftpd
systemctl enable vsftpd
5.测试安装
方式一:使用firefox输入ftp://ip
方式二:使用lftp ip指令
使用lftp指令前需要安装lftp包,可以先查找lftp指令由什么包提供。这个lftp是一个浏览软件,相当于火狐浏览器。
这种方式,只有可以列出资源时才算访问成功。
而下图仅仅表示开启这个软件
1.服务名称: vsftpd.service
2.配置目录:/etc/vsftpd
3.主配置文件:/etc/vsftpd/vsftpd.conf
4.默认发布目录:/var/ftp
-q:指定vsftpd
-c:指定配置文件
5.报错信息
550:程序本身拒绝
553:文件系统权限限制
500:权限过大
530:权限过小(认证失败)
先来明确一个概念,什么是匿名,什么是本地用户访问?
lftp 192.168.145.100: 当访问ftp服务时没有加入用户访问是匿名访问
lftp 192.168.145.100 -u westos: 本地用户访问
准备:帮助命令1 通过 man 5 vsftpd.conf 指令查看具体参数
帮助命令2 ?
1.登录控制
anonymous_enable=YES|NO,YES表示允许匿名登录,NO表示不能匿名登录。
(1)在虚拟机2中原本可以匿名登录
(2)修改虚拟机1vsftpd的配置文件
(3)发现虚拟机2不能匿名访问了
2.家目录控制
anon_root=/software
(1)在虚拟机2中登录位置原本为/var/ftp
(2)编辑虚拟机1中vsftpd配置文件
(3)在虚拟机2中再次登录发现家目录变为/var/ftp/software
3.上传控制
anon_upload_enable=YES|NO,YES表示允许上传,NO表示不允许上传。
(1)在虚拟机2中查看是否允许上传/etc/passwd文件
上传被拒绝
(2)修改虚拟机1中的/etc/vsftpd/vsftpd.conf
(3)在虚拟机2中查看是否可以上传了
为什么会报错呢?553表示权限设置有问题
(4)在虚拟机1中查看权限并设置权限
由于我们在虚拟机2中是匿名登录的方式,而虚拟机1中/var/ftp目录的权限设定为只有超级用户可写,所以在虚拟机2中匿名登录时会报错,我们重新设定满权限试试。
(5)在虚拟机2中尝试登录
还是报错,500表示权限过大。当在虚拟机1中对/var/ftp目录权限设置超过755时,系统便会拒绝访问。
(6)重新设置权限
这次我们将/var/ftp的权限还原,以便用户可以正常登入系统,重新设置/var/ftp/pub的权限为777,在/var/ftp/pub下上传数据。
(7)在虚拟机2中上传文件
成功上传文件
4.下载控制
anon_world_readable_only=NO,NO表示匿名用户可以下载没有读权限的文件,YES表示只能下载有读权限的文件。
(1)在虚拟机2中下载文件
发现报错,550表示程序本身拒绝。
(2)编辑虚拟机1中的/etc/vsftpd/vsftpd.conf文件
(3)在虚拟机2中尝试下载
下载成功,注意在哪里登录,下载的文件就在哪里。
5.目录建立控制
anon_mkdir_write_enable=YES|NO,YES表示可以建立目录,NO表示不能建立目录。
(1)在虚拟机2中尝试新建目录
报错,550表示程序本身拒绝
(2)编辑虚拟机1中的/etc/vsftpd/vsftpd.conf文件
(3)在虚拟机2中尝试建立目录
建立成功
6.删除、重命名控制
anon_other_write_enable=YES|NO,YES表示可以删除、重命名,NO表示不能执行删除、重命名操作。
(1)在虚拟机2中删除、重命名
发现删除和重命名都失败了
(2)在虚拟机1中编辑/etc/vsftpd/vsftpd.conf文件
(3)在虚拟机2中尝试删除、重命名
删除、重命名成功
7.登录数量控制
max_clients=2
(1)在虚拟机1中编辑/etc/vsftpd/vsftpd.conf文件
(2)在虚拟机2中尝试登录三个用户
发现失败
退出其中一个帐户后,发现登录成功。
8.上传速率控制
anon_max_rate=102400
(1)先在虚拟机2中查看当前上传速率
(2)编辑虚拟机1中的/etc/vsftpd/vsftpd.conf
102400表示100K
(3)在虚拟机2中重新上传文件,查看上传速率。
1.登录控制
local_enable=YES|NO,YES表示本地用户可以登录,NO表示本地用户不能登录。
(1)在虚拟机1中新建两个用户lll和yyy,并设定密码。
重置用户密码:echo 新密码 | passwd --stdin 用户名
(2)在虚拟机2中使用新建的两个用户进行登录
输入正确密码,登录失败。
(3)修改虚拟机1中/etc/vsftpd/vsftpd.conf文件
(4)在虚拟机2中重新登录
这里已经登录成功了,只是相应目录下没有东西。
为了看得更清楚,我们在虚拟机1中新建文件。
在虚拟机2中重新登录
登录成功!
2.家目录控制
local_root=/software
(1)在虚拟机2中登录后查看家目录
(2)在虚拟机1中编辑/etc/vsftpd/vsftpd.conf文件
(3)在虚拟机2中重新登录,查看家目录。
家目录已经改变为/software
3.写权限控制
write_enable=YES|NO,YES表示允许用户使用任何修改ftp文件系统的指令,NO表示不允许。
(1)在虚拟机2中尝试新建、删除操作
发现操作失败
(2)编辑虚拟机1/etc/vsftpd/vsftpd.conf文件
(3)在虚拟机2中重新新建、删除目录
4.上传文件权限控制
local_umask=077
(1)在虚拟机2中上传文件查看其权限
umask=022:新建的目录权限为755,文件的权限为644
umask=077:新建的目录权限为700,文件的权限为600
这里发现所上传文件的权限为644
(2)修改虚拟机1中/etc/vsftpd/vsftpd.conf文件
为了降低文件权限,将umask值设为077
(3)在虚拟机2中上传文件,查看其权限。
发现所上传的文件权限为600
5.用户登录控制
/etc/vsftpd/ftpusers:永久黑名单
/etc/vsftpd/user_list:临时黑名单(可以根据我们的某些设定变成白名单)
使用第一种方式
(1)在虚拟机2中使用lll账号登录
登录成功
(2)修改/etc/vsftpd/ftpusers文件
将lll用户添加进这个黑名单
(3)在虚拟机2中使用lll账号重新登录
登录失败
使用第二种方式
(1)在虚拟机2中使用lll账号登录
登录成功
(2)修改虚拟机1中/etc/vsftpd/user_list文件
(3)在虚拟机2中使用lll账号重新登录
登录失败
6.用户登录白名单
userlist_deny=NO,NO表示开启白名单。
(1)准备
此时user_list和userlist_deny如下,此时开启的是黑名单。
(2)在虚拟机2中查看用户lll和yyy能否登录
用户lll不能登录,用户yyy可以登录。
(3)user_list保持不变,修改虚拟机1中的/etc/vsftpd/vsftpd.conf文件。
(4)在虚拟机2中使用账号lll和yyy重新登录
此时,用户lll可以正常登录,用户yyy不能登录,黑名单变成了白名单。
7.锁定用户到自己的家目录中
chroot_local_user=YES
(1)在虚拟机2中查看用户是否可以离开家目录
此时,用户可以离开家目录,进入服务器根目录,非常危险。
(2)修改虚拟机1中的/etc/vsftpd/vsftpd.conf文件
(3)在虚拟机2中看是否能进入根目录
注意一个小问题:对/home/*的写权限和chroot_local_user设定冲突(锁定用户到家目录里,即降低用户权限,所以去掉写权限),我们需要在虚拟机1中将写权限减掉。
在虚拟机2中再次查看,发现用户lll已经被锁定到家目录里了。
这个参数对所有用户生效,比如用户yyy也不能离开家目录。
8.锁定用户到自己的家目录中的白名单(接7)
chroot_local_user=YES
chroot_list_enable=YES(YES表示启用名单)
chroot_list_file=/etc/vsftpd/chroot_list
(1)在虚拟机2中所有用户均不能离开家目录
(2)修改虚拟机1中的/etc/vsftpd/vsftpd.conf和/etc/vsftpd/chroot_list文件
(3)在虚拟机2中查看用户切换路径情况
用户lll可以离开家目录,而用户yyy不行。
9.锁定用户到自己的家目录中的黑名单
chroot_local_user=NO
chroot_list_enable=YES(YES表示启用名单)
chroot_list_file=/etc/vsftpd/chroot_list
(1)修改虚拟机1中的/etc/vsftpd/vsftpd.conf文件
(2)在虚拟机2中查看用户切换路径情况
发现用户lll被锁定到家目录中,而用户yyy可以自由切换,即白名单变成了黑名单。
准备
1. 为了避免系统资源的浪费,我们设置虚拟用户,即只有在ftp软件中才承认用户的身份,在实际linux系统中不存在这个用户。
2. 出于安全考虑,vsftpd不共享本地系统的用户认证信息,而采用自己独立的用户认证数据库来认证虚拟用户。这样,虚拟用户和真实用户不必采用相同的用户名和指令。
本地系统的真实用户认证: 模块pam_unix
独立的用户认证数据库: 模块pam_userdb(这个文本文档中的奇数行为用户名,用户名的下一行就是其对应的口令)
3. 使用 cd /etc/pam.d ls 指令查看多个认证文件
实验
1.建立虚拟用户过程
(1)在虚拟机1中使用 vim /etc/vsftpd/ftp_auth_file 指令建立认证文件模板,注意用户名和密码后不能有空格,否则空格也会被算进去。
(2)在虚拟机1中使用 db_load -T -t hash -f ftp_auth_file ftp_auth_file.db 指令加密认证文件(-T 转换,-t 类型,-f 指定转换文件)。
(3)在虚拟机1中使用 vim /etc/pam.d/lyueyue 指令编写认证方法
account: 账号
auth: 密码
required: 表示强制
pam_userdb.so: 插件
db=/etc/vsftpd/ftp_auth_file: 加密认证文件所处位置,默认添加.db。
第一句命令含义:通过使用pam_userdb.so这个插件,强制比对加密认证文件来验证账号。
(4)在虚拟机1中使用 vim /etc/vsftpd/vsftpd.conf 指令,让ftp程序能识别这个认证。
pam_service_name: 指定认证策略文件
guest_enable: 指定虚拟用户功能开启
guest_username: 指定虚拟用户在ftp服务器上的用户身份为ftp(刚才新建的redhat1、redhat2和redhat3在ftp服务器上使用的真实用户身份指定为一个,即ftp)。
(5)在虚拟机1和虚拟机2中测试
在虚拟机2中发现可以使用虚拟用户登录ftp
而在虚拟机1中这些redhat用户实际并不存在
2.虚拟用户家目录的独立设定
(1)在虚拟机1中建立目录
-p:即使上级目录不存在,也可以按目录层级自动创建目录
(2)在虚拟机1中建立文件
这样做的目的是便于等会儿查看家目录
(3)在虚拟机1中修改/etc/vsftpd/vsftpd.conf文件
准备:
$USER代表用户身份,但这个命令ftp并不能识别,因此在后面修改/etc/vsftpd/vsftpd.conf文件时要加上:user_sub_token= $USER
(4)在虚拟机2中进行测试
测试成功
3.用户配置独立
(1)在虚拟机1中修改/etc/vsftpd/vsftpd.conf文件
在/etc/vsftpd/user_config目录中与用户名称相同的文件为用户配置文件
(2)在虚拟机1中新建目录和文件
(3)在虚拟机2中测试redhat1、redhat2和redhat3三个用户能否上传文件
发现只有redhat1用户可以上传文件,而redhat2、redhat3用户不能上传文件。
完成