首页 > 技术文章 > 自学linux——18.FTP服务器的搭建

Ghost-8983 2020-12-01 23:14 原文

                                                                  Centos7下FTP服务器的搭建

一、FTP的作用

文件传输协议(File Transfer Protocol,FTP),是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用 20、21 号端口,其中20端口是数据端口用于进行数据传输,21端口为命令端口,用于接收客户端发出的相关FTP命令和参数

FTP协议工作模式有两种:主动模式和被动模式,其中被动模式是默认的工作模式

A.主动模式:FTP 服务器主动向客户端发起连接请求

B.被动模式:FTP 服务器等待客户端发起连接请求

由于FTP一般部署在企业内网,如果开启并配置了防火墙,有时候需要将FTP的工作模式设置为主动模式,才可以传输数据

二、vsftpd(FTP守护进程)三种认证模式

1.匿名开放模式:任何人都可以无需密码验证而直接登录到FTP服务器

2.本地用户模式:是通过Linux系统本地的账户密码信息进行认证的模式

3.虚拟用户模式:需要为FTP服务单独 建立用户数据库文件,虚拟出用来进行口令验证的账户信息,而这些账户信息在 服务器系统中实际上是不存在的,仅供 FTP 服务程序进行认证使用。是三种模式中最安全的一种认证模式,用的最多

三、vsftpd.conf的主要参数(根据实际情况来进行配置权限)

 

四、搭建流程

1.服务器端vsftpd的安装

①    通过rpm命令查看是否已经安装过vsftpd,如果没有安装则通过yum命令安装    

rpm  - q  vsftpd              #查看是否安装vsftpd                      
yum  -y  install  vsftpd      #下载vsftpd

 

安装完成后,是否成功查看配置文件/etc/vsftpd/

rpm  -q  vsftpd             #查看是否安装vsftpd 
ll /etc/vsftpd              #查看配置文件

 2.匹配认证模式

(1)匿名开放模式:匿名用户可以上传、下载、创建、删除、更名文件的权限

A.服务器端:

①    把主配置文件备份,删除注释的参数,再重定向将其覆盖到主配置文件

cat /etc/vsftpd/vsftpd.conf          #查看配置文件(注释看多不好看,把注释删除)
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak  #配置文件备份
ll  /etc/vsftpd                      #查看文件(夹)
grep -v "#" /etc/vsftpd/vsftpd.conf.bak >/etc/vsftpd/vsftpd.conf   #删除注释的参数,再重定向将其覆盖到配置文件
cat /etc/vsftpd/vsftpd.conf          #查看配置文件(已没有注释参数)

 ②写入相应的权限

vim /etc/vsftpd/vsftpd.conf       #编辑配置文件
anon_umask=022                    #匿名用户上传文件的umask的值
anon_upload_enable=YES            #允许匿名用户上传文件
anon_mkdir_write_enable=YES       #允许匿名用户创建目录
anon_other_write_enable=YES       #允许匿名用户其他的权限(重命名,删除)

③重启vsftpd服务,并添加到开机启动

systemctl restart vsftpd        #重启服务
systemctl enable vsftpd         #添加到开机启动

④在/var/ftp/pub/下创建文件

cd /var/ftp/pub/       #切换路径
touch  文件名   #创建文件

⑤清除防火墙的默认策略(或直接关掉防火墙)

systemctl stop firewalld           #关闭防火墙    
yum -y install iptables-services   #下载iptables
systemctl enable iptables          #开启自启
systemctl start  iptables          #启动iptables
iptables -F                        #清除策略
service iptables save              #保存配置

若直接关闭防火墙则不需要以上的操作,因为实际工作当中为了安全防火墙是开启的,而防火墙默认禁止了ftp传输的端口,因此清除防火墙的默认策略,centos7中没有service iptables save指令来保存防火墙的规则,所有采用以上的方式来实现

⑥修改ftp用户的权限

ll -d /var/ftp/pub                  #查看pub目录
chown -Rf ftp /var/ftp/pub          #改变ftp用户的权限
ll -d /var/ftp/pub                  #查看pub目录

通过查看pub目录发现只有root用户才有写入的权限,所以直接把pub目录所有者改为ftp用户,让ftp用户也拥有写入的权限

