欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

部署FTP服务器及其管理

程序员文章站 2022-05-18 21:25:53
...

1.FTP简介

文件传输协议(英文:File Transfer Protocol,缩写:FTP)是用于在网络上进行文件传输的一套标准协议,也是网络上常用的最老的网络协议之一,它使用客户/服务器模式。它属于网络传输协议的应用层。

FTP服务器的名称为vsftpd,它代表Very Secure File Transfer Protocol Damon。默认配置文件让anonymous用户(匿名用户)只能下载位于chroot目录中的内容。

/var/ftp/这意味着远程ftp客户端能以anonymous用户或ftp身份连接到服务器(无需密码),并从ftp服务器上的/var/ftp/目录下载文件(其本地ftp用户可以读取这些文件)

与大多数Internet服务一样,FTP也是一个客户机/服务器系统。用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出命令,服务器程序执行用户所发出的命令,并将执行的结果返回到客户机。比如说,用户发出一条命令,要求服务器向用户传送某一个文件的一份拷贝,服务器会响应这条命令,将指定文件送至用户的机器上。客户机程序代表用户接收到这个文件,将其存放在用户目录中。

匿名FTP

使用FTP时必须首先登录,在远程主机上获得相应的权限以后,方可下载或上传文件。也就是说,要想同哪一台计算机传送文件,就必须具有哪一台计算机的适当授权。换言之,除非有用户ID和口令,否则便无法传送文件。这种情况违背了Internet的开放性,Internet上的FTP主机何止千万,不可能要求每个用户在每一台主机上都拥有帐号。匿名FTP就是为解决这个问题而产生的。

当远程主机提供匿名FTP服务时,会指定某些目录向公众开放,允许匿名存取。系统中的其余目录则处于隐匿状态。作为一种安全措施,大多数匿名FTP主机都允许用户从其下载文件,而不允许用户向其上传文件,也就是说,用户可将匿名FTP主机上的所有文件全部拷贝到自己的机器上,但不能将自己机器上的任何一个文件拷贝至匿名FTP主机上。即使有些匿名FTP主机确实允许用户上传文件,用户也只能将文件上传至某一指定上传目录中。随后,系统管理员会去检查这些文件,他会将这些文件移至另一个公共下载目录中,供其他用户下载,利用这种方式,远程主机的用户得到了保护,避免了有人上传有问题的文件,如带病毒的文件。

2.部署ftp服务器

1)部署前我们需要先关闭selinux【内核级加强型火墙】

vim /etc/sysconfig/selinux 		##disabled
getenforce			##查看状态是否改变
reboot				##重启系统

部署FTP服务器及其管理
部署FTP服务器及其管理
2)安装并开启ftp服务

yum install vsftpd -y 	##需提前搭建好yum源,详情可参考作者前面关于yum源搭建的博客
systemctl start vsftpd
systemctl enable vsftpd		##设置服务开机自启
systemctl status vsftpd

部署FTP服务器及其管理
部署FTP服务器及其管理

yum install lftp -y

部署FTP服务器及其管理

3)设置火墙永久允许ftp服务

方法一:命令设置

firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload

部署FTP服务器及其管理
方法二:图形设置

![firewall-config](https://img-blog.csdnimg.cn/2019021401024415.png)

在下图中选择【Permanent】,在【Options】中选择第一项
部署FTP服务器及其管理

firewall-cmd --list-all			##查看是否设置成功

部署FTP服务器及其管理
4)测试服务

lftp 172.25.254.106
lftp 172.25.254.106:~> ls 

部署FTP服务器及其管理

4.ftp服务的基本信息

软件安装包:vsftpd

默认发布目录:/var/ftp

协议接口:21/tcp

服务配置文件: /etc/vsftpd/vsftpd.conf

报错id解析:

id 含义
500 文件系统权限过大
530 用户认证失败
550 服务功能未开放
553 本地文件系统权限过小

配置文件内容解释

vim  /etc/vsftpd/vsftpd.conf ------>配置文件

