1、FTP简介:
在FTP的使用当中,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)。
"下载"文件就是从远程主机拷贝文件至自己的计算机上;
"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。
用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。
FTP服务器默认使用TCP协议的20、21端口与客户端进行通信。
20端口用于建立数据连接,并传输文件数据;
21端口用于建立控制连接,并传输FTP控制命令。
根据FTP服务器在建立数据连接过程中的主、被动关系,FTP数据连接分为主动模式和被动模式:
主动模式:服务器主动发起数据连接。首先由客户端向服务端的21端口建立FTP控制连接,当需要传输数据时,客户端以PORT命令告知服务器“我打开了某端口,你过来连接我”,于是服务器从20端口向客户端的该端口发送请求并建立数据连接。
被动模式:服务器被动等待数据连接。如果客户机所在网络的防火墙禁止主动模式连接,通常会使用被动模式。首先由客户端向服务端21端口建立FTP控制连接,当需要传输数据时,服务器以PASV命令告知客户端“我打开了某个端口,你过来连接我”,于是客户端向服务器的该端口(非20)发送请求并建立数据连接。
FTP用户类型
匿名用户:anonymous 或 ftp,提供任意密码都可以通过服务器的验证,一般用于提供公共文件的下载。
本地用户:直接使用本机的系统用户,账号名称、密码等信息保存在 passwd、shadow 文件中。
虚拟用户: 使用独立的账号/密码数据文件,将FTP账户与系统账户的关联性降至最低,可以为系统提供更好的安全性。
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:开放匿名用户其他写入权
local_umask=022:本地用户所上传文件的权限掩码
local_root=/var/ftp:设置本地用户的 FTP 根目录
local_enable=YES:本地用户可以登陆
write_enable=YES:本地用户可写
anon_world_readable_only=YES:匿名用户可以下载
anon_other_write_enable=YES:匿名用户可以删除
anon_mkdir_write_enable=YES:匿名用户可以新建目录
2、搭建过程
1、实验环境:
搭建好yum源、关闭selinux
server1服务器端:172.25.1.1
server2客户端:172.25.1.2
注意:lftp和vsftpd不一样,vsftpd是服务端需要安装的服务,lftp是客户端需要安装的服务
可能的报错:
500 文件系统权限过大
530 用户认证失败
550 服务功能未开放
553 本地文件系统权限过小
2、服务器端:
[root@server1 ~]# yum install -y vsftpd
[root@server1 ~]#systemctl start vsftpd
[root@server1 ~]#systemctl enable vsftpd
若此时防火墙处于开机状态,则:
[root@server1 ~]#firewall-cmd --permanent --add-server=ftp //让防火墙允许ftp服务通过
[root@server1 ~]#firewall-cmd --reload //重新加载防火墙
[root@server1 ~]#cd /var/ftp/pub/ //ftp的默认发布目录,可以给目录下随便下载点东西
1.设置匿名用户上传
[root@server1 pub]# vim /etc/vsftpd/vsftpd.conf //ftp的配置文件
anon_upload_enable=YES //匿名用户可上传
write_enable=YES //本地用户可写
[root@server1 ~]# systemctl restart vsftpd
[root@server1 pub]# chmod 775 /var/ftp/pub
[root@server1 pub]# chgrp ftp /var/ftp/pub
3、客户端下载服务lftp
[root@server2 ~]# yum install -y lftp
[root@server2 ~]# lftp 172.25.1.1 //使用lftp连接时默认进入的是服务器端的/var/ftp/
可以看出已经上传成功,应该注意:上传文件的时候必须在pub目录下进行,匿名用户是否可以上传的前提是本地用户可写
[root@server1 pub]# ls //此时可以在服务器端看到passwd文件已经上传到服务器
passwd zabbix
2.匿名用户上传速率的设置
[root@server1 pub]# vim /etc/vsftpd/vsftpd.conf
anon_max_rate=102400 将速率设置为100K
[root@server1 pub]# systemctl restart vsftpd
对比不设置上传速率与设置之后的区别,可以看出上传速率明显受到限制
3.umask的设置
默认本地文件的权限为022
local_umask=022
[root@server1 pub]# vim /etc/vsftpd/vsftpd.conf
[root@server1 pub]# systemctl restart vsftpd
修改之后是:
修改后的文件权限已经被更改
3.限制本地用户浏览目录,即只有登陆服务器端的用户(本地用户)才可进行访问
[root@server1 pub]# vim /etc/vsftpd/vsftpd.conf
[root@server1 pub]# systemctl restart vsftpd
服务器端拥有用户student,密码为redhat ;没有用户linux
客户端拥有用户linux,密码为redhat
此时,我们以linux进行登陆
[root@server2 ~]# lftp 172.25.1.1 -u linux //可以看出访问被拒
若用student进行登陆:
[root@server2 ~]# lftp 172.25.1.1 -u student //可以看出用服务器端的本地用户进行登陆可以访问
4.用户黑白名单的设定
首先是黑名单的设定(锁定在家目录中)
[root@server1 pub]# vim /etc/vsftpd/vsftpd.conf
[root@server1 pub]# vim /etc/vsftpd/chroot_list
[root@server1 pub]# systemctl restart vsftpd
刚才student用户是可以进行访问的
[root@server2 ~]# lftp 172.25.1.1 -u student //可以看出此时已经无法访问根目录了
其次是白名单的设定
[root@server1 pub]# vim /etc/vsftpd/vsftpd.conf
[root@server1 pub]# systemctl restart vsftpd
[root@server2 ~]# lftp 172.25.1.1 -u student
[root@server2 ~]# lftp 172.25.1.1 -u linux //可以看出此时是可以访问的
除白名单student外其他用户均不可进行访问
5.用户黑白名单的永久设定
- 设置永久黑名单
[root@server1 pub]# vim /etc/vsftpd/ftpusers
[root@server2 ~]# lftp 172.25.1.1 -u student //登陆失败
- 设置黑名单让其无法登陆
[root@server1 pub]# vim /etc/vsftpd/vsftpd.conf
[root@server1 pub]# systemctl restart vsftpd
设置user_list_deny为YES时,表示userlist为黑名单
[root@server1 pub]# vim /etc/vsftpd/user_list //在配置文件中添加westos用户,并用命令useradd westos创建用户westos
westos
[root@server2 ~]# lftp 172.25.1.1 -u westos //因为westos在黑名单中,故登陆不成功
- 设置白名单
[root@server1 pub]# vim /etc/vsftpd/vsftpd.conf
[root@server1 pub]# systemctl restart vsftpd
3、ftp虚拟用户的建立及设定
- 创建虚拟帐号身份
[root@server1 pub]# yum install pam
[root@server1 ftp]# cd /etc/vsftpd/
[root@server1 vsftpd]# vim userdb //编辑信息,文件名自定义
[root@server1 vsftpd]# db_load -T -t hash -f userdb userdb.db //给用户信息文件进行加密
//其中hash为加密方式,userdb为被加密文件,userdb.db为加密后生成的文件
[root@server1 vsftpd]# ls //可以看见已经经过加密生成了密文文件 userdb.db
[root@server1 vsftpd]# vim ftpuser //文件名自定,用来设定用户登陆认证方式
account required pam_userdb.so db=/etc/vsftpd/userdb
auth required pam_userdb.so db=/etc/vsftpd/userdb
[root@server1 vsftpd]# vim /etc/vsftpd/vsftpd.conf
[root@server1 vsftpd]# systemctl restart vsftpd
[root@server2 ~]# lftp 172.25.1.1 -u user1 //登陆成功