linux之FTP服务搭建 ( ftp文件传输协议 VSFTPd虚拟用户)

时间:2021-02-03 19:31:24

FTP服务搭建 配置实验之前关闭防火墙

iptables -F

iptables -X

iptables -Z

systemctl stop firewalld

setenforce 0

1.ftp简介 功能 端口 工作模式  协议tcp

功能:

FTP是File Transfer Protocol(文件传输协议)的缩写

Unix/Linux系统中常用的免费FTP服务器软件主要是VSFTP。

 

端口:

主动模式:TCP  21(连接)  20(数据)               tcp三次握手协议

被动模式:TCP  21(连接)  动态端口(数据)

21端口命令连接  是用来  接传输控制命令

20端口是          传输数据,下载文件

 

 

FTP两种工作模式

主动 和被动是对vsftp服务端而言的        vsftpd是进程    vsftp是服务

主动是服务端主动去连接, 主动使用端口是21端口  是命令连接  是用来传输控制命令

20端口是            传输数据,下载文件

协议是tcp

被动是服务端被动被连接  ,在传输之前, 控制命令传输也是21端口   但是数据传输不是20端口了  是动态端口(不确定的端口 ,但是有规定的范围)

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

防火墙导致主动模式不成功??

 

主动模式(Active FTP):

端随机开启一个大于1024的端口 N 向服务器的21号端口发起连接,然后开放N+1号端口进行监听,并向服务器发出  PORT N+1  命令。

服务器接收到命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口N+1,进行数据传输。

 

被动模式(Passive FTP):

FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,同时会开启N+1号端口。然后向服务器发送PASV命令通知服务器使用被动模式

服务器收到命令后,会开放一个大于1024的端口P进行监听,然后用PORT P命令通知客户端,数据端口是P。

客户端收到命令后,会通过N+1号端后连接服务器的端口P,然后在两个端口之间进行数据传输。

 

2.VSFTP三种用户类别 匿名 本地 虚拟账号

1.)匿名账号:

使用FTP客户端访问服务器的时候,通常会遇到一类特殊帐号,用户名为(ftp)(anonymous),提供任意密码(包括空密码),可以通过服务器的验证此类用户被成为匿名用户,根路径在/var/ftp ,一般提供公共文件的下载,如免费软件,学习资料下载的站点

 

2.)本地帐号:

通用的系统帐号,根路径在本地账号家目录

 

3.)虚拟帐号:

有些FTP服务器软件还可以维护一份独立的用户数据库文件,而不是系统用户帐号。独立于数据库文件中的FTP用户帐号,被称为虚拟帐号”,使用虚拟帐号,可以降低关联性,安全性提高

4.解读配置文件 vim /etc/vsftpd/vsftpd.conf  

1.用户跳出默认路径

vi  /etc/vsftpd/vsftpd.conf

打开这三个,最后一个得加进去     配置user1   user2

chroot_local_user= YES   --把用户锁在默认路径下,把家目录当做根目录 / 处理,不允许跳出

chroot_list_enable= YES  ---开启一个用户列表文件,该文件中的所有用户允许跳出默认路径,其他用户锁在默认路径下     用户可以跳出家目录

chroot_list_file=/mnt/vsftpuserlist   ---能跳出家目录的文件,在里面写入用户

allow_writeable_chroot= YES     ---允许用户访问其家目录,即转换后的 /根目录

vi /mnt/vsftpuserlist             ---新建该用户列表文件,之前不存在,把跳出用户写到这里面    user1 和user2

2.用户匿名上传

vi  /etc/vsftpd/vsftpd.conf         --写入配置文件

 upload上传  

anon_upload_enable=YES   --允许匿名上传文件,但不能上传文件夹,不能改名、删除          

anon_mkdir_write_enable= YES --允许匿名上传文件夹建立目录, 上传文件夹

anon_other_write_enable= YES      --允许匿名给文件改名、删除

3.其他配置

max_clients=100       --限定最大连接数为100  (并发连接数,同时可连接的数量)

max_per_ip=10       --限定每一个个客户端最多同时发起10个连接

anon_max_rate=81920  --匿名用户下载最快80KB每秒(80K=80x1024=81920)

local_max_rate=102400--/本地用户下载最快100KB每秒

ascii_upload_enable=YES --指定数据传输方式以ASC编码格式传输

ascii_download_enable= YES --下载支持ASC编码格式传输

注:某些软件包上传下载必须用ASC码式  ,一般为二进制下载传输性能最优

保存修改后

 

3.FTP服务

1.服务器安装FTP软件包 启动服务 查看端口

配置yum环境,yum安装vsftpd  FTP软件包   或者去rpm包  查找安装

yum  -y  install   vsftpd

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

或者第二种方法rpm包方式

rpm  -ivh   vsfptd.xxx.rpm    ---去rpm包查看      (比较麻烦)

 

cd  /meida/cdiso     --挂载的光驱sr0  里面有Packages所有的安装包,查看

然后复制这个安装包到目录下`,然后安装即可

cp vsftpd-3.0.2-22.el7.x86_64.rpm   /root/       

cd     ls

rpm -ivh vsftpd-3.0.2-22.el7.x86_64.rpm       ---安装即可

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

systemctl  start   vsftpd      --启动服务

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

 

netstat -antulp | grep :21     ----查看21端口,

netstat -antulp | grep :20     ----查看20端口,因为没有开始传输,所以显示没有

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

2.VSFTP服务器 主配置文件控制权限vi  /etc/vsftpd/vsftpd.conf  

vi  /etc/vsftpd/vsftpd.conf   ---编辑配置文件,其中

anonymous_enable=YES   ---是否允许匿名用户登录

local_enable=YES         ---是否允许系统用户登

write_enable= YES        ---系统用户开启写权限 ,能上传

local_umask=022         ---系统用户上传文件的umask权限参数

说明:  系统用户登录ftp后,默认访问点是其个人家目录   (本地账户)

   匿名用户登录ftp后,默认访问点/var/ftp/中,且该目录权限必须755

dirmessage_enable=yes   ---显示消息文件,登录后,或切换目录后,目标目录下若有.message,则自动显示文档内容

pam_service_name=vsftpd       --开启ftp的PAM验证功能,指定验证配置文件名(用户和密码验证   

userlist_enable= YES         ---启用vsftpd指定的用户列表文件,

 

该文件中列举的用户,拒绝登录ftp,/etc/vsftpd/user_list文件

 

 

 cd /etc/vsftpd/      vim vsftpd.conf    ---查看编辑

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

3服务端默认访问点/var/ftp/文件权限为755   不能修改   r=4  w=2  x=1

匿名用户登录ftp后,默认访问点/var/ftp/中,且该目录权限必须755

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

4.测试匿名windows用户登录  访问linux服务端的FTP

put上传    get下载

quit  或 bye 命令退出ftp

系统账号登录后默认允许切换入linux服务器其他路径中

匿名账号登录后默认被锁定在登录路径下,不可跳出

 

Windows访问    

ftp://192.168.10.1       验证ftp启用

 

在ftp服务器创建一个文件 kkk,  用浏览器查看

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

5.服务端上传文件视频  windows客户端匿名查看

dd  if=/dev/zero  of=movie.blue  bs=1M  count=10

       路径        文件             速度      个数

dd  if=/dev/zero  of=movie.yellow  bs=1M  count=20

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

6在Linux客户端测试访问  网络要同一网段 关闭防火墙

首先能保证linux FTP服务器和客户端能够ping通,客户机服务器都关闭防火墙, (网络要通,在一个网段)

 

客户机安装软  ftp  lftp  

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

 

在 linux客户端 登录

ftp 192.168.10.2      然后输入ftp这个用户名   在输入密码  查看下载

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

或者用 lftp   不需要输入账号和密码  ,直接登录

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

4. 服务器建立本地VSFTP登录账号 测试权限 切换目录 有风险

vsftp默认使用系统账号作为FTP帐号

新建两个系统账号:

   

建立账号

useradd  user1

passwd  123456

useradd  user2

passwd  123456

systemctl vsftpd  restart           ----启动服务

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

1.在linux客户端本地账户就行验证  登录查看 切换路径查看  本地账号有风险

因为已经创建了本地用户,所以登录时候时写本地用户名

 

登录查看

登录   ls     user家目录现在本身看不到内容    ls -a可查看user1用户的隐藏文件

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

切换路径  

本地家目录和切换到linux其他目录       /  根目录     /home/user1  用户1的目录

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

本地账号的风险

本地账户 登录时可以随意切换目录,在系统乱跑,  所以要去限制他,锁定账号

5.VSFTP文件配置 用户控制权限(跳出根目录)

1.)主配置文件  锁用户在根目录下 和可跳出控制的用户列表

vi  /etc/vsftpd/vsftpd.conf

chroot_local_user= YES   用户锁在默认路径下,把家目录当做根目录 / 处理,不允许跳出

chroot_list_enable= YES 开启一个用户列表文件,该文件中的所有用户允许跳出默认路径,其他用户锁在默认路径下     用户可以跳出家目录

chroot_list_file=/mnt/vsftpuserlist   ---指定用户列表文件,手动新建,跳出家目录的文件

allow_writeable_chroot= YES     ---允许用户访问其家目录,即转换后的 /根目录

 

vi /mnt/vsftpuserlist             ---新建该用户列表文件,之前不存在

user1

保存退出

2.)案例 修改用户权限  锁定根目录下

vim /etc/vsftpd/vsftpd.conf          文件位置  

解开这三个文件

chroot_local_user=YES  --把用户锁在默认路径下,并当成根目录处理/ ,不允许跳出

chroot_list_enable=YES   ---是否开启可以这个默认路径的文件列表,即开启后,在那个文件中 有这个用户  可以随意切换路径.

chroot_list_file=/etc/vsftpd/chroot_list     ----那个可以随意切换路径的用户名单文件

              文件位置可指定,

 

vi  /etc/vsftpd/vsftpd.conf   --修改文件

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

打开另一个终端窗口查看可切换路径用户列表名单   vim /etc/vsftpd/chroot_list

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

3.)测试 用户user1  是否成功跳出控制

systemctl restart vsftpd重启服务        

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

4.)在客户端 登录user2 查看是否跳出

登录user2  会显示500   421 错误  原因是配置少了可写的权限

 

chmod a-w /home/user2在服务端修改用户写的权限  

或者去改服务端的配置文件   增加这一行

allow_writeable_chroot= YES     ---允许user2用户访问其家目录,即转换后的 /

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

在去配置服务器的文件  vi  /etc/vsftpd/vsftpd.conf   配置文件注意不要有空格

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

或者在服务器 去修改 可写-w的权限  chmod a-w /home/user3

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

然后在服务器在重启服务    systemctl restart vsftpd

6.匿名用户 上传功能

chmod  777  /var/ftp/pub         ---开放安全权限

匿名用户可以上传资料

输出资料时需要给  pub或者  在/var/ftp下建个目录给他上传的权限   

1.)修改 可上传 文件的配置 (服务器端)

vi  /etc/vsftpd/vsftpd.conf   ---写入配置文件

 

anon_upload_enable=YES   --允许匿名上传文件,但不能上传文件夹,不能改名、删除

upload上传  

anon_mkdir_write_enable=YES  ---允许匿名上传文件夹mkdir建立目录, 上传文件夹

anon_other_write_enable=YES      ---允许匿名给文件改名、删除

 

把这二个文件解开在下面复制一行 改为other    yy   p   修改为other 即可

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

2.)修改 目录权限 (匿名用户允许上传文件)

记得修改服务器和客户端的防火墙

文件位置为   vi  /etc/vsftpd/vsftpd.conf         

chmod a+w pub/              给pub目录增加可写的权限

或者使用这个命令,   

chmod  777  /var/ftp/pub   给ftp用户的pub/ 目录可读可写可执行的权限     

setfacl   -m  u:ftp:rwx  pub/

给ftp用户的pub/ 目录 设置 rwx 可读可写可执行的权限     

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

3.)检测匿名用户是否可上传文件 或目录

cd /var/ftp/pub/目录位置客户端    

在客户机登录 上传下载  创建目录     只能在 /pub/目录下  上传下载

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

在服务器端查看

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

4.)644权限(工程师检测完之后的)

r=4  w=2   x=1   r可读,w可写,x可执行

rw- --- ---          -----使用者可读可写  同组和其他人没有权限

要是能下载权限应该就是 644

改为644的过程是,  系统工程师检测完之后的

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

  这个文件不能下载是因为其文件读写权限为修改   

把权限改为644之后就可以下载了

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

 

7.其他配置最大连接数 下载方式速度

vi  /etc/vsftpd/vsftpd.conf

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

max_clients=100   --限定最大连接数为100  (并发连接数,同时可连接的数量)

max_per_ip=10  ---限定每个客户端最多同时发起10个连接 (一台电脑最多打开10个连接)

anon_max_rate=81920  匿名用户下载最快80KB每秒(80K=80x1024=81920)

local_max_rate=102400本地用户下载最快100KB每秒

ascii_upload_enable=YES     指定数据传输方式以ASC编码格式传输

ascii_download_enable= YES   下载支持ASC编码格式传输

 

注:某些软件包上传下载必须用ASC码式  ,一般为二进制下载传输性能最优

保存修改后

重启服务:service  vsftpd  restart   

 

 

8.服务端系统保护 (用户的shell)

系统用户只允许登录ftp,不允许登录系统或ssh

修改之后的user1   将不能登录系统     ----安全性增强

 

vi  /etc/passwd   ---编辑用户配置文件

把用户的第七列,即shell部分,改为:/sbin/nologin

保存退出

 

或者用户修改     usermod –s /sbin/nolgoin user1

或者在增加用户时通过-s指定:   useradd user3 –s /sbin/nologin

 

注意:centos7.4版本可以,7.6版本那个第二个用户修改则不成功

修改 和创建用户登录 指定 bash shell

vi  /etc/passwd   ---编辑用户配置文件  /bin/bash  改为/sbin/nologin

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

 

或者这样修改

usermod -s /bin/nolgoin user3

cat /etc/passwd |grep user3

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

或者新建用户时直接指定

useradd user4 -s /sbin/nologin

cat /etc/passwd |grep user4

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

useradd  -r                  ----创建应该系统账号

 

 

9.VSFTP 虚拟用户认证方式 (进阶)

     VSFTP一个安全的保证是可采用虚拟用户的认证方式,它靠对/etc/pam.d/目录下指定的一个认证文件(vsftpd)对用户进行认证,认证成功后再把虚拟用户映射为本地用户,该本地用户由服务器配置文件里的语句ftp_username的值指定。

     使用虚拟用户认证,则原有系统账户将不再可用,可以把原系统账户加入到虚拟用户列表中

 

1.建立 虚拟数据库 目录以及文件    ---库文件名可以自定义

mkdir   /mnt/virftp      之后文件统一位置,便于后期管理

vi    /mnt/virftp/viruser    新建虚拟用户列表文件

 

写入:添加可用虚拟账号,及密码,奇数行为用户名,偶数行为密码,如图

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

注意:用户rest1  密码更改为123456

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

 

文本文件的用户名密码已设置    ---虚拟的账号     

在linux没有test1用户.下一步把这个生成数据库文件

2.生成口令 数据库文件 以供PAM认证使用 服务端安装db

db_load命令需要安装compat-db47.x86_64 安装包      

 

db_load –T -t hash  –f   /mnt/virftp/viruser   /mnt/virftp/viruser.db

-f   指定我们建立的数据文本   生成的数据库文件

-T  将原有文本转变成库文件   -t 指定转变的算法是hash  转译算法:hash算法

注意:生成的库文件一定是.db结尾的

 

yum -y install compat-db47.x86_64          

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

3.生成虚拟账号的虚拟库文件

db_load -T -t hash -f viruser  viruser.db      viruser可查看    viruser.db不可查看

-T  将原有文本转变成库文件   -t 指定转变的算法是hash  转译算法:hash算法

-f   指定我们建立的数据文本   生成的数据库源文件     数据库文件后面加 .db

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

4.创建  虚拟用户映射的 系统用户xuni  (用户配置) 修改其权限755

创建虚拟用户映射的系统用户(如:xuni),并指定其家目录,及家目录权限为755

 

useradd -d   /mnt/virftp/virdir    xuni          ----创建虚拟用户  创建目录

           这个家目录不存在需要指定

注意:-d 指定新用户家目录,且家目录之前必须不存在,否则新用户无法获取其所有者

 

ls  -ld  /mnt/virftp/virdir/       ---查看权限是不是755

chmod 755 /mnt//virftp/virdir/   ---给这个目录设置权限755

这个权限是xuni  其他用户可以去和列表

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

 

                   Xuni    其他用户可以去和列表

10. 查看虚拟用户pam认证目录文件权限 etc/pam.d/vsftpd  写入db文件

虚拟用户的认证的配置文件 --查看有没有授权

 

文件位置:   cd  /etc/pam.d   

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

vi   /etc/pam.d/vsftpd

注释原有内容在配置文件中写这两段,  把其余的内容注释掉        ----防止出错

格式例如:

auth  required  /lib64/security/pam_userdb.so db   =/mnt/virftp/viruser

认证   选项     调用的函数库    db代表刚才生成的数据库 绝对路径 db不写

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

写入这两行

auth required /lib64/security/pam_userdb.so db=/mnt/virftp/viruser

account required /lib64/security/pam_userdb.so db=/mnt/virftp/viruser

账户     选项     调用的数据库    db代表刚才生成的数据库 绝对路径 db不写  

        

注:后面指定的是虚拟用户库文件:viruser.db,只是不写后缀.db

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

11.服务端主配置文件开启虚拟映射功能, 关联虚拟用户和系统 用户   映射虚拟用户为xuni

vi   /etc/vsftpd/vsftpd.conf     --编辑配置vsftbd文件

删除原有的匿名上传功能,若不删,则所有匿名用户可上传,包括虚拟账号

 

先关闭这三个  注释掉

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

关闭

anon_upload_enable=YES     ---匿名上传关闭

anon_mkdir_write_enable=YES    ---允许匿名上传文件夹mkdir建立目录

anon_other_write_enable=YES   ---允许匿名给文件改名、删除

 

在最后插入两行

guest_enable=YES                ---开启虚拟用户的映射功能

guest_username=xuni      ---虚拟用户映射为本地用户xuNi

映射账号  ,把虚拟账号通通映射为xuni  用户的配置

保存配置

重启服务     systemctl restart vsftpd

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

12客户端测试登录, 映射为本地用户

不能切换目录  说明映射成功了

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

 

13为虚拟用户设定访问权限  给不同用户设置不同权限  服务端更改主配置文件 测试

vi   /etc/vsftpd/vsftpd.conf   

写入:

user_config_dir=/mnt/virftp/          指定虚拟用户权限配置文件所在位置

systemctl restart vsftpd重启服务看有没有错误     

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

2.)给用户test1设置权限   只读

 

vi   /mnt/virftp/test1        给虚拟用户test1设定权限

anon_world_readable_only=YES      设定test1只读

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

 

3.)给用户test2设置权限   允许上传

 

vi   /mnt/virftp/test2    ---给虚拟用户test2设定权限,

write_enable= YES   ---开启写权限(在test2中不需要)

 

写入

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES      

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

systemctl restart vsftpd重启服务看有没有错误

     

4.)测试

在客户机登录  ftp 192.168.10.2  服务器ip

然后输入账号  test2   和密码

pwd查看路径  

Ls查看 端口

Get  下载

Put上传

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

查看服务器的目录文件

创建一个test文件

 linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户)

配置实验之前关闭防火墙

iptables -F

iptables -X

iptables -Z

systemctl stop firewalld

setenforce 0

1.ftp简介 功能 端口 工作模式  协议tcp

功能:

FTP是File Transfer Protocol(文件传输协议)的缩写

Unix/Linux系统中常用的免费FTP服务器软件主要是VSFTP。

 

端口:

主动模式:TCP  21(连接)  20(数据)               tcp三次握手协议

被动模式:TCP  21(连接)  动态端口(数据)

21端口命令连接  是用来  接传输控制命令

20端口是          传输数据,下载文件

 

 

FTP两种工作模式

主动 和被动是对vsftp服务端而言的        vsftpd是进程    vsftp是服务

主动是服务端主动去连接, 主动使用端口是21端口  是命令连接  是用来传输控制命令

20端口是            传输数据,下载文件

协议是tcp

被动是服务端被动被连接  ,在传输之前, 控制命令传输也是21端口   但是数据传输不是20端口了  是动态端口(不确定的端口 ,但是有规定的范围)

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

防火墙导致主动模式不成功??

 

主动模式(Active FTP):

端随机开启一个大于1024的端口 N 向服务器的21号端口发起连接,然后开放N+1号端口进行监听,并向服务器发出  PORT N+1  命令。

服务器接收到命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口N+1,进行数据传输。

 

被动模式(Passive FTP):

FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,同时会开启N+1号端口。然后向服务器发送PASV命令通知服务器使用被动模式

服务器收到命令后,会开放一个大于1024的端口P进行监听,然后用PORT P命令通知客户端,数据端口是P。

客户端收到命令后,会通过N+1号端后连接服务器的端口P,然后在两个端口之间进行数据传输。

 

2.VSFTP三种用户类别 匿名 本地 虚拟账号

1.)匿名账号:

使用FTP客户端访问服务器的时候,通常会遇到一类特殊帐号,用户名为(ftp)(anonymous),提供任意密码(包括空密码),可以通过服务器的验证此类用户被成为匿名用户,根路径在/var/ftp ,一般提供公共文件的下载,如免费软件,学习资料下载的站点

 

2.)本地帐号:

通用的系统帐号,根路径在本地账号家目录

 

3.)虚拟帐号:

有些FTP服务器软件还可以维护一份独立的用户数据库文件,而不是系统用户帐号。独立于数据库文件中的FTP用户帐号,被称为虚拟帐号”,使用虚拟帐号,可以降低关联性,安全性提高

4.解读配置文件 vim /etc/vsftpd/vsftpd.conf  

1.用户跳出默认路径

vi  /etc/vsftpd/vsftpd.conf

打开这三个,最后一个得加进去     配置user1   user2

chroot_local_user= YES   --把用户锁在默认路径下,把家目录当做根目录 / 处理,不允许跳出

chroot_list_enable= YES  ---开启一个用户列表文件,该文件中的所有用户允许跳出默认路径,其他用户锁在默认路径下     用户可以跳出家目录

chroot_list_file=/mnt/vsftpuserlist   ---能跳出家目录的文件,在里面写入用户

allow_writeable_chroot= YES     ---允许用户访问其家目录,即转换后的 /根目录

vi /mnt/vsftpuserlist             ---新建该用户列表文件,之前不存在,把跳出用户写到这里面    user1 和user2

2.用户匿名上传

vi  /etc/vsftpd/vsftpd.conf         --写入配置文件

 upload上传  

anon_upload_enable=YES   --允许匿名上传文件,但不能上传文件夹,不能改名、删除          

anon_mkdir_write_enable= YES --允许匿名上传文件夹建立目录, 上传文件夹

anon_other_write_enable= YES      --允许匿名给文件改名、删除

3.其他配置

max_clients=100       --限定最大连接数为100  (并发连接数,同时可连接的数量)

max_per_ip=10       --限定每一个个客户端最多同时发起10个连接

anon_max_rate=81920  --匿名用户下载最快80KB每秒(80K=80x1024=81920)

local_max_rate=102400--/本地用户下载最快100KB每秒

ascii_upload_enable=YES --指定数据传输方式以ASC编码格式传输

ascii_download_enable= YES --下载支持ASC编码格式传输

注:某些软件包上传下载必须用ASC码式  ,一般为二进制下载传输性能最优

保存修改后

 

3.FTP服务

1.服务器安装FTP软件包 启动服务 查看端口

配置yum环境,yum安装vsftpd  FTP软件包   或者去rpm包  查找安装

yum  -y  install   vsftpd

 

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

或者第二种方法rpm包方式

rpm  -ivh   vsfptd.xxx.rpm    ---去rpm包查看      (比较麻烦)

 

cd  /meida/cdiso     --挂载的光驱sr0  里面有Packages所有的安装包,查看

然后复制这个安装包到目录下`,然后安装即可

cp vsftpd-3.0.2-22.el7.x86_64.rpm   /root/       

cd     ls

rpm -ivh vsftpd-3.0.2-22.el7.x86_64.rpm       ---安装即可

 

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

 

 

systemctl  start   vsftpd      --启动服务

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

 

 

netstat -antulp | grep :21     ----查看21端口,

netstat -antulp | grep :20     ----查看20端口,因为没有开始传输,所以显示没有

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

 

2.VSFTP服务器 主配置文件控制权限vi  /etc/vsftpd/vsftpd.conf  

vi  /etc/vsftpd/vsftpd.conf   ---编辑配置文件,其中

anonymous_enable=YES   ---是否允许匿名用户登录

local_enable=YES         ---是否允许系统用户登

write_enable= YES        ---系统用户开启写权限 ,能上传

local_umask=022         ---系统用户上传文件的umask权限参数

说明:  系统用户登录ftp后,默认访问点是其个人家目录   (本地账户)

   匿名用户登录ftp后,默认访问点/var/ftp/中,且该目录权限必须755

dirmessage_enable=yes   ---显示消息文件,登录后,或切换目录后,目标目录下若有.message,则自动显示文档内容

pam_service_name=vsftpd       --开启ftp的PAM验证功能,指定验证配置文件名(用户和密码验证   

userlist_enable= YES         ---启用vsftpd指定的用户列表文件,

 

该文件中列举的用户,拒绝登录ftp,/etc/vsftpd/user_list文件

 

 

 cd /etc/vsftpd/      vim vsftpd.conf    ---查看编辑

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

3服务端默认访问点/var/ftp/文件权限为755   不能修改   r=4  w=2  x=1

匿名用户登录ftp后,默认访问点/var/ftp/中,且该目录权限必须755

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

 

4.测试匿名windows用户登录  访问linux服务端的FTP

put上传    get下载

quit  或 bye 命令退出ftp

系统账号登录后默认允许切换入linux服务器其他路径中

匿名账号登录后默认被锁定在登录路径下,不可跳出

 

Windows访问    

ftp://192.168.10.1       验证ftp启用

 

在ftp服务器创建一个文件 kkk,  用浏览器查看

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

5.服务端上传文件视频  windows客户端匿名查看

dd  if=/dev/zero  of=movie.blue  bs=1M  count=10

       路径        文件             速度      个数

dd  if=/dev/zero  of=movie.yellow  bs=1M  count=20

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

 

6在Linux客户端测试访问  网络要同一网段 关闭防火墙

首先能保证linux FTP服务器和客户端能够ping通,客户机服务器都关闭防火墙, (网络要通,在一个网段)

 

客户机安装软  ftp  lftp  

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

 

在 linux客户端 登录

ftp 192.168.10.2      然后输入ftp这个用户名   在输入密码  查看下载

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

 

或者用 lftp   不需要输入账号和密码  ,直接登录

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

4. 服务器建立本地VSFTP登录账号 测试权限 切换目录 有风险

vsftp默认使用系统账号作为FTP帐号

新建两个系统账号:

   

建立账号

useradd  user1

passwd  123456

useradd  user2

passwd  123456

systemctl vsftpd  restart           ----启动服务

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

 

1.在linux客户端本地账户就行验证  登录查看 切换路径查看  本地账号有风险

因为已经创建了本地用户,所以登录时候时写本地用户名

 

登录查看

登录   ls     user家目录现在本身看不到内容    ls -a可查看user1用户的隐藏文件

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

 

切换路径  

本地家目录和切换到linux其他目录       /  根目录     /home/user1  用户1的目录

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

 

本地账号的风险

本地账户 登录时可以随意切换目录,在系统乱跑,  所以要去限制他,锁定账号

5.VSFTP文件配置 用户控制权限(跳出根目录)

1.)主配置文件  锁用户在根目录下 和可跳出控制的用户列表

vi  /etc/vsftpd/vsftpd.conf

chroot_local_user= YES   用户锁在默认路径下,把家目录当做根目录 / 处理,不允许跳出

chroot_list_enable= YES 开启一个用户列表文件,该文件中的所有用户允许跳出默认路径,其他用户锁在默认路径下     用户可以跳出家目录

chroot_list_file=/mnt/vsftpuserlist   ---指定用户列表文件,手动新建,跳出家目录的文件

allow_writeable_chroot= YES     ---允许用户访问其家目录,即转换后的 /根目录

 

vi /mnt/vsftpuserlist             ---新建该用户列表文件,之前不存在

user1

保存退出

2.)案例 修改用户权限  锁定根目录下

vim /etc/vsftpd/vsftpd.conf          文件位置  

解开这三个文件

chroot_local_user=YES  --把用户锁在默认路径下,并当成根目录处理/ ,不允许跳出

chroot_list_enable=YES   ---是否开启可以这个默认路径的文件列表,即开启后,在那个文件中 有这个用户  可以随意切换路径.

chroot_list_file=/etc/vsftpd/chroot_list     ----那个可以随意切换路径的用户名单文件

              文件位置可指定,

 

vi  /etc/vsftpd/vsftpd.conf   --修改文件

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

 

打开另一个终端窗口查看可切换路径用户列表名单   vim /etc/vsftpd/chroot_list

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

 

3.)测试 用户user1  是否成功跳出控制

systemctl restart vsftpd重启服务        

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

 

4.)在客户端 登录user2 查看是否跳出

登录user2  会显示500   421 错误  原因是配置少了可写的权限

 

chmod a-w /home/user2在服务端修改用户写的权限  

或者去改服务端的配置文件   增加这一行

allow_writeable_chroot= YES     ---允许user2用户访问其家目录,即转换后的 /

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

 

在去配置服务器的文件  vi  /etc/vsftpd/vsftpd.conf   配置文件注意不要有空格

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

或者在服务器 去修改 可写-w的权限  chmod a-w /home/user3

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

然后在服务器在重启服务    systemctl restart vsftpd

6.匿名用户 上传功能

chmod  777  /var/ftp/pub         ---开放安全权限

匿名用户可以上传资料

输出资料时需要给  pub或者  在/var/ftp下建个目录给他上传的权限   

1.)修改 可上传 文件的配置 (服务器端)

vi  /etc/vsftpd/vsftpd.conf   ---写入配置文件

 

anon_upload_enable=YES   --允许匿名上传文件,但不能上传文件夹,不能改名、删除

upload上传  

anon_mkdir_write_enable=YES  ---允许匿名上传文件夹mkdir建立目录, 上传文件夹

