FTP,是文件传输协议的简称。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序,用户可以通过ftp把自己的电脑与世界各地所有运行ftp协议的服务器相连,访问服务器上的大量程序和信息。如果用户需要将文件从自己的主机发送到另一台主机上,可以使用ftp上传文件,同时用户也可以下载该服务器上的文件。那么像这样的服务该怎么部署呢?
一、ftp服务的部署
-
搭建yum源
搭建yum源,用来安装Linux系统中为我们提供的ftp服务软件,yum源的搭建可以参考之前的文章。
-
安装ftp服务软件
yum install vsftpd lftp -y ##安装软件
安装提供ftp服务的软件,开启该服务,用户可以登录并下载上传资源
安装好软件,我们需要开启vsftpd服务,并设置该服务为开机启动
- 防火墙设置
firewall-cmd --permanent --add-service=ftp ##添加ftp服务
firewall-cmd --reload ##重新加载
firewall-cmd --list-all ##查看详细信息
我们在设置时,有时候防火墙关闭不了,我们可以将ftp服务添加到防火墙中,就不用担心防火墙会影响数据的传输。注意,在添加服务后,需要进行重新加载,使服务更改生效。
- 内核级防火墙设置
getenforce ##内核级防火墙关闭
vim /etc/sysconfig/selinux ##设置内核级防火墙的状态
reboot ##设置后,重启,才能生效
在我们的系统中,还存在着内核防火墙,SElinux是基于内核开发出来的一种安全机制,被称之为内核级加强型防火墙,它有力的提升了系统的安全性。它的工作状态通常是强制状态,许多功能开关都是通过它来限制的。
我们可以通过【getenforce】命令查看防火墙的状态,本次实验,需要将selinux防火墙关闭。我们可以通过修改配置文件中火墙的状态来进行设定,要注意的是,内核级防火墙enforcing状态和disabled状态的相互转化,需要【reboot】重启系统,不然更改不会生效。
再次使用【getenforce】命令查看,内核级防火墙已经关闭
- 测试
我们可以在默认发布目录中,创建文件,方便判断匿名用户和本地用户登录进入的目录。匿名用户的默认发布目录为/var/ftp/pub,本地用户的发布目录为自己的家目录。
lftp 172.25.254.231 ##匿名用户登录
lftp 172.25.254.231 -u student ##本地用户登录
二、匿名用户权限的设定
对匿名用户和本地用户权限的设定我们需要通过以下两条命令进行设定,由于以下权限的设定都是在同一个配置文件中设定,我们就不过多重复该命令。
vim /etc/vsftpd/vsftpd.conf ##配置文件的修改
systemctl restart vsftp ##重启vsftp
- 是否允许匿名用户登录
anonymous_enable=YES ##允许匿名登录,匿名用户和本地用户都可以登录
anonymous_enable=NO ##不允许匿名登录,只有本地用户可以登录
在ftp部署成功后,通过测试,我们可以看到匿名用户和本地用户都可以登录ftp,我们要限制匿名用户的登录,可以将匿名用户的登录权限设置为不允许
我们可以看到,本地用户还是可以登录,由于对匿名用户登录权限的设置,它不允许登录。
注意:在完成每一次设定之后,重新做实验,需要对之前的设定进行恢复,不然会导致看不到实验效果
- 是否允许匿名用户可以上传
anon_upload_enable=YES ##匿名用户可以上传
我们会发现,修改之前,上传文件会报错(550服务未开启),开启了上传功能,但是系统仍会报错(553文件权限过小)我们需要修改文件的权限。
修改权限
方法一:
chgrp ftp /var/ftp/pub ##更改用户组
chmod 775 /var/ftp/pub ##匿名用户可以上传文件
方法二:
setfacl -m u:ftp:rwx /var/ftp/pub
注意:不能直接给发布目录/var/ftp修改权限,直接修改,会因权限过大,而不允许用户登录
- 是否允许匿名用户新建目录
anon_mkdir_write_enable=YES ##匿名用户可以建立目录
如果创建不了目录,可以修改权限文件权限(出现报错553)
- 是否允许匿名用户删除文件或目录
anon_other_write_enable=YES ##匿名用户可以删除目录和文件
注意:该项权限比较危险,要谨慎使用
注意:rm命令不能删除目录,删除目录需要用【rm -fr】命令
- 匿名用户身份的修改
chown_uploads=YES
chown_username=student ##用户身份修改,上传文件后,文件的所有人为student的id
默认情况下,匿名用户都是以ftp用户身份进行访问的,如果对身份有要求,可以通过以上命令进行身份的指定。
通过【id】命令,我们可以查看到每个用户所对应的uid和gid,在查看文件属性时,可以通过这些来判断用户是哪一个。
- 匿名用户上传文件权限修改
chown_upload_mode=0644 ##文件权限的修改,上传的文件权限由600变为644
- 匿名用户家目录的修改
anon_root=/home/student ##匿名用户家目录修改,该目录必须存在
我们不想让所有的匿名用户都查看/var/ftp/pub发布目录,可以为用户指定用户自己的家目录。注意,用户的家目录必须是存在的。
- 匿名用户默认权限的修改
anon_umask=002 ##匿名用户上传文件默认权限修改
- 匿名用户是否能够下载
anon_world_readable_only=NO ##匿名用户的下载,设定参数值为no表示匿名用户可以下载
开启该权限,可以使匿名用户下载共享的资源。如果有多个用户需要该资源,可以方便共享。
- 最大传输速率的修改
anon_max_rate=102400 ##最大上传速率
速率的修改,保证了系统的安全,如果传输速率过快,则系统的安全性能就相应的降低了。我们通过创建一个1G的文件,上传这个文件,我们可以看到上传速率达到200M/s,虽然方便了传输,但对系统来说则是极其不安全的。
我们需要对上传的最大速率进行修改,再次上传,传输速率明显下降。
- 最大链接数的设定
max_clients=2 ##最大链接数
服务器也会由于硬件、软件等限制,而容易损坏,我们需要限制服务端的连接个数,避免连接个数过多,导致服务器的负载运行,从而损伤设备。此外,连接个数的限制,大大的提高了系统的安全。
设置链接个数后,达到上限后,后登陆的用户则不能访问,需要等待其他用户退出登录后,才能使用。
三、本地用户权限设定
- 是否允许本地用户登录
local_enable=YES ##本地用户可以登录
local_enable=NO ##本地用户不可以登录
在设定之前本地用户可以登录,将本地用户登录的权限去掉,本地用户不能登录。
- 是否允许本地用户可写
write_enable=YES ##本地用户可写
write_enable=NO ##本地用户不可写
本地用户默认写的权利是具备的,如果不想让本地用户有写权利,就需要在配置文件中设置。
- 本地用户家目录的修改
local_root=/yang ##本地用户家目录的修改
- 本地用户默认权限修改
local_umask=000 ##本地用户上传文件权限
- 本地用户是否可以查看根目录/
默认情况下,本地用户可以查看根目录/中的内容,这样的操作是不太安全的,那么我们应该怎样,限制本地用户的权利?
chroot_local_user=YES ##所有用户被锁定到自己的家目录中
chmod u-w /home/*
配置文件中,将本地用户锁到自己的家目录中,则本地用户不能访问其他目录
用户白名单建立
chroot_local_user=YES ##所有用户被锁定到自己的家目录
chroot_list_enable=YES ##列表中的用户可以浏览/
chroot_list_file=/etc/vsftpd/chroot_list
vim /etc/vsftpd/chroot_list
建立用户名单,将所有用户锁到自己的家目录中,在名单中的用户,则被允许访问根目录。
用户黑名单建立
chroot_local_user=NO ##所有用户都可以访问/
chroot_list_enable=YES ##列表中的用户被锁定到家目录中
chroot_list_file=/etc/vsftpd/chroot_list
vim /etc/vsftpd/chroot_list
黑名单与白名单相反,所有用户都可以访问根目录,只有名单中的用户不能访问,这些用户只能在自己的家目录中操作。
- 限制本地用户登录
vim /etc/vsftpd/ftpusers ##用户黑名单
永久设定用户黑名单,在里面的用户,不管系统重启还是服务重启,都不被允许登录。
vim /etc/vsftpd/user_list ##用户临时黑名单
用户临时黑名单,名单中的用户不能登录系统,在系统重启后或服务重启后,可以登录。
- 用户白名单设定
userlist_deny=NO ##用户白名单
/etc/vsftpd/user_list ##参数设定,此文件变成用户白名单,只在名单中出现的用户可以登陆ftp
在临时黑名单中的用户,可以登录,名单之外的,不允许登录