部署FTP服务器及其管理

命令 功能
anonymous_enable=YES/NO 匿名用户是否可以登陆
local_enable=YES/NO 本地用户是否可以登陆
write_enable=YES ftp是否对登陆用户可写
anon_upload_enable=YES/NO 匿名用户是否可以上传
anon_root=/direcotry 匿名用户家目录修改
anon_mkdir_write_enable=YES 匿名用户建立目录
anon_other_write_enable=YES 匿名用户删除
anon_umask=xxx 匿名用户上传文件默认权限修改
anon_world_readable_only=YES/NO 匿名用户下载,设定参数为NO表示匿名用户可以下载
chown_uploads=YES
chown_username=student 匿名用户使用的用户身份修改
anon_max_rate=102400 最大上传速率

下面我们将用实验来一一验证

@@@@匿名用户相关设定@@@@

1)设定匿名用户是否可以登陆

如下图所示,能成功执行【ls】命令即可视为登陆成功
部署FTP服务器及其管理

vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO			##设定匿名用户不可登陆
systemctl restart vsftpd	##重启服务

部署FTP服务器及其管理
2)设定ftp对本地用户的限制

local_enable=YES/NO  ##本地用户是否可以登录

修改前
部署FTP服务器及其管理
修改后——要重启服务
部署FTP服务器及其管理

3)修改匿名用户上传权限

关闭时,出现550报错——功能未开放

write_enable=NO
anon_upload_enable=NO

部署FTP服务器及其管理
打开权限后——匿名用户上传文件成功

write_enable=YES
anon_upload_enable=YES
chgrp ftp /var/ftp/pub
chmod 775 /var/ftp/pub

部署FTP服务器及其管理
4)匿名用户家目录修改

anon_root=/mnt		##配置文件里没有该信息,需要自行添加设置

部署FTP服务器及其管理
部署FTP服务器及其管理
5)匿名用户上传文件默认权限修改:

anon_umask=022		##配置文件里没有该信息,需要自行添加设置

修改前
部署FTP服务器及其管理
修改后——之前上传的文件权限和修改后上传的文件权限不同
部署FTP服务器及其管理
6)匿名用户建立文件

部署FTP服务器及其管理
修改文件后

anon_mkdir_write_enable=YES

部署FTP服务器及其管理
7)匿名用户下载==

anon_world_readable_only=YESdd|NO  ##no表示匿名用户可以下载,配置文件里没有该信息,需要自行添加设置

开启前
部署FTP服务器及其管理
开启后
部署FTP服务器及其管理
8)匿名用户删除本地文件权限设置

anon_other_write_enable=YES|NO		##配置文件里没有该信息,需要自行添加设置

部署FTP服务器及其管理
开启后

部署FTP服务器及其管理
9)匿名用户时用的用户身份修改

chown_uploads=YES
chown_username=student
chown_upload_mode=0777			##配置文件里没有该信息,需要自行添加设置

部署FTP服务器及其管理
部署FTP服务器及其管理
9)设定匿名用户最大上传速率

anon_max_rate=102400		##102400大概200KB的速度

部署FTP服务器及其管理
10)能够最大链接客户端的用户数

max_clients=2			##一次最多连接2个用户

部署FTP服务器及其管理

@@@@本地用户相关设定@@@@

1)登陆权限和写权限

local_enable=YES/NO  ##本地用户登录限制
write_enable=YES/NO  ##本地用户写权限限制

设置前:执行删除操作未成功
部署FTP服务器及其管理

修改后:成功执行删除操作

部署FTP服务器及其管理
2)本地用户家目录修改

local_root=/dir			##配置文件里没有该信息需自行添加

部署FTP服务器及其管理
3)本地用户上传文件权限

 local_umask=777

修改前
部署FTP服务器及其管理
修改后

部署FTP服务器及其管理

4)限制本地用户浏览/目录

chroot_local_user=YES      ##所有用户被锁定到自己的家目录中  

修改前
部署FTP服务器及其管理
修改后

部署FTP服务器及其管理

