一、什么是ftp?
文件传输协议(英文:File Transfer Protocol,缩写:FTP)是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。它属于网络传输协议的应用层。文件传送(file transfer)和文件访问(file access)之间的区别在于:前者由FTP提供,后者由如NFS等应用系统提供。
二、ftp协议提供的软件
在rhel中是vsftpd软件。
vsftpt提供三种远程的登录方式:
(1)匿名登录方式:不需要用户名和密码就可以登录到服务器上
(2)本地用户方式:需要用户名和密码才能登录,而且这些用户必须为系统已经存在的用户
(3)虚拟用户:同样需要用户名和密码才能登录,但是这些用户不是系统存在的用户
三、部署ftp服务
1、下载vsftpd及lftp软件
yum install vsftpd lftp -y ##安装服务端vsftpd和客户端lftp的应用软件
systemctl start vsftpd ##开启服务
systemctl enable vsftpd ##设置开机自启动
2、将ftp设置为防火墙允许的应用。
1、图形界面处理方法
systemctl start firewalld
firewall-config ##防火墙策略,将ftp作为防火墙允许访问的应用
进入此界面后作以下三件事:
(1)Configuration选择Permanent
(2)在pub选项里勾选ftp
(3)Option选择Reload Firewalld
firewall-cmd --list-all ##显示防火墙信息
分析:service一行显示防火墙不阻拦的应用列表。
2、命令设置
firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload
3、ftp服务的基本信息
ftp服务的基本信息
软件安装包: vsftpd
默认发布目录: /var/ftp
协议接口: 21/tcp
服务配置文件: /etc/vsftpd/vsftpd.conf
报错id解析:
500 ##文件系统权限过大
530 ##用户认证失败
550 ##服务本身功能未开放
553 ##本地文件系统权限过小
4、将内核级别的防火墙selinux 关闭。
vim /etc/sysconfig/selinux
改为disabled
然后重启。
重启后出入getenforce命令查看更改是否生效。
四、vsftpd服务的配置参数
注意:每次更改配置文件都要重启服务让更改生效。
1、匿名用户
1)匿名用户是否可以登录
anonymous_enable=YES|NO ##匿名用户是否可以登陆
示例:
anonymous_enable=YES
anonymous_enable=NO
2)匿名用户是否可以上传文件
write_enable=YES ##ftp是否对登录用户可写
anon_upload_enable=YES ##是否允许匿名用户上传
chgrp ftp /var/ftp/pub ##更改pub目录的所有组为ftp
chmod 775 /var/ftp/pub ##更改pub目录权限
分析:默认匿名用户登录时采用的是系统的ftp用户身份,将pub目录的权限改为所有组为ftp并且对所有组可写。
anon_upload_enable=YES
anon_upload_enable=NO
3)匿名用户家目录修改
anon_root=/dir ##将匿名用户的家目录改为指定目录
在/mnt/下创建三个文件后,将家目录更改为/mnt/
4)匿名用户上传文件默认权限修改
anonymous_enable=YES
anon_upload_enable=YES
anon_umask=xxx
示例:
5)匿名用户是否可以建立目录
write_enable=YES
anon_mkdir_write_enable=YES|NO
示例:
6)匿名用户是否可以下载
anon_world_readable_only=YES|NO ##设定参数值为NO表示你名用户可以下载
示例:
7)匿名用户是否可以删除文件
anon_other_write_enable=YES|NO
示例:
8)匿名用户使用的用户身份修改
chown_uploads=YES
chown_username=student
chown_upload_mode=0644
示例:
分析: 我们更改了匿名用户身份为student用户后,上传文件查看其所有者id为1000,系统上查看student用户id后,确实为1000。说明匿名用户上传文件时的确是student用户身份。
9)最大上传速率
anon_max_rate=102400 ##用户的最大上传速率为1M。
示例:
更改前:
更改后:
10)最大连接数
max_clients=2 ##最大允许2台客户机连接
示例:
max_clients=1
第一台客户机连接:
第二台客户机连接:
2、本地用户设定
1)本地用户是否可以登录
local_enable=YES|NO ##本地用户是否可以登陆
示例:
local_enable=YES
local_enable=NO
2)本地用户家目录修改
local_root=/dir
示例:
首先,我们创建/redhat目录,并在这个目录下创建fire文件,更改本地用户家目录为/redhat。
分析:用户的家目录被唯一指定了。
3)本地用户上传文件权限
local_umask=xxx ##这里是系统回收的权限
4)限制本地用户浏览目录,将所有用户被锁定到自己家目录中
chroot_local_user=YES ##锁定用户
chmod u-w /home/* ##减小权限
为锁定之前:
分析:普通用户可以查看到根目录和其他目录的所有文件,这对系统来说并不安全。
锁定后:
分析:锁定后用户切换不到其他目录,只能在自己的家目录进行操作。系统安全大大提高。
5)本地用户的锁定家目录黑名单建立
1、更改配置文件。
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
2、建立黑名单
vim /etc/vsftpd/chroot_list
黑名单用户student登录情况:
分析:在黑名单的用户被锁定在自己的家目录。
其他用户登录的情况:
分析:不在黑名单的用户仍可以查看其他目录及文件的信息。
6)本地用户的锁定家目录白名单建立
1、更改配置文件。
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
2、建立白名单
vim /etc/vsftpd/chroot_list
这里可能大家会疑惑,好像白名单和黑名单用的同一个文件呢?
是的,是同一个文件,只需要改变配置文件的参数,黑名单就变成了白名单。
白名单用户student用户登录情况:
分析:白名单建立后,在名单上的用户可以访问其他目录和文件。
其他用户登录的情况:
分析:白名单建立后,默认不在白名单的用户都不能访问其他目录及文件。
7)限制本地用户登录黑名单。
vim /etc/vsftpd/ftpusers ##用户永久黑名单
vim /etc/vsftpd/user_list ##用户临时黑名单
永久黑名单:
示例:
vim /etc/vsftpd/ftpusers
分析:黑名单用户student不能成功登录,但是其他用户可以正常登录。
临时黑名单:
vim /etc/vsftpd/user_list
分析:这里在临时黑名单写入用户名称,student也不能正常登录,其他用户可以登录,这里可能大家会有疑问,为什么叫临时黑名单,因为你更改配置文件一些参数后,临时黑名单会变为白名单!!!
用户白名单设定
userlist_deny=NO ##参数设定,此文件变为用户白名单,只在名单中出现的用户可以登陆ftp
示例:
分析:用户临时黑名单经过更改配置文件后,成为了白名单。大家注意,/etc/vsftpd/ftpusers为永久黑名单,也就是说同在永久黑名单和白名单的用户,不可以登录系统。
3、虚拟用户的设定
1、创建虚拟帐号身份
vim /etc/vsftpd/userfile ##保存密码的文件,文件名称任意
redhat1
123
redhat2
123
redhat3
123
2、对保存密码的文件进行hash加密
db_load -T -t hash -f /etc/vsftpd/userfile /etc/vsftpd/userfile.db ##对保存密码的文件进行hash加密:/etc/vsftpd/userfile文件
3)建立对用户身份进行检查的文件。
vim /etc/pam.d/ftpauth ##对用户身份进行检查的文件,文件名称任意
文件内容:
account required pam_userdb.so db=/etc/vsftpd/userfile
账户 必须满足 ##使用此插件 查看此文件(已加密文件,但不用加后缀.db)
auth required pam_userdb.so db=/etc/vsftpd/userfile
认证
4)更改配置文件相关参数
vim /etc/vsftpd/vsftpd.conf
pam_service_name=ftpauth ##使用哪个文件来检查/etc/pam.d/ftpauth
userlist_enable=YES ##开启列表
tcp_wrappers=YES
guest_enable=YES ##开启虚拟
guest_username=ftp ##虚拟帐号身份指定
测试:
分析:虚拟用户建立成功后,默认本地用户不能登录。大家可以看到这里所有的虚拟用户的家目录都是匿名用户的默认目录,那么能否把每个虚拟帐号的家目录都独立起来呢?答案当然是,不信往下看!
5)虚拟帐号家目录独立设定
1、更改配置文件
vim /etc/vsftpd/vsftpd.conf
local_root=/var/ftpuserdir/$USER ##设定家目录为用户名
user_sub_token=$USER ##使$USER在此文件中可用
2、建立虚拟用户家目录。
mkdir /var/ftpuserdir/redhat{1..3} -p ##虚拟用户创建家目录
touch /var/ftpuserdir/redhat1/file1
touch /var/ftpuserdir/redhat2/filet2
touch /var/ftpuserdir/redhat3/file3
chmod u-w /var/ftpuserdir/*
测试:
6)指定某个虚拟用户的配置文件
vim /etc/vsftpd/vsftpd.conf ##修改配置文件
user_config_dir=/etc/vsftpd/userconf ##指定虚拟用户的单独配置文件的目录
mkdir -p /etc/vsftpd/userconf
vim /etc/vsftpd/userconf/ftpuser1 ##必须与自己的用户名相同
在此文件中设定配置文件中的所有参数,此文件的优先级高
效果: