linux系统的ftp文件传输协议

简介:FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)。"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。

一、FTP的安装

1.安装的环境配置

该实验以server虚拟机的超级用户操作


(1)设置网络

 vim /etc/sysconfig/network-scripts/ifcfg-eth0                                                      #编写网络配置文件

linux系统的ftp文件传输协议

systemctl restart network                                                                                  #重启网络

 ping 172.25.254.60                                                                                          # ping真机id,测试网络


(2)配置yum源

cd /etc/yum.repos.d/

 vim rhel_dvd.repo                                                                                            #编写yum源配置文件

linux系统的ftp文件传输协议

yum clean all                                                                                                      #清空yum源缓存

linux系统的ftp文件传输协议


2.安装FTP

 yum install vsftpd -y                                                                                 #安装vsftpd

linux系统的ftp文件传输协议

linux系统的ftp文件传输协议


火墙策略

firewall-cmd --permanent --add-service=ftp                                                               #给火墙加ftp

firewall-cmd --reload                                                                                                     #更改火墙加载

firewall-cmd --list-all                                                                                                      #查看防火墙状态 

linux系统的ftp文件传输协议

 systemctl start vsftpd                                                                                                   #开启服务

systemctl enable vsftpd                                                                                                #开机启动服务

yum install lftp -y                                                                                                            #安装lftp软件

linux系统的ftp文件传输协议

linux系统的ftp文件传输协议


测试:

lftp 本机id                                                                                                              #匿名访问

linux系统的ftp文件传输协议

能登录且显示,表示安装完成!


文件信息

默认发布目录: /var/ftp

协议接口: 21/tcp

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

匿名用户默认的登陆目录为/var/pub/

本地用户默认的登陆目录为/home


报错id

500                                              #文件权限过大

530                                              #用户认证失败

550                                              #服务本身功能未开放

553                                              #本地文件系统权限过小


二、vsftpd服务的配置参数


1. 允许匿名用户上传

 29        anon_upload_enable=YES                           #允许匿名用户上传

测试:

chgrp ftp /var/ftp/pub                                                    #将/var/ftp/pub目录的组用户设置为ftp

chmod 775 /var/ftp/pub                                               #修改/var/ftp/pub目录的执行权限

chmod 775 /etc/passwd                                             #修改/etc/passwd的执行权限

vim /etc/vsftpd/vsftpd.conf                                          #编辑vsftpd配置文件

linux系统的ftp文件传输协议

systemctl restart vsftpd                                               #重启vsftpd服务

vim /etc/sysconfig/selinux                                           #编写selinux配置文件(SELINUX=disabled)

linux系统的ftp文件传输协议

setenforce 0                                                                #关闭selinux防火墙

lftp 172.25.254.202                                                    #匿名登录

linux系统的ftp文件传输协议

上传成功!


2. 匿名用户限速上传

30             anon_max_rate=10240                                           #允许匿名用户上传的速度

测试:

dd if=/dev/zero of=/mnt/bigfile bs=1M count=2000                #截取

lftp 172.25.254.202                                                                    #匿名登录

cd pub/

put /mnt/bigfile                                                                             #上传/mnt/bigfile

ls

linux系统的ftp文件传输协议

vim /etc/vsftpd/vsftpd.conf                                                       #编辑vsftpd配置文件

linux系统的ftp文件传输协议

systemctl restart vsftpd                                                            #重启vstpd

lftp 172.25.254.202                                                                 #匿名登录

cd pub/

put /mnt/bigfile                                                                          #上传/mnt/bigfile

linux系统的ftp文件传输协议

可以看到上传速度变慢

限速完成!


3. 允许匿名用户删除

24        anon_other_write_enable=YES                              #是否允许匿名用户删除

测试:

lftp 172.25.254.202                                                               #匿名登录172.25.254.202

cd pub/

rm -fr bigfile                                                                            #删除pub目录里的文件,无法删除

linux系统的ftp文件传输协议

vim /etc/vsftpd/vsftpd.conf                                                       #编辑vsftpd配置文件

linux系统的ftp文件传输协议

systemctl restart vsftpd                                                            #重启vsftpd服务

linux系统的ftp文件传输协议

删除成功!


4. 禁止本地用户连接

 16       local_enable=NO                                #禁止允许本地用户连接

测试:

lftp 172.25.254.202 -u student                        #以student用户的身份登录172.25.254.202

ls

linux系统的ftp文件传输协议

vim /etc/vsftpd/vsftpd.conf                                                       #编辑vsftpd配置文件

linux系统的ftp文件传输协议

systemctl restart vsftpd                                                             #重启vsftpd服务

linux系统的ftp文件传输协议


5. 允许本地用户写入

19       write_enable=YES                                         #允许本地用户读写

测试:

lftp 172.25.254.202 -u student                                 #以student用户的身份登录172.25.254.202

put /mnt/bigfile                                                            #上传/mnt/bigfile

linux系统的ftp文件传输协议

上传/etc/passwd文件失败,因为没有权限

