zoukankan      html  css  js  c++  java
  • vsftp虚拟用户方式访问

    需求:外部人员需要对公司服务器上某个文件夹内容进行读写操作

    文件目录信息:/opt/abc

    drwxr-xr-x 9 www  www       4096 12月  4 13:02 abc   #注意最初abc的www用户组没有写权限

    为了后面的ftp用户能够对此文件具备写操作,需要添加www用户组的写权限:

    chmod g+w /opt/abc -R

    drwxrwxr-x 9 www  www       4096 12月  4 13:02 abc

    一、安装vsftpd服务

    确保selinux关闭以及防火墙关闭或开启21端口

    yum  install vsftpd

    systemctl start vsftpd

    systemctl enable vsftpd

    netstat -tanlp|grep vsftpd

    二、配置vsftpd

    修改配置前养成好习惯,先备份一下

    cp /etc/vsftpd/vsftpd.conf   /etc/vsftpd/vsftpd.conf.bak

    这里使用虚拟用户访问ftp服务器

    若基于Vsftpd系统用户访问FTP服务器,系统用户越多越不利于管理,而且不利于系统安全管理,鉴于此,为了能更加的安全使用VSFTPD,需使用Vsftpd虚拟用户方式。

    Vsftpd虚拟用户原理:虚拟用户就是没有实际的真实系统用户,而是通过映射到其中一个真实系统用户(没有密码,也不具备登陆权限)以及设置相应的权限来实现访问验证,虚拟用户不能登录Linux系统,从而让系统更加的安全可靠。

    配置步骤如下:

    1、安装Vsftpd虚拟用户需用到的软件及认证模块:

    yum  install  pam*  libdb-utils  libdb*  --skip-broken  -y

    2、创建虚拟用户临时用户文件/etc/vsftpd/ftpusers.txt,新建虚拟用户和密码,其中ftp1为虚拟用户名,123为密码,如果有多个用户,依如下格式填写即可

    ftp1

    123

    3、生成Vsftpd虚拟用户数据库认证文件,并设置权限700:

    db_load  -T  -t  hash  -f  /etc/vsftpd/ftpusers.txt  /etc/vsftpd/vsftpd_login.db  # 每次在/etc/vsftpd/ftpusers.txt添加了新的虚拟用户后,需要再次执行此命令

    解释:(不一定准确)

    db_load做数据库生成;

    -T 允许应用程序能够将文本文件转译载入进数据库。由于我们之后是将虚拟用户的信息以文件方式存储在文件里的,为了让Vsftpd这个应用程序能够通过文本来载入用户数据,必须要使用这个选项。指定了选项-T,那么一定要追加子选项-t

    -t 追加在在-T选项后,用来指定转译载入的数据库类型;

    hash就是使用hash码加密

    -f 参数后面接包含用户名和密码的文本文件,文件的内容是:奇数行用户名、偶数行密码。

     

    chmod  700  /etc/vsftpd/vsftpd_login.db   #vsftpd_login.db隐藏,除root用户外,其他用户无法查询到虚拟用户信息

    4、配置PAM认证文件,PAM采用相应的认证模块和刚刚建立的用户数据库,/etc/pam.d/vsftpd行首加入如下两行(最好是将其他行删除):

    auth      required        pam_userdb.so   db=/etc/vsftpd/vsftpd_login

    account   required        pam_userdb.so   db=/etc/vsftpd/vsftpd_login

    5、所有Vsftpd虚拟用户需要映射到一个系统用户,该系统用户不需要密码,也不需要登录,主要用于虚拟用户映射使用,创建命令如下:

    useradd    -s   /sbin/nologin    ftpuser

    6、完整vsftpd.conf配置文件代码如下:

    anonymous_enable=YES

    local_enable=YES

    write_enable=YES

    local_umask=022

    dirmessage_enable=YES

    xferlog_enable=YES

    connect_from_port_20=YES

    xferlog_std_format=YES

    listen=NO

    listen_ipv6=YES

    userlist_enable=YES

    tcp_wrappers=YES  

    # 以下配置为开启虚拟用户功能

    pam_service_name=vsftpd       # 虚拟用户启用pam认证;vsftpdpam认证指定的文件

    guest_enable=YES    # 启用虚拟用户;

    guest_username=ftpuser  # 映射虚拟用户至系统用户ftpuser;

    user_config_dir=/etc/vsftpd/vsftpd_user_conf  # 设置虚拟用户配置文件所在的目录;

    virtual_use_local_privs=YES  # 虚拟用户使用与本地用户相同的权限。

    # 以下配置为锁定虚拟用户在自己的目录,不能查看到其他目录(如不配置,通过ftp工具可以查看到系统所有目录虽然无写权限)

    chroot_local_user=YES

    allow_writeable_chroot=YES

    7、为虚拟用户ftp1创建配置专有的配置文件以及家目录,如果有多个虚拟用户同此操作

    在/etc/vsftpd/vsftpd_user_conf下创建ftp1虚拟用户的配置文件

    mkdir  -p    /etc/vsftpd/vsftpd_user_conf/ftp1

    内容如下:

    ocal_root=/home/ftpuser/ftp1  # 虚拟用户家目录所在位置

    write_enable=YES    # 允许登陆用户有写权限

    anon_world_readable_only=YES   # 允许匿名用户下载,然后读取文件

    anon_upload_enable=YES    # 允许匿名用户上传文件权限,只有在write_enable=YES时该参数才生效;

    anon_mkdir_write_enable=YES  # 允许匿名用户创建目录,只有在write_enable=YES时该参数才生效;

    anon_other_write_enable=YES  # 允许匿名用户其他权限,例如删除、重命名等。

    8、创建虚拟用户家目录目录:

    mkdir -p /home/ftpuser/ftp1

    chown -R ftpuser:ftpuser /home/ftpuser   # 递归更改虚拟用户主目录以及家目录的所有者和属组,才能具备相应权限。

    chmod -R 777 /home/ftpuser   # root帐号在ftp1下面创建了多级目录和文件后,需要授权,客户端ftp1登录了才能够对其删除和修改。

    三、虚拟用户访问家目录之外的目录

    以上操作,ftp1这个用户已经可以访问ftp服务器,并在其家目录中进行上传下载添加删除等操作,但用户要访问服务器上其他目录怎么办?操作如下:

    第一反应是对需要访问(abc文件)的目录做一个软连接,成功的失败了 --_--,不是说不能做链接,只是做了后不能达到想要的效果。

    最终通过革命先贤的智慧知道还可以将abc文件mount到ftp1家目录下:

    1、先到ftp1家目录中创建abc文件夹,用户挂载使用

    mkdir -p /home/ftpuser/ftp1/abc

    2、挂载目录

    mount --bind /opt/abc   /home/ftpuser/ftp1/abc

    3、如果以后需要解除挂载,执行如下命令把/home/ftpuser/ftp1/abc目录的umount即可

    umount   /home/ftpuser/ftp1/abc

    4、以上步骤仅仅是成功挂载了,虚拟用户ftp1仅仅能对abc目录中的文件进行下载操作,但无上传、删除等操作,需要如下操作

    1)将ftpuser用户加入到www用户组,因为abc这个目录属于www用户组

    #查看当前ftpuser用户信息

    id ftpuser 

    uid=1005(ftpuser) gid=1005(ftpuser) 组=1005(ftpuser)

    #不改变原来用户信息下添加至www用户组

    usermod -a -G www ftpuser

    #再次ftpuser用户信息,ftpuser已经加入到了www用户组中

    id ftpuser

    uid=1005(ftpuser) gid=1005(ftpuser) 组=1005(ftpuser),1004(www)

    2)让/opt/abc下所有文件所属组具备写权限

    chmod g+w /opt/abc -R

    至此虚拟用户ftp1已可对abc文件进行任何操作。

    排错思路:

    1、查看SELinux、防火墙

    2、查看vsftpd进程

    3、查看vsftpd.conf主配置文件

    4、查看虚拟用户配置文件

    5、查看数据库,查看Pam模块,新添加虚拟用户后需要重新生成数据库文件

    6、查看home/ftpuser下虚拟用户家目录是否创建

    7、修改配置后重启vsftpd服务

     

    未至精疲力尽,不要怨天尤人。昨日因,今日果。今日为,明日果也!
  • 相关阅读:
    LeetCode "Super Ugly Number" !
    LeetCode "Count of Smaller Number After Self"
    LeetCode "Binary Tree Vertical Order"
    LeetCode "Sparse Matrix Multiplication"
    LeetCode "Minimum Height Tree" !!
    HackerRank "The Indian Job"
    HackerRank "Poisonous Plants"
    HackerRank "Kundu and Tree" !!
    LeetCode "Best Time to Buy and Sell Stock with Cooldown" !
    HackerRank "AND xor OR"
  • 原文地址:https://www.cnblogs.com/ccit/p/10077095.html
Copyright © 2011-2022 走看看