anon_other_write_enable=YES      ---允许匿名给文件改名、删除

 

把这二个文件解开在下面复制一行 改为other    yy   p   修改为other 即可

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

 

2.)修改 目录权限 (匿名用户允许上传文件)

记得修改服务器和客户端的防火墙

文件位置为   vi  /etc/vsftpd/vsftpd.conf         

chmod a+w pub/              给pub目录增加可写的权限

或者使用这个命令,   

chmod  777  /var/ftp/pub   给ftp用户的pub/ 目录可读可写可执行的权限     

setfacl   -m  u:ftp:rwx  pub/

给ftp用户的pub/ 目录 设置 rwx 可读可写可执行的权限     

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

3.)检测匿名用户是否可上传文件 或目录

cd /var/ftp/pub/目录位置客户端    

在客户机登录 上传下载  创建目录     只能在 /pub/目录下  上传下载

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

 

在服务器端查看

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

4.)644权限(工程师检测完之后的)

r=4  w=2   x=1   r可读,w可写,x可执行

rw- --- ---          -----使用者可读可写  同组和其他人没有权限

要是能下载权限应该就是 644

改为644的过程是,  系统工程师检测完之后的

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

  这个文件不能下载是因为其文件读写权限为修改   

把权限改为644之后就可以下载了

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

 

 

