Linux基础命令(二十二)FTP服务

一、FTP简介

        FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通 过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。

        默认情况下FTP 协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定

        核心而FTP会建立两个连接,将命令(21)与数据(20)分开传输,正是因为这样,提高了传输效率。

        同大多数Internet服务一样,FTP也是一个C/S。用户通过一个客户机程序连接至在远程计算机上运行的服务器程序。依照 FTP 协议提供服务,进行文件传送的计算机就是 FTP服务器;而连接FTP服务器,遵循FTP协议与服务器传送文件的电脑就是FTP客户端。用户要连上FTP 服务器,就要用到 FTP 的客户端软件Windows常用的 FTP 客户程序是FileZilla!Linux一般使用的服务器端是vsftpd,而客户端是lftp

二、FTP的实践

    1)服务器端环境的搭建

(1)vsftpd的开机自启

yum install -y vsftpd.x86_64 
systemctl start vsftpd
systemctl status vsftpd
systemctl enable vsftpd

(2)将ftp服务加到防火墙的策略上

systemctl status firewalld.service 
firewall-cmd --permanent --add-service=ftp
firewall-cmd --list-all
systemctl reload firewalld.service 
firewall-cmd --list-all

补充: firewall-config进行图形配置!

(3)关闭selinux,以免对ftp服务产生影响,重启才生效

vim /etc/sysconfig/selinux  #是个软连接文件

reboot

(4)测试selinux的状态-->getenforce

      2)客户端的配置

lftp ip              #没有安装客户端的软件

yum install -y lftp  #安装

lftp ip              #进行简单的测试,或者通过ftp://ip/ -->到/var/ftp 即ftp的默认发布目录

ls                   #表示登陆成功

     3)相关的说明

        3.1)FTP不同等级的用户身份

(1) 本地用户 -->local------>ftp服务器上真实存在的(id user可以查询的)

(2) 匿名用户 -->anonymous-->游客 身份(vsftpd在触发进程的时候,默认是以系统的ftp作为用户身份)

(3) 虚拟用户 -->guest------>id user(不可查询到)

思考:虚拟用户原因-->只想让其具备FTP的功能,最大限度的保障安全!

        3.2)客户端登陆FTP服务器的一些状态码的含义

(1)500 -->一般是文件系统的权限过大,主要是登陆的用户对ftp发布目录(不一定是默认的)具有w的权限,认为不安全!

(2)530 -->用户认证失败(可以登陆,但是口令不匹配)

(3)550 -->Permission denied,服务本身的功能没有开启(一般是实际条件达到了,但是ftp尚未开启功能,等于是限制了此功能)

(4)553 -->本地系统文件权限过小(一般是ftp相应的功能开启,但是实际条件达不到)-->put上传文件!

说明:通过状态码准确的定位错误点!

       3.3)配置文件以及配置的形式

/etc/vsftod/vsftpd.conf

#功能参数=值

    4)从用户需求来谈配置文件

    把握:通过man 5 vsftpd.cong的帮助文档,了解ftp帮我们做了什么?

    了解:由于开放匿名用户部分功能不安全,所以对匿名用户的权限是进行细化的,各个功能模块是相互独立的!

四、匿名用户

默认开放的功能:可以登陆,能下载可以下载文件,默认的身份是ftp,umask的权限是077,默认不限制速率,发布目录是/var/ftp

    需求1:匿名用户登陆 

anonymous_enable=YES #默认值(去记忆)

    需求2:匿名用户的上传

(1)改变ftp服务器针对匿名用户的发布目录下的pub目录的权限

chmod 775 /var/ftp/pub  -->如果改成777,则匿名用户"直接"有w的权限会出现500

chgrp ftp /var/ftp/pub  -->改变此目录所属用户组,ftp用户具有w的权限

(2)配置文件中的修改

write_enable=YES        #默认开启