用户不能有写的权限否则会报错500

chmod u-w  /home/*

部署FTP服务器及其管理

5)本地用户黑名单的建立

chroot_local_user=NO                         ##NO表示下面的路径为黑名单
chroot_list_enable=YES                       ##表示开启黑白名单功能
chroot_list_file=/etc/vsftpd/chroot_list     ##黑名单路径

部署FTP服务器及其管理

部署FTP服务器及其管理
6)本地用户白名单的建立

chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

部署FTP服务器及其管理
修改后:不在白名单中的用户无法正常登陆
部署FTP服务器及其管理

7)限制本地用户登陆

/etc/vsftpd/ftpusers          ##永久黑名单

部署FTP服务器及其管理
/etc/vsftpd/user_list ##临时黑名单
部署FTP服务器及其管理

vim /etc/vsftpd/vsftpd.conf
userlist_deny=NO          ##临时黑名单变为白名单

测试
部署FTP服务器及其管理

3.ftp虚拟账户设定

1.创建虚拟用户身份

1)建立虚拟用户名单

vim   /etc/vsftpd/userfile			##文件名随意

部署FTP服务器及其管理

2)将其用hash加密变为db

db_load  -T -t  hash  -f  /etc/vsftpd/userfile /etc/vsftpd/userfile.db

部署FTP服务器及其管理
3)编写一个新的认证文件

vim  /etc/pam.d/ftpuser		##名称随便写
account  required   pam_userdb.so    db=/etc/vsftpd/userfile
帐号       认证方式          认证插件               db文件
auth     required   pam_userdb.so    db=/etc/vsftpd/userfile
认证       认证方式          认证插件               db文件

部署FTP服务器及其管理

4)改动主配置文件

vim /etc/vsftpd/vsftpd.conf
pam_service_name=ftpuser       ##认证方式(改变认证方式后之前的用户无法登录,可将其之前的认证文件	加入新的文件中即可)
guest_enable=YES              ##打开虚拟用户功能
guest_username=ftp            ##给虚拟用户一个身份

部署FTP服务器及其管理
5)重启ftp服务

systemctl  restart  vsftpd

2.虚拟用户指定家目录

1)建立家目录内容

mkdir  /var/ftpuserdir/westos{1..3}  -p		##【-p】表示同步权限
mkdir  /var/ftpuserdir/westos{1..3}/pub  
mkdir  /var/ftpuserdir/westos1/snow1
mkdir  /var/ftpuserdir/westos2/snow2 
mkdir  /var/ftpuserdir/westos3/snow3

部署FTP服务器及其管理

2)改写主配置文件

local_root=/var/ftpuserdir/$USER               ##登陆后查看自己的家目录
user_sub_token=$USER                           ##认证shell内的$

部署FTP服务器及其管理

3)重启ftp服务

systemctl  restart  vsftpd

测试:

虚拟用户不存在
部署FTP服务器及其管理
登陆
部署FTP服务器及其管理

3.虚拟帐户配置独立的功能

1)给/pub相应的权限

ls  -lr   /var/ftpuserdir/ftpuser{1..3}  
chmod  775   /var/ftpuserdir/westos*/pub
chgrp  ftp   /var/ftpuserdir/westos*/pub

部署FTP服务器及其管理
下图中可见 /var/ftpuserdir/westos*文件所属组以已更改,且登陆后文件所属组ID为50,查看可知为ftp

部署FTP服务器及其管理

2)建立新的一个配置文件

mkdir  -p /etc/vsftpd/user_config
vim  /etc/vsftpd/user_config/westos1		##westos1为新建文件,文件名随意

此文件设定配置文件中的参数,默认此文件优先级高
部署FTP服务器及其管理

3)改写主配置文件,重启服务

vim /etc/vsftpd/vsftpd.conf           ##设置虚拟用户独立配置路径

部署FTP服务器及其管理
注意关闭此权限

部署FTP服务器及其管理

测试:仅有westos1上传文件成功

部署FTP服务器及其管理