7.其他配置最大连接数 下载方式速度

vi  /etc/vsftpd/vsftpd.conf

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

 

max_clients=100   --限定最大连接数为100  (并发连接数,同时可连接的数量)

max_per_ip=10  ---限定每个客户端最多同时发起10个连接 (一台电脑最多打开10个连接)

anon_max_rate=81920  匿名用户下载最快80KB每秒(80K=80x1024=81920)

local_max_rate=102400本地用户下载最快100KB每秒

ascii_upload_enable=YES     指定数据传输方式以ASC编码格式传输

ascii_download_enable= YES   下载支持ASC编码格式传输

 

注:某些软件包上传下载必须用ASC码式  ,一般为二进制下载传输性能最优

保存修改后

重启服务:service  vsftpd  restart   

 

 

8.服务端系统保护 (用户的shell)

系统用户只允许登录ftp,不允许登录系统或ssh

修改之后的user1   将不能登录系统     ----安全性增强

 

vi  /etc/passwd   ---编辑用户配置文件

把用户的第七列,即shell部分,改为:/sbin/nologin

保存退出

 

或者用户修改     usermod –s /sbin/nolgoin user1

或者在增加用户时通过-s指定:   useradd user3 –s /sbin/nologin

 

注意:centos7.4版本可以,7.6版本那个第二个用户修改则不成功

修改 和创建用户登录 指定 bash shell

vi  /etc/passwd   ---编辑用户配置文件  /bin/bash  改为/sbin/nologin

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

 

或者这样修改

usermod -s /bin/nolgoin user3

cat /etc/passwd |grep user3

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

 

或者新建用户时直接指定

useradd user4 -s /sbin/nologin

cat /etc/passwd |grep user4

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

 

useradd  -r                  ----创建应该系统账号

 

 

9.VSFTP 虚拟用户认证方式 (进阶)

     VSFTP一个安全的保证是可采用虚拟用户的认证方式,它靠对/etc/pam.d/目录下指定的一个认证文件(vsftpd)对用户进行认证,认证成功后再把虚拟用户映射为本地用户,该本地用户由服务器配置文件里的语句ftp_username的值指定。

     使用虚拟用户认证,则原有系统账户将不再可用,可以把原系统账户加入到虚拟用户列表中

 

1.建立 虚拟数据库 目录以及文件    ---库文件名可以自定义

