当前位置:   article > 正文

Linux ❉ FTP服务器_setsebool -p tftp_home_dir on

setsebool -p tftp_home_dir on

FTP是应用层的文件共享服务

(1)应用程序:

  • 架构C/S
  • 客户端
  • 服务端

(2)服务端口:

  • TCP21 命令端口
  • TCP20 数据端口,是否会用到20端口与FTP传输模式有关,主动模式使用20端口传输,被动模式下服务器端和客户端协商决定端口。

(3)服务模式:

  • 被动模式-/passive/pasv方式
  • 主动模式-/standard/port方式,服务器使用20端口连接客户端

一 模式简介

1 主动模式FTP

        主动模式下,FTP客户端从任意的非特殊的端口(N > 1023)连入到FTP服务器的命令端口–21端口。然后客户端在N+1(N+1 >= 1024)端口监听,并且通过N+1(N+1 >= 1024)端口发送命令给FTP服务器。服务器会反过来连接用户本地指定的数据端口,比如20端口。
以服务器端防火墙为立足点,要支持主动模式FTP需要打开如下交互中使用到的端口:
        用图表示如下:

以服务器端防火墙为立足点,要支持主动模式FTP需要打开如下交互中使用到的端口:

  • FTP服务器命令(21)端口接受客户端任意端口(客户端初始连接)
  • FTP服务器命令(21)端口到客户端端口(>1023)(服务器响应客户端命令)
  • FTP服务器数据(20)端口到客户端端口(>1023)(服务器初始化数据连接到客户端数据端口)
  • FTP服务器数据(20)端口接受客户端端口(>1023)(客户端发送ACK包到服务器的数据端口)
     

