• Centos7安装搭建FTP服务器


    简介:

    vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。

    vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。

    比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。

    vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用。

    特点:

    ①vsftpd 是以一般身份启动服务,所以对于 Linux 系统的使用权限较低,对于Linux 系统的危害就相对的减低了。此外, vsftpd 亦利用 chroot() 这个函式进行改换根目录的动作,使得系统工具不会被vsftpd 这支服务所误用;
     
    ②任何需要具有较高执行权限的 vsftpd 指令均以一支特殊的上层程序( parent process ) 所控制 ,该上层程序享有的较高执行权限功能已经被限制的相当的低,并以不影响Linux 本身的系统为准;
     
    ③所有来自 clients 端,想要使用这支上层程序所提供的较高执行权限之vsftpd 指令的需求,均被视为『不可信任的要求』来处理,必需要经过相当程度的身份确认后,方可利用该上层程序的功能。例如chown(), Login 的要求等等动作;
     
    ④此外,上面提到的上层程序中,依然使用 chroot() 的功能来限制使用者的执行权限。

    1.安装vsftpd

    环境:CentOS Linux release 7.6.1810 (Core)

    vsftpd版本:vsftpd.x86_64 0:3.0.2-25.el7 

    1.1、执行yum命令安装

    [root@Sungeek ~]# yum -y install vsftpd

    1.2、修改配置文件

    按照下面修改配置文件

    [root@Sungeek ~]# cd /etc/vsftpd
    [root@Sungeek ~]# vim vsftpd.conf
    #是否允许匿名,默认no
    anonymous_enable=NO
    
    #这个设定值必须要为YES 时,在/etc/passwd内的账号才能以实体用户的方式登入我们的vsftpd主机
    local_enable=YES
    
    #具有写权限
    write_enable=YES
    
    #本地用户创建文件或目录的掩码
    local_umask=022
    
    #当dirmessage_enable=YES时,可以设定这个项目来让vsftpd寻找该档案来显示讯息!您也可以设定其它档名!
    dirmessage_enable=YES
    
    #当设定为YES时,使用者上传与下载日志都会被纪录起来。记录日志与下一个xferlog_file设定选项有关
    xferlog_enable=YESxferlog_std_format=YES
    
    #上传与下载日志存放路径
    xferlog_file=/var/log/xferlog 
    
    #开启20端口
    connect_from_port_20=YES
    
    #关于系统安全的设定值:
    #ascii_download_enable=YES(NO)
    #如果设定为YES ,那么 client 就可以使用 ASCII 格式下载档案。
    #一般来说,由于启动了这个设定项目可能会导致DoS 的攻击,因此预设是NO。
    #ascii_upload_enable=YES(NO)
    #与上一个设定类似的,只是这个设定针对上传而言!预设是NO。
    ascii_upload_enable=NO
    ascii_download_enable=NO
    #通过搭配能实现以下几种效果: 
    #①当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时,所有的用户均可以切换到其他目录。
    
    chroot_local_user=YES
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list
    
    #这个是pam模块的名称,我们放置在/etc/pam.d/vsftpd
    pam_service_name=vsftpd
    
    #当然我们都习惯支持TCP Wrappers的啦!
    tcp_wrappers=YES
    
    #不添加下面这个会报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
    allow_writeable_chroot=YES
    
    #ftp的端口号
    listen_port=60021
    #启动被动式联机(passivemode)
    pasv_enable=YES
    #上面两个是与passive mode 使用的 port number 有关,如果您想要使用65400到65410 这 11 个 port 来进行被动式资料的连接,可以这样设定
    pasv_min_port=65400
    pasv_max_port=65410
    
    #FTP访问目录
    local_root=/data/ftp/

    1.3、添加防火墙开启相关端口

    这里要是测试可以先关闭防火墙

    [root@tsemongo01 vsftpd]# systemctl stop firewalld

    如果是正式环境,最好开启防火墙,添加相应端口

    #添加主端口
    [root@tsemongo01 vsftpd]# firewall-cmd --permanent --zone=public --add-port=60021/tcp
    success
    #添加被动端口
    [root@tsemongo01 vsftpd]# firewall-cmd --permanent --zone=public --add-port=65400-65410/tcp
    success
    [root@tsemongo01 vsftpd]# firewall-cmd --reload 
    success

    2、创建FTP用户

    添加FTP用户命令:useradd XXX

    设置FTP用户密码:passwd XXX

    [root@Sungeek vsftpd]# useradd -d /data/ftp/ -s /sbin/nologin ftpuser
    [root@Sungeek vsftpd]# passwd ftpuser

    查看FTP用户是否设置不能通过SSH登录,只能使用FTP

    [root@Sungeek vsftpd]# vim /etc/passwd

    找到创建的用户把/bin/bash修改为/sbin/nologin

     设置用户访问权限:

    [root@Sungeek vsftpd]# chown -R ftpuser /data/ftp

    3、设置vsftpd服务开机启动

    [root@Sungeek ~]# systemctl enable vsftpd.service

    4、启动暂停查看服务状态命令

    [root@Sungeek ~]# systemctl start vsftpd.service 
    [root@Sungeek ~]# systemctl status vsftpd.service 

    5、常见问题

    5.1、问题1:

    这种情况是说明配置文件里面设置的chroot_list_file=/etc/vsftpd/chroot_list没找到这个文件

    直接去/etc/vsftpd目录cp一个user_list或者把配置文件里面改名就行

    5.2、问题2:

     这种情况是selinux没有关闭,关闭selinux即可

    [root@localhost ~]# vim /etc/selinux/config
    
    SELINUX=disabled

    主动FTP:

    1. 在主动模式下,客户端会开启N和N+1两个端口,N为客户端的命令端口,N+1为客户端的数据端口。

    第一步,客户端使用端口N连接FTP服务器的命令端口21,建立控制连接并告诉服务器我这边开启了数据端口N+1。

    第二步,在控制连接建立成功后,服务器会使用数据端口20,主动连接客户端的N+1端口以建立数据连接。这就是FTP主动模式的连接过程。

    我们可以看到,在这条红色的数据连接建立的过程中,服务器是主动的连接客户端的,所以称这种模式为主动模式。


         命令连接:客户端 >1023端口 -> 服务器 21端口
         数据连接:客户端 >1023端口 <- 服务器 20端口 

    被动FTP:

    2.被动模式下

    第一步,客户端的命令端口N主动连接服务器命令端口21,并发送PASV命令,告诉服务器用“被动模式”,控制连接建立成功后,服务器开启一个数据端口P,通过PORT命令将P端口告诉客户端。

    第二步,客户端的数据端口N+1去连接服务器的数据端口P,建立数据连接

    我们可以看到,在这条红色的数据连接建立的过程中,服务器是被动的等待客户端来连接的,所以称这种模式为被动模式。


         命令连接:客户端 >1023端口 -> 服务器 21端口
         数据连接:客户端 >1023端口 -> 服务器 >1023端口 

  • 相关阅读:
    js原型链原理看图说话
    this关键字
    ECMAScript 继承机制实现
    Javascript闭包模拟私有成员
    关于javascript中apply()和call()方法的区别
    arguments.callee
    有用的工具函数
    ECMAScript的世界
    JavaScript 技巧与高级特性
    自定义控件不让在界面拖放。
  • 原文地址:https://www.cnblogs.com/lgjava/p/13134936.html
Copyright © 2020-2023  润新知