mkdir   /mnt/virftp      之后文件统一位置,便于后期管理

vi    /mnt/virftp/viruser    新建虚拟用户列表文件

 

写入:添加可用虚拟账号,及密码,奇数行为用户名,偶数行为密码,如图

 

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

注意:用户rest1  密码更改为123456

 

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

 

文本文件的用户名密码已设置    ---虚拟的账号     

在linux没有test1用户.下一步把这个生成数据库文件

2.生成口令 数据库文件 以供PAM认证使用 服务端安装db

db_load命令需要安装compat-db47.x86_64 安装包      

 

db_load –T -t hash  –f   /mnt/virftp/viruser   /mnt/virftp/viruser.db

-f   指定我们建立的数据文本   生成的数据库文件

-T  将原有文本转变成库文件   -t 指定转变的算法是hash  转译算法:hash算法

注意:生成的库文件一定是.db结尾的

 

  

yum -y install compat-db47.x86_64          

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

 

3.生成虚拟账号的虚拟库文件

db_load -T -t hash -f viruser  viruser.db      viruser可查看    viruser.db不可查看

-T  将原有文本转变成库文件   -t 指定转变的算法是hash  转译算法:hash算法

-f   指定我们建立的数据文本   生成的数据库源文件     数据库文件后面加 .db

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

4.创建  虚拟用户映射的 系统用户xuni  (用户配置) 修改其权限755

创建虚拟用户映射的系统用户(如:xuni),并指定其家目录,及家目录权限为755

 

useradd -d   /mnt/virftp/virdir    xuni          ----创建虚拟用户  创建目录

           这个家目录不存在需要指定

注意:-d 指定新用户家目录,且家目录之前必须不存在,否则新用户无法获取其所有者

 

ls  -ld  /mnt/virftp/virdir/       ---查看权限是不是755

chmod 755 /mnt//virftp/virdir/   ---给这个目录设置权限755

这个权限是xuni  其他用户可以去和列表

 

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

                   Xuni    其他用户可以去和列表

10. 查看虚拟用户pam认证目录文件权限 etc/pam.d/vsftpd  写入db文件

虚拟用户的认证的配置文件 --查看有没有授权

 

文件位置:   cd  /etc/pam.d   

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

 

vi   /etc/pam.d/vsftpd

注释原有内容在配置文件中写这两段,  把其余的内容注释掉        ----防止出错

格式例如:

auth  required  /lib64/security/pam_userdb.so db   =/mnt/virftp/viruser

认证   选项     调用的函数库    db代表刚才生成的数据库 绝对路径 db不写

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

写入这两行

auth required /lib64/security/pam_userdb.so db=/mnt/virftp/viruser

account required /lib64/security/pam_userdb.so db=/mnt/virftp/viruser

账户     选项     调用的数据库    db代表刚才生成的数据库 绝对路径 db不写  

        

注:后面指定的是虚拟用户库文件:viruser.db,只是不写后缀.db

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

11.服务端主配置文件开启虚拟映射功能, 关联虚拟用户和系统 用户   映射虚拟用户为xuni

vi   /etc/vsftpd/vsftpd.conf     --编辑配置vsftbd文件

删除原有的匿名上传功能,若不删,则所有匿名用户可上传,包括虚拟账号

 

先关闭这三个  注释掉

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

关闭

anon_upload_enable=YES     ---匿名上传关闭

anon_mkdir_write_enable=YES    ---允许匿名上传文件夹mkdir建立目录

anon_other_write_enable=YES   ---允许匿名给文件改名、删除

 

在最后插入两行

guest_enable=YES                ---开启虚拟用户的映射功能

guest_username=xuni      ---虚拟用户映射为本地用户xuNi

映射账号  ,把虚拟账号通通映射为xuni  用户的配置

保存配置

重启服务     systemctl restart vsftpd

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

 

12客户端测试登录, 映射为本地用户

不能切换目录  说明映射成功了

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

 

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

13为虚拟用户设定访问权限  给不同用户设置不同权限  服务端更改主配置文件 测试

vi   /etc/vsftpd/vsftpd.conf   

写入:

user_config_dir=/mnt/virftp/          指定虚拟用户权限配置文件所在位置

systemctl restart vsftpd重启服务看有没有错误     

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

 

2.)给用户test1设置权限   只读

 

vi   /mnt/virftp/test1        给虚拟用户test1设定权限

anon_world_readable_only=YES      设定test1只读

 

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

 

3.)给用户test2设置权限   允许上传

 

vi   /mnt/virftp/test2    ---给虚拟用户test2设定权限,

write_enable= YES   ---开启写权限(在test2中不需要)

 

写入

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES      

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

systemctl restart vsftpd重启服务看有没有错误

     

4.)测试

在客户机登录  ftp 192.168.10.2  服务器ip

然后输入账号  test2   和密码

pwd查看路径  

Ls查看 端口

Get  下载

Put上传

linux之FTP服务搭建  ( ftp文件传输协议 VSFTPd虚拟用户) 

查看服务器的目录文件

创建一个test文件