目录
1. ftp介绍
ftp(File Transfer Protocol):文本传输协议。它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层, 使用 TCP 传输而不是 UDP, 客户在和服务器建立连接前要经过一个“三次握手”的过程, 保证客户与服务器之间的连接是可靠的, 而且是面向连接, 为数据传输提供可靠保证。
FTP允许用户以文件操作的方式(如文件的增、删、改、查、传送等)与另一主机相互通信。并不真正登录到自己想要存取的计算机上面而成为完全用户, 可用FTP程序访问远程资源, 实现用户往返传输文件、目录管理以及访问电子邮件等等, 即使双方计算机可能配有不同的操作系统和文件存储方式。
2. vsftpd安装
yum install vsftpd -y ## 安装ftp服务
## 关闭selinux
~ vim /etc/sysconfig/selinux
修改内容为:SELINUX=disabled
~ reboot
## 关闭firewalld
systemctl stop firewalld
systemctl disable firewalld
systemctl start vsftpd ## 开启vsftpd服务
systemctl enable vsftpd ## 使vsftpd服务可执行
2.1 安装
2.2 关闭selinux
2.3 关闭firewalld
2.4 测试安装
测试安装发布两种方式:
firefox ftp://ip
lftp 192.168.43.10 ## 此访问方式必须能列出资源才算访问成功
yum whatprovides */lftp ## 查找lftp是通过哪个安装包来提供的
yum install lftp -y ## 安装lftp
首先我们通过lftp+ip测试,发现没有该命令,接下来我们就先安装此命令
- 查找lftp是通过哪个安装包来提供的
- 安装完之后,再进行测试,并ls显示所有内容
3. vsftpd基本信息
3.1 服务名称
vsftpd.service
3.2 配置目录
/etc/vsftpd
3.3 主配置文件
/etc/vsftpd/vsftpd.conf
3.4 默认发布目录
/var/ftp
3.5 报错信息
550 ## 程序本身拒绝
553 ## 文件系统权限限制
500 ## 权限过大
530 ## 认证失败
4. 匿名用户访问控制
lftp 192.168.43.10 ## 当访问ftp服务时没有加入用户认证为匿名访问
lftp 192.168.43.10 -u westos ## 本地用户访问
4.1 登陆控制
vim /etc/vsftpd/vsftpd.conf ## 编辑vsftpd服务的配置文件
anonymous_enable=YES/NO ## 配置文件中设定匿名用户可以/不可以访问
systemctl restart vsftpd ## 重启服务
- 在rhel7.6_node1中设定anonymous_enable=NO,在rhel7.6_node2中匿名访问
4.2 家目录控制
anon_root=/software ## 将/software设置为家目录
## 若不设置,默认目录为/var/ftp
4.3 匿名用户开启上传功能
anon_upload_enable=YES|NO ## 表示上传功能是否开启
chmod 777 /var/ftp/pub ## 将子目录权限修改为最高权限
## 上传步骤
1、lftp 192.168.43.10
2、cd /pub
3、put /etc/passwd
- 默认情况下,在rhel7.6_node2匿名用户不可以上传文件
- 因为系统默认将该功能注释,现在我们启动该功能
- 启动功能后,我们再次去上传文件,会发现报553错误,受到文件系统权限限制
- 查看目录权限,发现只对超级用户可写
- 修改权限
- 修改子目录权限,将文件上传到子目录中
4.4 下载控制
- 无法下载,程序本身被拒绝
- 通过man方法来查看下载控制的配置文件
man 5 vsftpd.conf ## 查看配置信息
anon_world_readable_only=NO ## 匿名用户可以下载不能读的文件
下载成功!
4.5 目录建立控制
vim /etc/vsftpd/vsftpd.conf
## 修改配置信息
anon_mkdir_write_enable=YES|NO
新建目录成功!
4.6 删除重命名控制
vim /etc/vsftpd/vsftpd.conf
## 修改配置信息
anon_other_write_enable=YES|NO
删除重命名成功!
4.7 登录数量控制
max_clients=2
4.8 上传速率控制
anon_max_rate=102400
5. 本地用户的访问
5.1 登录控制
useradd westos
useradd lee
echo lee | passwd --stdin westos
echo lee | passwd --stdin lee
lftp 192.168.0.10 -u westos
local_enable=NO|YES
5.2 家目录控制
local_root=/software
5.3 写权限控制
write_enable=NO|YES
5.4 上传文件权限控制
local_umask=077
5.5 用户登陆控制
/etc/vsftpd/ftpusers ##永久黑
/etc/vsftpd/user_list ##默认黑
5.6 用户登陆白名单
userlist_deny=NO #设定/etc/vsftpd/user_list位白名单
#不在名单中的用户不能登陆ftp
5.7 锁定用户到自己的家目录中
chmod u-w /home/* chroot_local_user=YES
5.8 锁定用户到自己的家目录的白名单
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
5.9 锁定用户到自己的家目录的黑名单
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
6. 虚拟用户访问
除匿名用户之外,还可设置虚拟用户来访问FTP。所谓虚拟用户,指存放于独立数据库文件中的FTP用户账户,可以将它们映射到某个不能登录的系统用户账号上,以进一步增强FTP服务器的安全性。
6.1 建立虚拟用户的过程
- 建立虚拟用户数据库文件
cd /etc/vsftpd/
vim ftp_auth_file ## 编辑认证文件
## 认证文件内容
westos1
123
westos2
123
westos3
123
- 加密认证文件
db_load -T -t hash -f ftp_auth_file ftp_auth_file.db ## 加密认证文件
ls
#######################
## db_load命令是一种固定用法
## -T # 允许非Berkeley DB的应用程序使用从文本格式转换的DB数据库文件
## -t hash # 指定读取数据文件的基本方法
## -f # 指定数据的源文件
- 编写认证策略
cd /etc/pam.d/
vim dsd
account required pam_userdb.so db=/etc/vsftpd/ftp_auth_file
auth required pam_userdb.so db=/etc/vsftpd/ftp_auth_file ## 注意在这里系统会默认加上.db后缀,因此我们不需要添加后缀名
vim /etc/vsftpd/vsftpd.conf ## 编写认证策略配置文件
pam_service_name=dsd ##指定认证策略文件
guest_enable=YES ##指定虚拟用户功能开启
guest_username=ftp ##指定虚拟用户在ftp服务器上的用户身份
6.2 虚拟用户家目录的设定
mkdir -p /ftpuserdir/dsd{1..3}/
touch /ftpuserdir/dsd1/dsd1file
touch /ftpuserdir/dsd2/dsd1file
touch /ftpuserdir/dsd3/dsd1file
touch /ftpuserdir/dsd2/dsd2file
touch /ftpuserdir/dsd3/dsd2file
touch /ftpuserdir/dsd3/dsd3file
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
6.3 用户配置独立
user_config_dir=/etc/vsftpd/user_config ##在此目录中与用户名称相同的文件为用户配置文件
mkdir /etc/vsftpd/user_config
vim/etc/vsftpd/user_config/westos1
anon_upload_enable=YES
设定完成后westos1用户可以上传文件,但westos2和westos3不行