• VSFTPD


    为了能够在这么多样的机器之间传输文件,FTP(文件传输协议,file thransfer protocol)诞生了。

    FTP时一种在互联网中进行文件传输的协议,基于C/S模式,默认的服务端口时20,21.

    20 端口用于数据传输,21端口用户接受客户端的FTP命令与参数。

     

    FTP服务器按照FTP协议在互联网上提供文件存储与文件访问的服务

    FTP客户端用于向服务器索要资源

    FTP工作模式主要分两种:

      1. 主动模式(port):FTP服务器主动向客户端发起连接请求。

      2. 被动模式(pasv):FTP服务器等待客户端发起请求。

    安装vsftpd

    基于centos平台,直接yum安装
    [root@chaogelinux ~]# yum install vsftpd -y
    
    #注意关闭防火墙规则
    iptables -F
    

      

    vsftp服务程序

    vsftp允许用户三种认证的模式登录到FTP服务器

      1. 本地用户模式:基于Linux本地账号密码进行认证,配置简单,但是一旦被破解,服务器信息就很危险

      2. 匿名用户模式:任何人无需密码直接登录

      3. 虚拟用户模式:单独为FTP创建用户数据库,基于口令验证账户信息,只适用于FTP,不会影响其他用户信息,

    最为安全

    安装ftp客户端

    ftp客户端有多种形式,图形化,命令行。

    1. ftp命令客户端

    ftp> ascii  # 设定以ASCII方式传送文件(缺省值) 
    ftp> bell   # 每完成一次文件传送,报警提示. 
    ftp> binary # 设定以二进制方式传送文件. 
    ftp> bye    # 终止主机FTP进程,并退出FTP管理方式. 
    ftp> case   # 当为ON时,用MGET命令拷贝的文件名到本地机器中,全部转换为小写字母. 
    ftp> cd     # 同UNIX的CD命令. 
    ftp> cdup   # 返回上一级目录. 
    ftp> chmod  # 改变远端主机的文件权限. 
    ftp> close  # 终止远端的FTP进程,返回到FTP命令状态, 所有的宏定义都被删除. 
    ftp> delete # 删除远端主机中的文件. 
    ftp> dir [remote-directory] [local-file] # 列出当前远端主机目录中的文件.如果有本地文件,就将结果写至本地文件. 
    ftp> get [remote-file] [local-file] # 从远端主机中传送至本地主机中. 
    ftp> help [command] # 输出命令的解释. 
    ftp> lcd # 改变当前本地主机的工作目录,如果缺省,就转到当前用户的HOME目录. 
    ftp> ls [remote-directory] [local-file] # 同DIR. 
    ftp> macdef                 # 定义宏命令. 
    ftp> mdelete [remote-files] # 删除一批文件. 
    ftp> mget [remote-files]    # 从远端主机接收一批文件至本地主机. 
    ftp> mkdir directory-name   # 在远端主机中建立目录. 
    ftp> mput local-files # 将本地主机中一批文件传送至远端主机. 
    ftp> open host [port] # 重新建立一个新的连接. 
    ftp> prompt           # 交互提示模式. 
    ftp> put local-file [remote-file] # 将本地一个文件传送至远端主机中. 
    ftp> pwd  # 列出当前远端主机目录. 
    ftp> quit # 同BYE. 
    ftp> recv remote-file [local-file] # 同GET. 
    ftp> rename [from] [to]     # 改变远端主机中的文件名. 
    ftp> rmdir directory-name   # 删除远端主机中的目录. 
    ftp> send local-file [remote-file] # 同PUT. 
    ftp> status   # 显示当前FTP的状态. 
    ftp> system   # 显示远端主机系统类型. 
    ftp> user user-name [password] [account] # 重新以别的用户名登录远端主机. 
    ftp> ? [command] # 同HELP. [command]指定需要帮助的命令名称。如果没有指定 command,ftp 将显示全部命令的列表。
    ftp> ! # 从 ftp 子系统退出到外壳。
    

    2. FileZilla图形化工具

    安装ftp命令行
    yum install ftp -y
    

     

    匿名用户模式:

    [root@chaogelinux ~]# grep '^anon' /etc/vsftpd/vsftpd.conf
    anonymous_enable=YES    #允许匿名访问
    anon_upload_enable=YES    #允许匿名用户上传
    anon_mkdir_write_enable=YES    #允许匿名用户创建目录
    anon_other_write_enable=YES    #允许匿名用户修改目录
    

     # 重启服务

    [root@chaogelinux ~]# systemctl restart vsftpd  #重启服务
    [root@chaogelinux ~]# systemctl enable vsftpd        #开启自启
    

      

    此时可以使用ftp命令连接到FTP服务器了。

    连接FTP服务器,其实连接的是目录/var/ftp/

    [root@chaogelinux ftp]# pwd
    /var/ftp
    [root@chaogelinux ftp]# ls
    pub
    

      

    #修改/var/ftp目录属主属组为ftp

    #检查系统用户ftp
    [root@chaogelinux ftp]# id ftp
    uid=14(ftp) gid=50(ftp) 组=50(ftp)
    
    #更改pub的属主
    [root@chaogelinux ftp]# chown -Rf ftp /var/ftp/pub/        #递归处理所有的文件及子目录  去除错误信息
    [root@chaogelinux ftp]# ll
    总用量 4
    drwxr-xr-x 2 ftp root 4096 10月 31 2018 pub
    

      

    客户端登录ftp服务器

    yumac: ~ yuchao$ftp 123.206.16.61
    Connected to 123.206.16.61.
    220 (vsFTPd 3.0.2)
    Name (123.206.16.61:yuchao): anonymous
    331 Please specify the password.
    Password:
    230 Login successful.
    ftp> mkdir chaoge666        #创建文件夹
    257 "/pub/chaoge666" created
    ftp> rename chaoge666 chaoge888    #重命名文件夹
    350 Ready for RNTO.
    250 Rename successful.
    ftp> rmdir chaoge888        #删除文件夹
    250 Remove directory operation successful.
    

      

    本地用户模式:

    使用Linux本地用户模式比匿名用户来的安全,修改配置文件,关闭匿名用户,开启本地用户

    anonymous_enable=NO    #关闭匿名用户模式
    local_enable=YES    #开启本地用户模式
    write_enable=YES    #设置可写权限
    local_umask=022    #文件umask值
    userlist_enable=YES    #启用【禁止登录的用户名单】文件名是,ftpusers,user_list
    userlist_deny=YES    #开启禁止登录名单
    

      

      重启服务

    systemctl restart vsftpd
    systemctl enable vsftpd
    

      此时客户端可以使用服务端的用户连接ftp,默认访问的是该用户的家目录

    yumac: ~ yuchao$ftp 123.206.16.61
    Connected to 123.206.16.61.
    220 (vsFTPd 3.0.2)
    Name (123.206.16.61:yuchao): chaoge
    331 Please specify the password.
    Password:
    230 Login successful.
    ftp> ls
    200 PORT command successful. Consider using PASV.
    150 Here comes the directory listing.
    -rw-rw-r--    1 2002     2002           31 Nov 21 01:57 fine.txt
    226 Directory send OK.    
    ftp> mkdir 超哥到此一游            #新建文件夹
    257 "/home/chaoge/超哥到此一游" created
    

      有些用户无法登录ftp服务器,是因为ftp服务器上有一个名单,写上了禁止谁登录。

    [root@chaogelinux vsftpd]# pwd
    /etc/vsftpd
    [root@chaogelinux vsftpd]# ls
    ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh
    
    #文件中写入的名字,都是禁止登录的
    [root@chaogelinux vsftpd]# cat ftpusers
    # Users that are not allowed to login via ftp
    root
    bin
    daemon
    adm
    lp
    sync
    shutdown
    halt
    mail
    news
    uucp
    operator
    games
    nobody
    
    ####如此,禁止登录的用户
    yumac: ~ yuchao$ftp 123.206.16.61
    Connected to 123.206.16.61.
    220 (vsFTPd 3.0.2)
    Name (123.206.16.61:yuchao): root
    530 Permission denied.
    ftp: Login failed.
    

      

    虚拟用户模式:

    虚拟用户模式是最为安全的一种,也是虚拟创建出来的用户

    首先安全Berkeley DB 工具

    yum install db4 db4-utils -y
    

      创建用于进行FTP认证的用户数据库,奇数行账户名,偶数行是密码。

    [root@chaogelinux vsftpd]# cat ftp_user.txt
    chaoge
    666
    pyyu
    888
    

      由于这样的明文信息很不安全,vsftpd也无法加载该格式的数据,因此还得用db_load命令对该文件数据加密,且设置权限

    使得普通用户无权限查阅

    #创建加密文件  -T 和-t参数必须加上,用于转化普通文本为vsftpd识别的数据库文件
    [root@chaogelinux vsftpd]# db_load -T -t hash -f /etc/vsftpd/ftp_user.txt /etc/vsftpd/ftp_user.db
    
    #检查文件属性
    [root@chaogelinux vsftpd]# file ftp_user.db
    ftp_user.db: Berkeley DB (Hash, version 9, native byte-order)
    
    #降低文件权限
    [root@chaogelinux vsftpd]# ll ftp_user.db
    -rw-r--r-- 1 root root 12288 1月   8 09:36 ftp_user.db
    [root@chaogelinux vsftpd]# chmod 600 ftp_user.db
    [root@chaogelinux vsftpd]# ll ftp_user.db
    -rw------- 1 root root 12288 1月   8 09:36 ftp_user.db
    
    #删除旧的数据文件
    [root@chaogelinux vsftpd]# rm -rf ftp_user.txt
    

      创建当虚拟用户登录后默认访问的文件夹路径,且和Linux中的一个本地用户做一个映射关系,防止匿名用户登录后,创建文件夹,但是系统没有此用户报错权限问题。

    #新建一个用户,指定用户家目录,且禁止登录
    useradd -d /var/ftpdir -s /sbin/nologin virtual_chao
    
    #检查此ftpdir的属性
    [root@chaogelinux vsftpd]# ls -ld /var/ftpdir/
    drwx------ 2 virtual_chao virtual_chao 4096 1月   8 09:46 /var/ftpdir/
    
    #更改文件夹权限
    [root@chaogelinux vsftpd]# chmod -Rf 755 /var/ftpdir/
    
    #添加virtual_chao用户至ftpusers禁止用户登录文件,增大系统安全,但是不会影响虚拟用户登录
    [root@chaogelinux vsftpd]# echo 'virtual_chao' >> ftpusers
    

      此时需要创建支持虚拟用户的PAM文件,PAM是一组安全机制的模块,编辑认证文件/etc/pam.d/vsftpd

    #注释掉文中所有语句,添加以下2句,注意db参数指定的是db_load生成的文件路径,无需添加后缀
    
    [root@chaogelinux pam.d]# cat /etc/pam.d/vsftpd
    auth required pam_userdb.so db=/etc/vsftpd/ftp_user
    account required pam_userdb.so db=/etc/vsftpd/ftp_user
    

      最后修改vsftpd配置文件

    [root@chaogelinux pam.d]# grep -Ev '^$|^#' /etc/vsftpd/vsftpd.conf
    anonymous_enable=NO     #禁止匿名模式
    local_enable=YES        #允许本地用户
    write_enable=YES    
    local_umask=022
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
    dirmessage_enable=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    xferlog_std_format=YES
    listen=NO
    listen_ipv6=YES
    pam_service_name=vsftpd        #指定PAM认证文件
    userlist_enable=YES
    userlist_deny=YES
    tcp_wrappers=YES
    guest_enable=YES        #开启虚拟用户
    guest_username=virtual_chao        #指定虚拟用户账号
    allow_writeable_chroot=YES      #如果用户被限制只能在其家目录,允许用户可以对家目录写入数据

      【针对不同的虚拟用户设置不同的权限】

      用户ftp认证的虚拟账号,ftp_user.txt

        1. chao, 允许上传,新建,修改,查看,删除权限。

        2. pyyu, 只读权限

    这样的需要可以通过vsftpd配置实现,定义user_config_dir参数实现不同的虚拟用户,不同的权限配置。

    #新建管理虚拟用户权限的文件夹
    mkdir /etc/vsftpd/virtual_user_dir
    
    #进入文件夹,创建权限的配置文件
    [root@chaogelinux vsftpd]# cd /etc/vsftpd/virtual_user_dir/
    [root@chaogelinux virtual_user_dir]# cat chaoge
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
    
    #再创建一个pyyu文件,禁止写入
    [root@chaogelinux virtual_user_dir]# pwd
    /etc/vsftpd/virtual_user_dir
    [root@chaogelinux virtual_user_dir]# ls
    chaoge  pyyu
    [root@chaogelinux virtual_user_dir]# cat pyyu
    anon_upload_enable=NO
    anon_mkdir_write_enable=NO
    anon_other_write_enable=NO
    

      最后在vsftpd配置文件中再添加下面这一行。

    cat /etc/vsftpd/vsftpd.conf
    user_config_dir=/etc/vsftpd/virtual_user_dir
    

      重启服务,测试。

    # 重启服务
    systemctl restart vsftpd
    
    
    ###################################
    # 测试chaoge用户
    
    yumac: ~ yuchao$ftp 123.206.16.61
    Connected to 123.206.16.61.
    220 (vsFTPd 3.0.2)
    Name (123.206.16.61:yuchao): chaoge    #用匿名用户登录chaoge
    331 Please specify the password.
    Password:
    230 Login successful.
    ftp> ls            #此时看到的是匿名用户映射的家目录内容
    200 PORT command successful. Consider using PASV.
    150 Here comes the directory listing.
    -rw-r--r--    1 0        0               0 Jan 08 02:49 haha
    226 Directory send OK.
    ftp> mkdir 超哥到此一游        #chaoge有权限增加文件
    257 "/超哥到此一游" created
    
    #####检查服务器上的FTP目录
    [root@chaogelinux ftpdir]# pwd
    /var/ftpdir
    [root@chaogelinux ftpdir]# ls
    haha  超哥到此一游
    
    
    ##############################
    
    
    # 测试pyyu用户
    yumac: ~ yuchao$ftp 123.206.16.61
    Connected to 123.206.16.61.
    220 (vsFTPd 3.0.2)
    Name (123.206.16.61:yuchao): pyyu
    331 Please specify the password.
    Password:
    230 Login successful.
    ftp> mkdir pyyu也想到此一游                #无法写入数据,只能读取
    550 Permission denied.
    ftp> ls
    200 PORT command successful. Consider using PASV.
    150 Here comes the directory listing.
    -rw-r--r--    1 0        0               0 Jan 08 02:49 haha
    drwx------    2 2003     2003         4096 Jan 08 02:50 超哥到此一游
    226 Directory send OK.
    

      

      

      

  • 相关阅读:
    JAVA面试常见问题之开源框架和容器篇
    JAVA面试常见问题之Redis篇
    JDK8日期时间操作小汇总
    JAVA面试常见问题之数据库篇
    JAVA面试常见问题之设计模式篇
    JAVA面试常见问题之锁机制篇
    JAVA面试常见问题之进程和线程篇
    JAVA面试常见问题之常见集合篇
    JAVA面试常见问题之基础篇
    洛谷P1315 观光公交
  • 原文地址:https://www.cnblogs.com/abc1234567/p/14141947.html
Copyright © 2020-2023  润新知