vim /etc/vsftpd/vsftpd.conf                                          #编辑vsftpd配置文件

linux系统的ftp文件传输协议

systemctl restart vsftpd                                                    #重启vsftpd服务

linux系统的ftp文件传输协议


6.设置创建文件的umask值

 23      local_umask=077                                             #设置本地用户创建文件的umask值

 24      anon_umask=022                                             #设置匿名用户创建文件的umask值

测试:

vim /etc/vsftpd/vsftpd.conf                                            #编辑vsftpd配置文件

linux系统的ftp文件传输协议

systemctl restart vsftpd                                                  #重启vsftpd服务


本地用户

lftp 172.25.254.202 -u student                                     #以student用户的身份登录172.25.254.202

put /etc/inttab                                                                  #上传/etc/inttab文件

ls                                                                                      #查看inttab权限信息

linux系统的ftp文件传输协议


匿名用户

lftp 172.25.254.202                                                               #匿名登录172.25.254.202

cd pub/

put /etc/group                                                                          #上传group文件

ls                                                                                               #查看group文件权限信息

linux系统的ftp文件传输协议

可以看出本地用户和匿名用户上传文件的权限不同

创建文件的umask值设置成功!


7. 是否允许所有本地用户访问上层目录

(1)禁止所有本地用户访问上层目录

102       chroot_local_user=YES                                            #禁止所有本地用户访问上层目录

测试:

lftp 172.25.254.202 -u student                                               #以student用户的身份登录172.25.254.202

cd /

ls

linux系统的ftp文件传输协议

vim /etc/vsftpd/vsftpd.conf                                                          #编辑vsftpd配置文件

linux系统的ftp文件传输协议

systemctl restart vsftpd                                                             #重启vsftpd服务

linux系统的ftp文件传输协议

报错500表示权限过大,系统提示用户有可写入权限

 chmod u-w /home/*                                                     #删除写入权限

禁止本地用户访问上层目录设置成功!


(2)黑名单

102 chroot_local_user=NO                                         #允许所有本地用户访问上层目录
103 chroot_list_enable=YES                                      #开启黑名单

105 chroot_list_file=/etc/vsftpd/chroot_list                #黑名单所在目录

测试:

vim /etc/vsftpd/vsftpd.conf                                            #编辑vsftpd配置文件

linux系统的ftp文件传输协议

systemctl restart vsftpd                                                  #重启vsftpd服务

lftp 172.25.254.202 -u student                                     #以student用户的身份登录172.25.254.202

cd /

ls
linux系统的ftp文件传输协议

vim /etc/vsftpd/chroot_list                                                              #编辑黑名单(student)

linux系统的ftp文件传输协议

在黑名单中写入student后,student用户无法查看上层目录,但其他用户可以查看

linux系统的ftp文件传输协议


(3)白名单

102 chroot_local_user=NO                                         #禁止所有本地用户访问上层目录
103 chroot_list_enable=YES                                      #开启白名单,开启后所有用户禁止访问上层目录

105 chroot_list_file=/etc/vsftpd/chroot_list                #白名单所在目录


 vim /etc/vsftpd/vsftpd.conf

linux系统的ftp文件传输协议

systemctl restart vsftpd

vim /etc/vsftpd/chroot_list                                            #编辑白名单(student)

操作完成后,只有在白名单的用户才可以查看上层目录

linux系统的ftp文件传输协议

linux系统的ftp文件传输协议


8.用户黑白名单

(1)黑名单

linux系统的ftp文件传输协议

ftpusers 为永久黑名单

user_list 为暂时黑名单

测试:

vim /etc/vsftpd/ftpusers                                                        #编辑用户永久黑名单(student)

linux系统的ftp文件传输协议

student 用户无法登录,其他用户可以


vim /etc/vstftpd/user_list                                                      #编辑用户暂时黑名单(student)

linux系统的ftp文件传输协议

student 用户无法登录,其他用户可以


(2)白名单

129 userlist_deny=NO                                                      #加入这条参数后临时黑名单将变成白名单


测试:

 vim /etc/vsftpd/vsftpd.conf

linux系统的ftp文件传输协议

vim /etc/vstftpd/user_list                                                      #编辑用户白名单(westos)

linux系统的ftp文件传输协议

只有在白名单中的westos可以登录,其他用户均不可登录

若在永久黑名单和白名单同时写入同一用户,ftpuser优先级更高,所以该用户还是在黑名单中

测试:

以student为例:在ftpuser和user_list写入student

linux系统的ftp文件传输协议

student用户无法登录


9.ftp虚拟用户设定

yum whatprovides */pam_userdb.so                                       #查找软件名称并下载


linux系统的ftp文件传输协议

 vim /etc/vsftpd/vsftpd.conf

linux系统的ftp文件传输协议

vim /etc/vsftpd/ftpusers                                                       #删除永久黑名单里新添加的本地用户

vim /etc/vstftpd/user_list                                                     #删除暂时黑名单里新添加的本地用户

注释掉129行

操作方法:

