• CentOS下Proftpd环境部署并使用虚拟用户登录


    一、Proftpd介绍
    Proftpd的全称是Professional FTP daemon,是针对Wu-FTP的弱项而开发的,软件在经过多年的发展之后完善了很多功能,ProFTP已经成为继Wu-FTP之后最为流行的FTP服务器软件,越来越多的站点选用它构筑安全高效的FTP站点。Proftpd软件和vsftpd一样是一个开放源代码的ftp服务器软件,但是可配置项比vsftpd要多,是目前比较流行的ftp软件,Proftpd的配置和apache的配置相似,因此该软件也十分容易配置和管理。

    Proftpd和VSftpd二者区别
    ===== vsftpd =====  
    全称Very secure FTP daemon。比ProFTPD 具有更高的安全性。vsftpd使用一般身份启动服务,降低了FTP服务的PID权限,使该服务即使被入侵也无法得到有效的系统管理权限。同时vsftpd利用chroot软件来改变登录者的根目录,使登陆者只能在这个目录中活动,限制了登录者的执行权限。vsftpd通过配置vsftpd.conf文件来完成部署,设定简单,登录者仅分为anonymous和real user 两种。可以使用standalone和super daemon的方式启动。vsftpd无法控制每个目录的流量、不能控制上传和下载的比例、不能针对不同的登陆者进行不同的权限设定。

    ===== Proftpd=====
    由于Proftpd在自身的原始码中已经包含了所需要的执行指令,不需要Linux系统本机的执行程序的支持,所以在系统安全上更为安全。配置简单且灵活,安装后只需要设定proftpd.conf一个配置文件即可,可配置性更强。可以使用stand-alone或者super daemon方式来启动ftp服务。Proftpd可以控制上下传比例,实现流量控制,针对不同的目录设定不同的权限。登录者分为anonymous和real user两种。

    Proftpd比较好用的功能有以下几点:
    1)目录访问权限配置灵活,配置简单。
    2)能够不依赖系统用户,可以使用独立的虚拟用户系统(使用过Serv-U的朋友应该深有体会,配置非常方便,对原有系统环境影响较小)
    3)对中文的支持良好,完美解决vsftpd中文引号bug。因为vsftpd在中文支持方面存在bug,对中文中一些字符的支持不是很好(比如对中文的双引号支持不是很好)。

    FTP部署的背景
    公司四个部门分别为运维部、开发部、销售部、行政部:
    1)各部门用户访问FTP后可以看到所有目录,仅可以访问本部门的目录;
    2)需要FTP日志功能;
    3)FTP认证方式基于文件认证方式;
    4)共享目录:/var/ftp;

    二、Proftpd 安装记录

    测试机器为Centos7.5,iptables和selinux均关闭
    
    1)下载ProFTP
    [root@localhost ~]# wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.6.tar.gz
    [root@localhost ~]# tar -zvxf proftpd-1.3.6.tar.gz -C /usr/src/
    [root@localhost ~]# cd  /usr/src/proftpd-1.3.6/
    [root@localhost proftpd-1.3.6]# ./configure  --prefix=/usr/local/proftpd  --sysconfdir=/etc/  --enable-nls  --enable-openssl  --enable-shadow
    
    ==================================================================================================================
    编译参数说明(可通过"./configure --help" 查看帮助选项):
    --prefix=PREFIX         指定安装路径(--prefix=/usr/local/)               
    --sysconfdir=DIR        指定FTP服务配置文件路径(--sysconfdir=/etc)                   
    --localstatedir=DIR     指定运行状态的文件存放位置(默认/var/proftpd)                  
    --with-modules=mod_ldap 指定加载功能模块                         
    --enable-memcache       支持缓存功能                           
    --enable-nls            支持多语言环境(如中文),安装完成后在主配置文件中需要指定字符编码(UseEncoding UTF-8 CP936)  
    --enable-openssl        支持TLS加密FTP服务                         
    --enable-shadow         支持使用/etc/shadow验证用户密码 
    
    ==================================================================================================================
    
    注意需要GCC编译器  
    [root@localhost proftpd-1.3.6]# make 
    [root@localhost proftpd-1.3.6]# make install
    
    
    2)添加环境变量
    [root@localhost proftpd-1.3.6]# vim /etc/profile
    ........
    PATH=$PATH:/usr/local/proftpd/bin
    
    [root@localhost proftpd-1.3.6]# source /etc/profile
    
    3)创建启动用户及组(该用户无法登录系统,没有宿主目录)
    [root@localhost ~]# useradd proftp -s /sbin/nologin -M
    
    4)建立共享目录
    [root@localhost ~]# mkdir -p /var/ftp/运维部
    [root@localhost ~]# mkdir -p /var/ftp/开发部
    [root@localhost ~]# mkdir -p /var/ftp/销售部
    [root@localhost ~]# mkdir -p /var/ftp/行政部
    [root@localhost ~]# useradd -M -s /sbin/nologin  yunwei
    [root@localhost ~]# useradd -M -s /sbin/nologin  kaifa
    [root@localhost ~]# useradd -M -s /sbin/nologin  xiaoshou
    [root@localhost ~]# useradd -M -s /sbin/nologin  xingzheng
    [root@localhost ~]# chmod 777  /var/ftp/运维部
    [root@localhost ~]# chmod 777  /var/ftp/开发部
    [root@localhost ~]# chmod 777  /var/ftp/销售部
    [root@localhost ~]# chmod 777  /var/ftp/行政部
    
    ================proftpd配置原文件解释==============
    [root@localhost ~]# cat /etc/proftpd.conf|grep -v "#"|grep -v "^$"
    ServerName                      "ProFTPD Default Installation"     #客户端连接后显示的字符
    ServerType                      standalone                         #服务启动模式 
    DefaultServer                   on                                 
    Port                            21          #端口
    UseIPv6                         off         #禁用IPv6
    Umask                           022         #权限掩码
    MaxInstances                    30          #并发进程30个(防DoS攻击)
    User                            nobody      #启动服务的用户
    Group                           nogroup     #启动服务的组
    #DefaultRoot ~                              #共享根目录(默认为用户家目录)
    AllowOverwrite          on                  #是否允许使用文件覆写权限
    <Limit SITE_CHMOD>                          #权限设置
      DenyAll
    </Limit>
    <Anonymous ~ftp>
      User                          ftp
      Group                         ftp
      UserAlias                     anonymous ftp     #用户别名
      MaxClients                    10                #最大客户端连接数
      DisplayLogin                  welcome.msg       #显示登录信息
      DisplayChdir                  .message
      <Limit WRITE>                                   #权限设置
        DenyAll
      </Limit>
    </Anonymous>
    
    =================该文件格式===================
    ##########################################################################
    #   全局设置  参数值                                                                                                   
    #                                                                        
    #   <Directory  "路径"> 指定路径相关设置,可以使用Limit语法限制目录权限  
    #         ... ...                                                        
    #   ... ...                                                        
    #   </Directory>                                                         
    #                              
    #                                                                        
    #                  
    #   <anonymouse "路径">   匿名共享路径相关设置(包括权限设置)     
    #   </anonymouse>                    
    #########################################################################
    
    ==============Limit权限说明================
    #########################################################################
    #  CWD:改变所在目录 (即Change Working Directory   表示进入该目录)
    #  MKD/XMKD:新建目录 
    #  RNFR/RNTO:重命名目录的(一起使用) ,即更名
    #  DELE:删除文件 
    #  RMD/XRMD:删除目录 (即Remove Directory)
    #  RETR:下载 
    #  STOR:上传 
    #  LOGIN:允许登陆 
    #  READ: 可读,包括了RETR,SITE,SIZE,STAT 
    #  WRITE: 可写,包括包括了APPE, DELE, MKD, RMD, RNTO, STOR, XMKD, XRMD 
    #  DIRS: 允许列出目录,包括了DUP, CWD, LIST, MDTM, NLST, PWD, RNFR, XCUP, XCWD, XPWD 
    #  ALL:包括了READ WRITE DIRS 
    #######################以上权限结合动作一起使用#####################
    #  AllowUser:允许某个用户 
    #  DenyUser:禁止某个用户 
    #  AllowGroup:允许某个用户组 
    #  DenyGroup:禁止某个用户组 
    #  AllowAll:允许所有用户 
    #  DenyAll:禁止所有用户
    #########################################################################
    
    5)修改/etc/proftpd.conf文件,部分内容为添加内容
    [root@localhost ~]# cat /etc/proftpd.conf
    ServerName                      "ProFTPD Default Installation"
    ServerType                      standalone
    DefaultServer                   on
    UseEncoding UTF-8 CP936                    #支持的编码格式(中文)
    Port                            21
    AllowRetrieveRestart            on         #允许断点继传(上传)  
    AllowStoreRestart               on         #允许断点继传(下载)  
    UseIPv6                         off
    Umask                           022
    RootLogin                       off        #禁止root登录ftp 
    MaxInstances                    30
    SystemLog                       /var/log/proftp.log   #产生独立的日志文件. (如果想指定自己的日志格式可以结合(ExtendLog,LogFormat)两个选项设置)
    TransferLog                     /var/log/proftp.log   #记录用户下载的日志信息
    User                            proftp     #设置启动用户为proftp
    Group                           proftp     #设置启动组为proftp
    DefaultRoot /var/ftp                       #指定共享根目录为/var/ftp
    AllowOverwrite                  on
    #<Anonymous ~ftp>                          #该部分全部#注释,取消匿名访问功能
    #  User       ftp
    #  Group      ftp
    #  UserAlias      anonymous ftp         
    #  MaxClients     10            
    #  DisplayLogin     welcome.msg         
    #  DisplayChdir     .message
    #  <Limit WRITE>                  
    #    DenyAll
    #  </Limit>
    #</Anonymous>
    
    #以下内容为设置权限,为手动添加内容      
    #所有用户可以看到所有部门的文件夹,仅可以访问自己部门的目录
    RequireValidShell off                            #用户登录是否需要shell(对虚拟用户很重要)
    AuthUserFile /usr/local/proftpd/ftpd.passwd      #通过文件认证用户登录,需要ftpasswd命令创建该文件
    <Directory "/var/ftp/*">
    <Limit CWD READ>                                 #允许所有人可以查看根目录
        AllowAll
    </Limit>
    </Directory>
    <Directory "/var/ftp/运维部">
    <Limit CWD MKD RNFR READ WRITE STOR RETR>
        DenyAll                                      #拒绝所有人往该目录下执行Limit后的操作指令
    </Limit> 
    <Limit DELE>
        DenyAll                                      #禁止任何人在该目录下删除文件
    </Limit>
    <Limit CWD MKD RNFR READ WRITE STOR RETR>
        AllowUser yunwei                             #仅允许yunwei用户可以执行Limit后的所有指令
    </Limit> 
    </Directory>
     <Directory "/var/ftp/开发部">
     <Limit CWD MKD RNFR READ WRITE STOR RETR>
        DenyAll 
    </Limit> 
    <Limit DELE>
        DenyAll
    </Limit>
    <Limit CWD MKD RNFR READ WRITE STOR RETR>
        AllowUser kaifa
    </Limit> 
    </Directory>
    <Directory "/var/ftp/行政部">
    <Limit CWD MKD RNFR READ WRITE STOR RETR>
        DenyAll 
    </Limit> 
    <Limit DELE>
       DenyAll
    </Limit>
    <Limit CWD MKD RNFR READ WRITE STOR RETR>
       AllowUser xingzheng
    </Limit> 
    </Directory>
    <Directory "/var/ftp/销售部">
    <Limit CWD MKD RNFR READ WRITE STOR RETR>
       DenyAll 
    </Limit> 
    <Limit DELE>
       DenyAll
    </Limit>
    <Limit CWD MKD RNFR READ WRITE STOR RETR>
       AllowUser xiaoshou
    </Limit> 
    </Directory>
    
    6)用ftpasswd命令建立虚拟账号(下面命令也可以直接用于修改用户密码)
    ftpasswd命令格式说明 (该命令可以创建用户文件、组文件,默认创建的用户文件为ftpd.passwd):
    --passwd  创建密码文件,即AuthUserFile指定的文件
    --group   创建组文件
    --name    指定创建的用户名
    --uid     指定用户虚拟UID
    --gid     指定虚拟GID
    --home    指定用户家目录
    --shell   指定用户Shell
    --file    指定创建的文件名
    
    [root@localhost ~]# ftpasswd  --passwd --file=/usr/local/proftpd/ftpd.passwd --name=yunwei  --uid=1000  --home=/home/nohome  --shell=/bin/false
    ftpasswd: using alternate file: /usr/local/proftpd/ftpd.passwd
    ftpasswd: --passwd: missing --gid argument: default gid set to uid
    ftpasswd: creating passwd entry for user yunwei
    
    ftpasswd: /bin/false is not among the valid system shells.  Use of
    ftpasswd: "RequireValidShell off" may be required, and the PAM
    ftpasswd: module configuration may need to be adjusted.
    
    
    Password: 
    Re-type password: 
    
    ftpasswd: entry created
    
    用户认证文件创建后的权限是440
    [root@localhost ~]# ll /usr/local/proftpd/ftpd.passwd 
    -r--r-----. 1 root root 77 Jul 12 10:59 /usr/local/proftpd/ftpd.passwd
    [root@localhost ~]# cat /usr/local/proftpd/ftpd.passwd
    yunwei:$1$UEKjLwfY$FXV4SHlLeAOGEc2wrZa.M/:1000:1000::/home/nohome:/bin/false
    
    7)启动FTP服务
    检查配置文件是否正常
    [root@localhost ~]# /usr/local/proftpd/sbin/proftpd -t6
    Checking syntax of configuration file
    Syntax check complete.
    
    [root@localhost ~]# /usr/local/proftpd/sbin/proftpd
    
    [root@localhost ~]# ps -ef|grep proftpd
    proftp   13438     1  0 11:01 ?        00:00:00 proftpd: (accepting connections)
    root     13440 13349  0 11:01 pts/2    00:00:00 grep --color=auto proftpd
    
    [root@localhost ~]# lsof -i:21
    COMMAND   PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
    proftpd 13438 proftp    0u  IPv4 2066796      0t0  TCP *:ftp (LISTEN)
    
    这里仅以用户为实验环境,还可以实现组功能,这里就不做过多介绍了!
    =====================================================================================
    如果配置组功能,则创建虚拟账号组的命令如下
    # ftpasswd --group --file=/usr/local/proftpd/ftpd.group --name=admin --gid=99
    # ftpasswd --group --name=admin --gid=99 --member=ftpadmin
    =====================================================================================
    
    8)ProFtpd启动脚本 
    [root@localhost ~]# mkdir /usr/local/proftpd/etc
    [root@localhost ~]# ln -s /etc/proftpd.conf /usr/local/proftpd/etc/
    [root@localhost ~]# ll /usr/local/proftpd/etc/
    total 0
    lrwxrwxrwx. 1 root root 17 Jul 12 11:21 proftpd.conf -> /etc/proftpd.conf
    
    [root@localhost ~]# cat /etc/rc.d/init.d/proftpd 
    #!/bin/bash  
    #  
    # chkconfig: 2345 85 15  
    # description: ProFTPd is an FTP server  
    # processname: proftpd  
      
    # Author:   jingyihome  
    # E-mail:   webmaster@zhanghaijun.com  
    # Website:  https://www.zhanghaijun.com  
      
    # ProFTPd Settings  
    PROFTPD="/usr/local/proftpd/sbin/proftpd"  
    PROCONF="/usr/local/proftpd/etc/proftpd.conf"  
    PROPID="/usr/local/proftpd/var/proftpd.pid"  
    RETVAL=0  
    prog="ProFTPd"  
      
    start() {  
        echo -n $"Starting $prog... "  
        $PROFTPD -c $PROCONF  
        if [ "$?" = 0 ] ; then  
            echo " done"  
        else  
            echo " failed"  
        fi  
    }  
      
    stop() {  
        echo -n $"Stopping $prog...  "  
        if [ ! -e $PROPID ]; then  
            echo -n $"$prog is not running."  
            exit 1  
        fi  
        kill `cat $PROPID`  
        if [ "$?" = 0 ] ; then  
            echo " done"  
        else  
            echo " failed"  
        fi  
    }  
      
    restart(){  
        echo $"Restarting $prog..."  
        $0 stop  
        sleep 2  
        $0 start  
    }  
      
    status(){  
        if [ -e $PROPID ]; then  
            echo $"$prog is running."  
        else  
            echo $"$prog is not running."  
        fi  
    }  
      
    case "$1" in  
        start)  
            start  
            ;;  
        stop)  
            stop  
            ;;  
        restart)  
            restart  
            ;;  
        status)  
            status  
            ;;  
      *)  
            echo $"Usage: $0 {start|stop|restart|status}"  
    esac  
    
    授予执行权限
    [root@localhost ~]# chmod 755 /etc/rc.d/init.d/proftpd
    [root@localhost ~]# ll /etc/rc.d/init.d/proftpd
    -rwxr-xr-x. 1 root root 1370 Jul 12 11:20 /etc/rc.d/init.d/proftpd
    [root@localhost ~]# ll /etc/init.d/proftpd 
    -rwxr-xr-x. 1 root root 1370 Jul 12 11:20 /etc/init.d/proftpd
    
    测试proftpd脚本启停
    [root@localhost ~]# /etc/init.d/proftpd stop
    Stopping ProFTPd...   done
    [root@localhost ~]# lsof -i:21
    [root@localhost ~]#
    
    [root@localhost ~]# /etc/init.d/proftpd start
    Starting ProFTPd...  done
    [root@localhost ~]# lsof -i:21               
    COMMAND   PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
    proftpd 13503 proftp    0u  IPv4 2066913      0t0  TCP *:ftp (LISTEN)
    
    
    9)如果连接FTP时速度慢,可以在proftpd配置文件proftpd.conf中加入以下内容:
    # Slow logins
    # This is probably caused by a firewall or DNS timeout. By default ProFTPD will try to do both DNS and ident lookups against the 
    # incoming connection. If these are blocked or excessively delayed a slower than normal login will result. To turn off DNS and ident 
    # use:
    UseReverseDNS off
    IdentLookups off

  • 相关阅读:
    八个方便C#开发的省时的国外工具
    从babel-polyfill的一个坑而起
    Universal Link
    微信机器人
    微信手记
    Elasticsearch手记
    小游戏引擎手记
    【数学基础】3D数学基础-左右手坐标系
    【linux基础】linux误改sudoers权限之后的恢复及配置sudoers
    【c/c++基础】struct/typedef struct的用法详解总结
  • 原文地址:https://www.cnblogs.com/kevingrace/p/6641224.html
Copyright © 2020-2023  润新知