anon_upload_enable=YES  #默认NO,是不开启的(记忆-->匿名_上传_能码),如果不开启出现550的提示!

    需求3:改变匿名用户上传文件权限用户属性

(1)前提是能上传,再来谈上传文件权限和用户属性的问题

anno_umask=077 #默认umask是077,可以自定义!

    需求4:匿名用户的下载

(1)用户身份对当前目录x的权限,对当前的文件有r的权限!(打铁还得自身硬)

(2)服务功能的开启

 anon_world_readable_only=YES #默认是YES,开启的(匿名_全部_可读_只有)

注意:你在哪个地方登陆的就下载到哪个地方,下载的文件的权限和属性是你在登陆ftp服务器之前所使用的用户!

    需求5:匿名用户删除重命名文件

(1)改变ftp服务器针对匿名用户的发布目录的权限

chmod 775 /var/ftp  -->如果改成777,则你名用户有w的权限会出现500

chgrp ftp /var/ftp  

(2)配置文件中的修改

write_enable=YES #默认开启

anon_another_write_enable=YEs #默认是NO,不开启的

(3)rm、mv的测试

    需求6:匿名用户创建目录

(1)匿名用户对当前目录有w的权限

(2)开启创建目录的功能
 
 anon_mkdir_write_enable=YES #默认是NO,不开启

    需求7:匿名用户下载速率、最大的连接数(针对所有的用户) 

(1)老规矩,前提是可以下载

(2)下载速度以字节作为单位

 anon_max_rate=102400 #默认是0,表示不限制速度,这里表示100KB-->测试dd截取文件,然后测试速度!

 max_clients=3        #默认是2000,0表示关闭限制,性能问题!

    需求8:匿名用户上传文件身份修改

(1)默认是ftp,注意此用户必须是真实存在的用户

(2)功能配置

 chown_uploads=YES        #默认是NO,是否允许改变上传文件的权限和文件的"用户"属性(总开关!)

 chown_username=kiosk     #默认是root(不建议),此参数与chown_uploads关联!
 
 chown_upload_mode=0644   #默认是0600(包含特殊权限),强制改变用户上传文件的权限

 此参数的说明:只要可以上传就可以,不关联chown_uploads),是mask的值,不是umask的数值!

    需求9:匿名用户家目录的修改

(1)root用户先创建匿名用户的家目录

 mkdir /var/anonymoushome/

 chmod 755 /var/anonymoushome/

 chgrp student /var/anoymoushome/

(2)功能的开启

 ftp_username=student          #默认是ftp,表示匿名用户登陆的所使用的身份!

 anon_root=/var/anonymoushome/ #默认是none,没有家目录,会进入ftp默认的发布目录!

说明1:这里匿名用户登陆的身份是student

说明2:vsftpd进程产生PID,匿名student登陆后,底层会以student的身份去cd进行切换家目录(这是上面操作的原因)

说明2:由于是匿名用户身份登陆,所以不会进入student的家目录!

    需求10匿名验证登陆

(1)配置文件

anonymous_enable=YES     #首先匿名用户得能登陆

no_anon_password=NO      #默认是NO,表示登陆的时候会检查输入的Email,不会忽略密码的检查步骤(密码默认是空)!

说明:登陆的时候会检查输入的Email

deny_email_enable=YES    #默认是NO,表示开启Email address黑名单模式!

场景:当匿名用户使用banned_email_file文件中所列出的e-mail进行登录时,被拒绝。对于阻击某些Dos攻击有效

banned_email_file=/etc/vsftpd/banner_emails

说明1:此选项是关联deny_email_enable的,规定哪个E-mail addres 禁止登陆(黑名单)

说明2:一行输入一个Email address

使用匿名登录时,用户名为:anonymous,密码为:任何合法email地址

默认:ftp和anonymous

思考:进入匿名FTP服务器的用户和密码是什么?

说明:任何用户都可使用“anonymous”为账号,以自己的电子邮件地址为口令登录到FTP服务器,使用该服务器提供的服务!