1.创建虚拟帐号身份

[[email protected] ~]# cd /etc/vsftpd/
[[email protected] vsftpd]# vim userdb

linux系统的ftp文件传输协议

2.加密文件

[[email protected] vsftpd]# db_load -T -t hash -f userdb userdb.db                         #加密(userdb为明文文件,不安全,需要加密)

[[email protected] vsftpd]# file userdb                                                                         #查看文件类型(非必须操作)

userdb: ASCII text
[[email protected] vsftpd]# file userdb.db
userdb.db: Berkeley DB (Hash, version 9, native byte-order)

3.设定策略文件

[[email protected] pam.d]# vim ftpuser

account         required    pam_userdb.so        db=/etc/vsftpd/userdb

auth               required    pam_userdb.so        db=/etc/vsftpd/userdb


linux系统的ftp文件传输协议

account                                          #帐号

auth                                                #密码

required                                         #必须要通过验证,否则失败

pam_userdb.so                             #模块

db=/etc/vsftpd/userdb                   #名单

4.修改文件配置

vim /etc/vsftpd/vsftpd.conf

linux系统的ftp文件传输协议

127 pam_service_name=ftpuser                                             #指定PAM配置文件,文件在第3步已经创建
128 userlist_enable=YES                                                         #允许匿名用户同时登录
129 guest_enable=YES                                                            #启动匿名用户

130 guest_username=ftp                                                          #虚拟帐号身份指定,ftp是真实存在的用户

systemctl restart vsftpd.service

测试:

linux系统的ftp文件传输协议

排错:

1.密码输入错误

2.虚拟帐号信息未加密

3.策略文件中将加密文件名称写错

4.配置文件编辑错误(后面的YES|NO必须大写,否则重启vsftpd会提示:job of vsftpd.service failed)

5.传输时名称输入错误


10.虚拟帐号家目录设定

(1)虚拟帐号登录使用同一个家目录

[[email protected] pam.d]# mkdir /vftpdir                                         #建立虚拟用户家目录
[[email protected] pam.d]# touch /vftpdir/vftpfile                             #建立虚拟用户目录
[[email protected] pam.d]# vim /etc/vsftpd/vsftpd.conf

131 local_root=/vftpdir                                                                   #对虚拟用户默认目录进行设置

linux系统的ftp文件传输协议

[[email protected] pam.d]# systemctl restart vsftpd.service

测试:

linux系统的ftp文件传输协议

(2)虚拟帐号家目录独立设定

131 local_root=/vftpdir/$USER                                                     #对虚拟用户目录进行设置

132 user_sub_token=$USER                                                        #安全认证

linux系统的ftp文件传输协议

操作步骤:

[[email protected] pam.d]# mkdir /vftpdir                                         #建立虚拟用户家目录

[[email protected] pam.d]# cd /vftpdir/
[[email protected] vftpdir]# mkdir user{1..3}                                    #建立虚拟用户的独立目录
[[email protected] vftpdir]# ll
total 0
drwxr-xr-x 2 root root 6 May 11 10:38 user1
drwxr-xr-x 2 root root 6 May 11 10:38 user2
drwxr-xr-x 2 root root 6 May 11 10:38 user3
[[email protected] vftpdir]# touch user1/user1file                            #建立属于user1的文件
[[email protected] vftpdir]# touch user2/user2file
[[email protected] vftpdir]# touch user3/user3file
[[email protected] vftpdir]# vim /etc/vsftpd/vsftpd.conf
[[email protected] vftpdir]# systemctl restart vsftpd.service


测试:

linux系统的ftp文件传输协议


11.虚拟帐号配置的独立设置

133 user_config_dir=/etc/vsftpd/conf_dir                                               #虚拟用户权限配置文件/etc/vsftpd/conf_dir目录下

操作步骤:

[[email protected] vftpdir]# mkdir /vftpdir/user{1..3}/pub
[[email protected] vftpdir]# vim /etc/vsftpd/vsftpd.conf

linux系统的ftp文件传输协议

[[email protected] vftpdir]# systemctl restart vsftpd.service
[[email protected] vftpdir]# chgrp ftp user{1..3}/pub                                        #改变组为配置文件中已经存在的组
[[email protected] vftpdir]# chmod 775 user{1..3}/pub                                   #修改权限
[[email protected] vftpdir]# mkdir -p /etc/vsftpd/conf_dir

[[email protected] vftpdir]# vim /etc/vsftpd/vsftpd.conf              #注释掉上传文件功能,因为虚拟用户使用的是匿名用户,可以查看效果

linux系统的ftp文件传输协议

[[email protected] vftpdir]# systemctl restart vsftpd.service

[[email protected] vftpdir]# vim /etc/vsftpd/conf_dir/user2        #编辑user2的配置文件,只对user2可用,此文件比主配置文件优先级高

anon_upload_enable=YES                                                                            #可以上传

linux系统的ftp文件传输协议


测试:

linux系统的ftp文件传输协议

匿名用户除了user2可以上传,其他匿名用户都没有权限上传