• 从零搭建vsftpd


    先吐槽一下这个工具,配置繁琐,限制规则复杂,报错信息不够详细,学起来吃力。

    准备工作

    [root@vsftp-server ~]# mkdir /data/ #创建ftp目录
    [root@vsftp-server ~]# useradd -s /sbin/nologin -d /data/vsftp localUser #虚拟用户将被映射为本地系统用户
    [root@vsftp-server ~]# cat /etc/shells #末尾追加/sbin/nologin解决localUser登录530问题
    /bin/sh
    /bin/bash
    /usr/bin/sh
    /usr/bin/bash
    /sbin/nologin
    [root@vsftp-server ~]# ll /data/vsftp/ -d
    drwx------ 2 localUser localUser 62 Dec 1 17:50 /data/vsftp/
    

    安装客户端和服务端

    [root@vsftp-server ~]# yum install -y vsftpd ftp
    

    修改配置

    [root@vsftp-server ~]# mv vsftpd.conf vsftpd.conf.ori
    [root@vsftp-server ~]# vim /etc/vsftpd/vsftpd.conf
    #是否启用匿名免密账号
    anonymous_enable=NO
    anon_upload_enable=NO
    anon_mkdir_write_enable=NO
    #是否允许本地系统用户登录
    local_enable=YES
    local_root=/data/vsftp/
    local_umask=022
    #是否允许虚拟用户账号密码登录
    guest_enable=YES
    #虚拟账号映射为本地系统用户
    guest_username=localUser
    #虚拟用户使用本地用户权限
    virtual_use_local_privs=YES
    write_enable=YES
    dirmessage_enable=YES
    connect_from_port_20=YES
    chown_uploads=NO
    user_config_dir=/etc/vsftpd/v_conf.d
    xferlog_enable=YES
    xferlog_file=/var/log/xferlog
    xferlog_std_format=YES
    async_abor_enable=YES
    ascii_upload_enable=YES
    ascii_download_enable=YES
    ftpd_banner=Welcome to vsFTP service.
    allow_writeable_chroot=YES
    #是否允许本地用户访问上级目录
    chroot_local_user=YES
    #是否启用目录访问限制列表
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list
    ls_recurse_enable=YES
    listen=YES
    #启用用户限制名单
    userlist_enable=YES
    #deny名单属性:YES为黑名单,NO为白名单
    userlist_deny=NO
    userlist_file=/etc/vsftpd/user_list
    tcp_wrappers=YES
    pam_service_name=vsftpd
    

    虚拟用户登录认证

    [root@vsftp-server vsftpd]# vim /etc/vsftpd/v_user_list
    virtualUser1
    123123
    virtualUser2
    123123
    

    生成认证数据库,每次修改v_user_list都要重新生成一遍

    [root@vsftp-server vsftpd]# db_load -T -t hash -f /etc/vsftpd/v_user_list /etc/vsftpd/v_u.db
    [root@vsftp-server vsftpd]# chmod 600 /etc/vsftpd/virtusers.db
    

    配置PAM认证规则,即时生效,不必重启vsftpd

    参考资料:https://www.cnblogs.com/z-books/p/4329676.html

    [root@vsftp-server vsftpd]# vim /etc/pam.d/vsftpd
    #%PAM-1.0
    auth	required	pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed #拒绝黑名单用户
    auth    sufficient        /lib64/security/pam_userdb.so 	db=/etc/vsftpd/v_u  #验证虚拟用户身份
    account sufficient        /lib64/security/pam_userdb.so 	db=/etc/vsftpd/v_u  #验证虚拟用户账号密码
    #认证用到的数据库文件的文件名使用/etc/vsftpd/v_u,而不是/etc/vsftpd/v_u.db,更不是v_user_list
    auth    include         password-auth	#此配置将影响本地用户登录
    account include         password-auth	#此配置将影响本地用户登录
    auth    required		pam_shells.so	#此配置将影响本地用户登录
    session include         password-auth
    session required        pam_loginuid.so
    session optional        pam_keyinit.so force revoke
    

    注意以上配置有先后顺序,顺序更改可能导致认证失效

    用户权限方面,chroot_list和白名单user_list,都是即时生效,不必重启服务

    [root@vsftp-server ~]# vim /etc/vsftpd/user_list
    localUser
    virtualUser1
    virtualUser2
    
    [root@vsftp-server ~]# vim /etc/vsftpd/chroot_list 
    #允许本地用户访问上级目录
    localUser
    #不允许虚拟用户访问上级目录
    #virtualUser1
    #virtualUser2
    

    为每个虚拟用户单独指定一个家目录,未指定家目录的虚拟用户将出现登录异常

    [root@vsftp-server vsftpd]# mkdir /etc/vsftpd/v_conf.d
    [root@vsftp-server vsftpd]# vim /etc/vsftpd/v_conf.d/virtualUser1
    local_root=/data/vsftp/virtualUser1
    write_enable=YES
    [root@vsftp-server vsftpd]# vim /etc/vsftpd/v_conf.d/virtualUser2
    local_root=/data/vsftp/virtualUser2
    write_enable=YES
    

    启动服务并验证结果

    [root@vsftp-server ~]# systemctl restart vsftpd
    

    注意localUser是在chroot允许列表里的,可以访问上级目录

    排错

    异常日志:

    [root@vsftp-server ~]# tailf /var/log/secure
    
    

    本地用户登录530 Login incorrect异常:

    auth required pam_shells.so 配置项的含义为仅允许用户的shell为 /etc/shells 文件内的shell命令时,才能够成功
    参考:https://blog.csdn.net/hahahaxiaoyu/article/details/100582853

    ================# 水平有限 欢迎留言 批评指正 #=================
  • 相关阅读:
    VUE(vue对象的简单属性)
    使用Dockerfile封装Django镜像
    Django路由小知识
    字符编码小知识
    python值的引用传递和go语言的值传递
    centos输入正确的账号和密码登陆不进去
    迅为4412开发平台Zigbee模块在物联网智能家居中的应用
    全新升级4412开发板项目学习实战资料
    迅为4418开发板平台应用于智能门禁系统
    【分享】iTOP-iMX6UL开发板驱动看门狗 watchdog 以及 Linux-c 测试例程
  • 原文地址:https://www.cnblogs.com/max27149/p/12035207.html
Copyright © 2020-2023  润新知