⑦修改ftp域相关的规则(或直接关掉SELinux,方法见https://www.cnblogs.com/Ghost-7788521/p/14061244.html

getenforce                        #查看SELinux的状态
getsebool -a | grep ftp           #查看ftp的规则
setsebool -P ftpd_full_access=on  #修改ftpd_full_access为永久打开

实际工作中SELinux一般都是开启的,当SELinux状态为开启,查看与ftp域相关的策略,修改当中的规则

B.客户机端:

①通过rpm命令查看是否已经安装过ftp,如果没有安装则通过yum命令安装  

rpm -q ftp             #查看是否安装ftp
yum -y install ftp     #下载ftp

②用ftp连接下载文件

ftp  服务器地址     #连接服务器端

匿名开放认证模式下,账户统一为 anonymous,密码为空,进入后

ls               #查看文件/目录
cd  pud          #切换路径
ls               #查看文件/目录
get  文件名       #下载文件
quit(exit)      #退出
ll               #可以查看到刚下载的目录

③用ftp连接创建目录

ftp  服务器地址      #连接服务器端
anonymous  用户名  密码为空
mkdir  文件名        #创建目录
ls                  #查看刚创建的目录
rmdir 文件名 #删除目录

回服务器端,用 ll  /var/ftp/pub可以查看刚从客户机端创建的目录

(2)本地用户模式

 A.服务器端:

①关闭匿名模式,开启本地匿用户模式,并添加相应的参数

anonymous_enable=NO            #关闭匿名模式登录
local_enable=YES               #允许本地用户登录
write_enable=YES               #可写权限
local_umask=022                #本地用户模式创建文件的 umask 值
userlist_enable=YES            #启用“禁止用户名单”  
userlist_deny=YES              #开启用户作用名单文件功能

vsfftpd服务默认开启了匿名模式和本地用户模式,如果没有手动配置一下

②重启vsftpd服务

systemctl restart vsftpd       #重启
systemctl enable vsftpd        #自启

③创建用户设置密码

useradd  用户名    #添加用户
passwd   用户名    #给用户设置密码

输入密码指令后,会提示输入密码和确认密码

B.客户机端

用ftp连接服务器后,用刚创建的用户密码登录就可以进行操作。

注意:

a.本地用户模式不用修改用户的权限,因为连接后默认访问的是该用户的家目录(/home/ftptest)

b.该模式下默认禁止root和大部分系统用户登录,如果非登不可,就在服务器端删除/etc/vsftpd/user_list和/etc/vsftpd/ftpusers路径下的同个用户名

(3)虚拟用户模式

 A.服务器端

①在vuser.list中创建用户信息

cd /etc/vsftpd/      #切换路径
vim vuser.list       #创建用户信息
用户1
密码
用户2
密码

②转换用户文件格式(db_load命令)

db_load                #查看是否安装此命令(若有显示如下)
usage: db_load [-nTV] [-c name=value] [-f file]
        [-h home] [-P password] [-t btree | hash | recno | queue] db_file
usage: db_load -r lsn | fileid [-h home] [-P password] db_file
yum -y install db4      #若没有则下载(有就略过此步)
db_load -T -t hash -f vuser.list vuser.db   #明文的vuser.list文件转换为了vuser.db格式的文件
file vuser.db           #看是否转换成功(成功如下)
vuser.db: Berkeley DB (Hash, version 9, native byte-order)
ll vuser.db            #查看
chmod 600 vuser.db     #降低该文件的权限
rm -rf vuser.list      #删除明文文件

③创建PAM文件

vim /etc/pam.d/vsftpd.vu      #创建并编辑.vu文件
auth required pam_userdb.so db=/etc/vsftpd/vuser     #db参数
account required pam_userdb.so db=/etc/vsftpd/vuser  #db参数

.vu的文件名可以任意,用于虚拟用户认证,db参数为上一步db_load命令生成的数据库文件的路径,不用写后缀名

④创建本地用户来映射虚拟用户

useradd -d /var/ftpdir -s /sbin/nologin virtual   #创建虚拟用户的映射账户
chmod -Rf 755 /var/ftpdir/       #修改权限

创建本地用户来映射虚拟用户,避免 系统无法处理虚拟用户所创建文件的属性权限

⑤添加虚拟用户模式的参数

anonymous_enable=NO      #禁止匿名开放模式
local_enable=YES         #允许本地用户模式
guest_enable=YES         #开启虚拟用户模式
guest_username=virtual   #指定虚拟用户账户
pam_service_name=vsftpd.vu(将vsftpd修改为vsftpd.vu)  #指定PAM文件,存放于/etc/pam.d/目录下
allow_writeable_chroot=YES    #允许对禁锢的FTP根目录执行写入操作,而且不拒绝用户的登录请求

在本地模式的基础上添加虚拟用户模式的参数,必须关闭匿名模式,开启本地模式,且修改pam_service_name参数为vsftpd.vu

⑥设置虚拟用户的权限

mkdir /etc/vsftpd/a(任意)      #创建用户目录,此目录对应之前创建的用户
cd a/                           #切换到创建的目录路径
touch 用户1(默认查看权限)        #创建之前一样的用户并写入相应的权限    
vim  用户2                      #创建之前一样的用户并写入相应的权限    
anon_upload_enable=YES          #上传权限
anon_mkdir_write_enable=YES     #写的权限
anon_other_write_enable=YES     #重命名,删除权限

vim /etc/vsftpd/vsftpd.conf    #定义虚拟用户不同权限的配置文件所存放的路径
user_config_dir=/etc/vsftpd/a(文件中添加)

 ⑦重启vsftpd服务

systemctl restart vsftpd

B.客户机端

ftp连接用虚拟用户1和用户2登录进行测试了,实现各自之前设置的权限即可

 

总结:

1.涉及到服务的配置,要考虑防火墙和SELinux的因素

2.配置了服务,都要加入开机启动中,让其每次重启自动生效

3.出现问题从用户权限、目录权限、网络防火墙、SELinux服务几个方面去考虑

推荐阅读