2 被动模式FTP

        为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。在被动方式FTP中,命令连接和数据连接都由客户端,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。当开启一个FTP连接时,客户端打开两个任意的非特权本地端口(N > 1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P > 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。

         用图表示如下:

        

        对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:

  • FTP服务器命令(21)端口接受客户端任意端口(客户端初始连接)
  • FTP服务器命令(21)端口到客户端端口(>1023)(服务器响应客户端命令)
  • FTP服务器数据端口(>1023)接受客户端端口(>1023)(客户端初始化数据连接到服务器指定的任意端口)
  • FTP服务器数据端口(>1023)到客户端端口(>1023)(服务器发送ACK响应和数据到客户端的数据端口)
     

3 两种模式优缺点


        主动模式对ftp对服务器管理有利,是由FTP服务器主动与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞。而被动模式对客户端管理有效,它是企图 与服务端的随机端口建立连接但是这个端口很可能又会被服务端的防火墙所拒绝。
        一般做安全措施我们是在被动模式下做,由于主动模式是打开一个端口给客户端传送数据,我们做安全措施都是基于端口来做所以不太好做,一般也不建议去做。但是被动模式也是在不停地放端口,所以慢慢的ftp慢慢的在淘汰。

防火墙的意义:
链接追踪/RELATED------
自动监听该端口,并且设置防火墙允许被人来访问该端口

FTP的用户转换:
匿名用户–>系统用户
虚拟用户–>系统用户

二 实机安装

  1. [root@slave1 ~]# yum install -y vsftpd
  2. [root@slave1 ~]# systemctl restart vsftpd

两个配置文件

  1. # 主配置文件
  2. [root@slave1 ~]# vim /etc/vsftpd/vsftpd.conf
  3. # 从配置文件
  4. [root@slave1 ~]# vim /var/ftp/pub

主配置文件的详解:

  1. anonymous_enable=YES //是否启用匿名用户
  2. local_enable=YES
  3. write_enable=YES //允许写入(无论是匿名用户还是本地用户要实现上传就需要快开启它)
  4. local_umask=022 //默认本地用户上传文件权限755
  5. dirmessage_enable=YES //显示每个目录下的文件信息
  6. xferlog_enable=YES //日志启用
  7. connect_from_port_20=YES //主动请求的数据端口
  8. chown_uploads=YES //所有匿名用户上传的文件所属用户将会被改成chown_username
  9. chown_username=whoever //匿名上传的所属用户名是whoever
  10. xferlog_file=/var/log/xferlog //启用的日志文件
  11. xferlog_std_format=YES
  12. idle_session_timeout=600 //空闲连接超时
  13. data_connection_timeout=120 //数据连接超时
  14. nopriv_user=ftpsecure //当服务器运行于最底层时使用的用户名
  15. chroot_list_enable=YES chroot_local_user=YES //所有文件列出用户, 可以切换到其他目录
  16. chroot_list_file=/etc/vsftpd/chroot_list
  17. listen=NO //服务将自己监听处理listen_ipv6=YES
  18. pam_service_name=vsftpd //设置PAM认证模块使用名称预设为vsftpd
  19. userlist_enable=YES
  20. tcp_wrappers=YES //服务端和客户端访问控制策略(服务器级别的一种防火墙)
  21. Mime

三 测试

        1 匿名用户

(1)下载

默认配置下即可实现

[root@slave1 ~]# echo hehe > /var/ftp/pub/hehe.txt

去ie浏览器访问该地址:

 在Windows资源管理器中:

 (2)上传

  1. [root@slave1 ~]# vim /etc/vsftpd/vsftpd.conf
  2. anon_umask=022
  3. anon_upload_enable=YES
  4. anon_mkdir_write_enable=YES
  5. # 修改匿名用户目录的权限
  6. # 修改后注意要重启服务
  7. [root@slave1 ftp]# systemctl restart vsftpd
  8. [root@slave1 ftp]# chmod 777 pub/
  9. # 测试可以上传 和下载文件但是不能删除或者替换文件

(3) 删除

  1. [root@slave1 ftp]# vim /etc/vsftpd/vsftpd.conf
  2. anon_other_write_enable=YES
  3. # 再上传下载的前提下可以删除文件,以及替换文件

 修改匿名上传布尔值

  1. [root@slave1 var]# getsebool -a | grep ftpd_anon_write
  2. ftpd_anon_write --> on
  3. [root@slave1 ftp]# setsebool ftpd_anon_write on
  4. #修改匿名上传的上下文权限
  5. [root@slave1 var]# ll -Z /var/ftp
  6. drwxr-xrwx. root root system_u:object_r:public_content_rw_t:s0 pub
  7. [root@slave1 ftp]# chcon -t public_content_rw_t pub/

2 本地用户

(1)上传和删除

将上一轮匿名用户的配置抹除

  1. # 此处修改
  2. anonymous_enable=NO
  3. # 下面注释掉
  4. anon_umask=022
  5. anon_upload_enable=YES
  6. anon_mkdir_write_enable=YES

修改布尔值打开/home目录的权限

  1. [root@slave1 ~]# getsebool -a | grep ftp_home_dir
  2. tftp_home_dir --> off
  3. [root@slave1 ~]# setsebool -P tftp_home_dir on

测试访问:ftp://ip需要通过用户名密码进行登录,默认访问的界面是该用户目录下的所有文件,(注意除root用户),可以通过本地用户上传文件和下载文件也可以删除文件。弊端是:可以来回切换都可以通过本地用户的身份看到/下的所有东西。

 (2)遍历

开启chroot选项

  1. [root@lave1 ftp]# vi /etc/vsftpd/vsftpd.conf
  2. allow_writeable_chroot=YES
  3. #然后使用下面两个选项之一,第一种是本地用户不能上下翻,第二种是指定列表用户不能翻。
  4. #指定本地用户不能chroot,不能翻
  5. chroot_local_user=YES
  6. #开启通过列表的方式来指定用户
  7. chroot_list_enable=YES
  8. #指定用户列表文件
  9. chroot_list_file=/etc/vsftpd/chroot_list
  10. #在当前目录创建用户列表文件
  11. [root@lave1 vsftpd]# cat chroot_list
  12. wangjie
  • 当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd/chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。
  • 当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd/chroot_list 文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录。
  • 当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到其他目录。
  • 当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录。
     

遇到的问题及解决方式:

1

安装完vsftpd软件后,因为CentOS系统的SELinux安全策略默认是没有开启FTP服务,直接访问会报错500 OOPS,所以需要修改为允许使用FTP服务。

目标:希望ftp用户可以访问自己的家目录

  1. [root@slave1 ~]# setsebool -P ftp_home_dir on
  2. Boolean ftp_home_dir is not defined

发现会报错

搜了一下原来是CentOS7开始用 tftp_home_dir 来代替了 ftp_home_dir ,所以应该修改如下:

[root@slave1 ~]# setsebool -P tftp_home_dir on

关闭selinux直接执行本地用户会发现本地用户家目录不能访问,开启selinux后执行上面的家目录定义后可以访问,后续还需要重新实验以继续验证

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/139958
推荐阅读
  

闽ICP备14008679号