DOS攻击

一道习题

FTP状态码的汇总

   需求1:匿名用户是否随意切换目录

 4.2)本地用户

     说明:默认对本地用户的限制比较小!

     (1)基本配置

 local_enable=YES #默认值,表示允许本地登陆

 write_enable=YES #默认值,表示允许本地用户像在本地操作一样

 local_max_rate=0 #默认值,表示不限制传输速度

 local_umask=077  #本地用户上传文件的默认数值

 local_root=none  #表示"本地用户"登陆后家目录(none表示默认),可以自定义家目录的位置(用户对该目录有w的权限),拿/var/ftp测试

 聊一聊:chroot(change root)

         白话:改变根目录单意思,根目录的参照物是/还是用户自己的家目录或者自定义的家目录,是一个开关!

        系统安全:避免用户在Linux系统中随意的逛街(离开用户的主目录而进入到其它的LInux系统的目录中),需要将本地用户工作范围局限在用户的主目录下面,让其只能使用FTP的功能!

    (2)锁定所有的用户在自己的家目录

 chroot_local_user=YES #默认是NO,不锁定用户到自己的家目录(就像在本地主机用本地用户登陆一样)

 chmod u-w /home/*     #否则出现550的问题,文件权限过大!

 注意:如果不锁定,用户具有上传权限和shell访问权限!

    (3)锁定部分用户在自己的家目录

           3.1)本地用户的名单

 chroot_local_user=NO   #默认是NO,表示不将用户限制在其家目录中!

 chroot_list_enable=YES #默认是NO,不开启此功能选项,这里是YES表示使用下列文件中的名单作为限制随意切换目录的本地用户!

 chroot_list_file=/etc/vsftpd/chroot_list #说明,与chroot_list_enabl进行关联,黑名单用户!

 注意:白名单的用户家目录不能具有w的权限(不安全,强制的角度)

 思考:连接特别慢的原因?

    注意:黑名单的的理解,不是禁止登陆的意思,而是是否用户登陆后限定在家目录中!

          3.2)本地用户的名单

 chroot_local_user=YES  #默认是NO,表示不将用户限制在其家目录中,YES表示限制!

 chroot_list_enable=YES #默认是NO,不开启此功能选项,这里是YES表示使用下列文件中的名单作为允许切换目录的本地用户!

 chroot_list_file=/etc/vsftpd/chroot_list #说明,与chroot_list_enabl进行关联,白名单用户!

    说明:白名单表示此本地用户登陆后可以切换到其它目录!

    (4)限制本地用户的登陆

        4.1)永久

(1)/etc/vsftpd/ftpusers是永久黑名单

起作用的原因:vaftpd使用PAM模块的相关配置文件/etc/pam.d/vsftpd作为身份认证,阻挡部分不安全的用户登陆!

想将某些用户禁止登陆,可以将本地用户添加到此名单中,一行一个用户(及时生效)!

       4.2)临时名单

(1)/etc/vsftpd/user_list

特点:是vsftpd"自定义"的阻拦访问项目,默认与/etc/vsftpd/ftpusers内容想同!

(2)起作用前提(功能的开启-->黑白名单--->具体的名单)

userlist_enable=YES #表示开启userlist的功能!

userlist_deny=NO   #默认是YES表示下面文件的内容是黑名单,现在是NO表示禁止不在/etc/vsftpd/user_list的本地用户ftp登陆

userlist_file=/etc/vsftpd/user_list #白名单

Login failed: 530 Permission denied(黑名单的原因)-->[Loging in]

Login failed: 530 Login incorrect(密码错误)

补充:此/etc/vsftpd/user_list中填入anonymous或者ftp(禁止和允许匿名用户的登陆)

特点说明:这个黑白名单同时也针对于虚拟用户,要慎用

解决FTP登陆太慢

4.4)虚拟用户!!!

   4.4.1)虚拟用户的一般使用

核心步骤

(1)创建虚拟帐号的身份

说明;在/etc/vsftpd/目录下,文件名自定义

guestfile -->格式(用户和密码交互,空格也是字符,最好不要有空格),不一定非要在此目录下创建此文件

(2)生产相应的数据库

db_load -T(转换) -t(加密的格式) hash(加密) -f(加密的文件) /etc/vsftpd/guestfile /etc/vsftpd/ftpfile.db

(3)谁认证-->通过rpm -qc vsftpd.x86_64 -->/etc/pam.d/vsftpd(看此格式的书写)

说明:认证需要口令,谁来认证

注意:用户名和密码都需要认证!

rpm -qc pam.x86_64 -->参照!

(4)参照 /etc/pam.d/vsftpd -->格式照着这个写

在此目录下vim 编辑文件 guestauth

account required(存在则进入,没有则滚蛋) pam_userdb.so(认证的工具) db=/etc/vsftpd/guestfile(注意:会自动加上.db)

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

(5)在/etc/vsfpd/vsftpd.conf进行关联

  5.1)pam_service_name=guestauth(默认从/etc/pam.d中寻找)
  5.2)guest_enable(开启虚拟用户)
  5.3)guest_username(虚拟用户使用的身份),虚拟用户也是使用ftp服务器上实际存在的用户!
  5.3)userlist_enable=YES -->好好体会这个选项,后续默认数值(userlist_deny=YES),虚拟用户不在黑名单之列!

说明:文件最好是自动补全!      

    4.4.2)虚拟用户独立家目录   

   说明:由于采用了ftp作为虚拟用户的身份所以会进入/var/ftp的目录中

说明:接上一步的操作

(1)创建虚拟用户的家目录

mkdir /var/guesthomedir/
cd /var/guesthomedir/
mkdir user{1..3}
chmod u-w /var/questhomedir/*
touch /var/guesthomedir/user1/user1file1
touch /var/guesthomedir/user2/user1file2
touch /var/guesthomedir/user3/user1file3

说明:创建文件的原因-->看虚拟用户登陆之后是否能看到自己家目录的文件!

(2)vsftpd.conf的配置文件-->说明(虚拟用户和本地用户的"共通"点)-->上面也有一个案例!

local_root=/var/guesthomedir/$USER    #默认是none(表示默认);现在-u 指定的用户填入,注意与本地用户有冲突!

user_sub_token=$USER                  #声明变量,告诉ftp这个变量的使用就和shell中的一样

     4.4.3)虚拟用户独立配置文件

说明:接上述步骤

(1)建立虚拟用户的配置文件-->man 5 vsftpd.conf帮助文档

mkdir -p /etc/vsftpd/user_conf

touch /etc/vsftpd/user_conf/user{1..3}  #注意:文件名和用户名雷同

(2)配置文件的声明

user_config_dir= /etc/vsftpd/user_conf  #说明:guest用户登陆的时候会从此配置目录中找相应虚拟用户的配置文件(局部配置文件)

说明:因为用的是ftp的身份(虚拟用户),可能会受限制,最好原始的匿名用户设置为默认值!

测试:全局和局部的都设置,看是局部覆盖,还是全局优先!

结论:局部的会覆盖全局当前的设置!

关注pam对vsfpd的控制

三、全局设置

需求:

  0)用户登陆显示相应的信息,并且为了保持性能设置最大的连接数目

  1)本地用户禁止登陆,因为本地用户可以通过ssh来建立连接

  2)匿名用户只能下载文件,并且下载速度受限制

  3)虚拟用户,对一部分虚拟用户开启上传的权限(高级用户:反馈信息),一部分虚拟用户可以下载(下载速度不受限制)

注意:如果想设置上传文件的数目以及可以使用的硬盘的数量等-->虚拟用户的身份需要设置成本地用户(非ftp),并且开启配额等!

思考:/etc/nologin --->lftp非匿名用户登陆的关系!

底层原理

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值