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服务

     

    未至精疲力尽,不要怨天尤人。昨日因,今日果。今日为,明日果也!
  • 相关阅读:
    bug、兼容性、适配问题
    关于daterangepicker取消默认值的设置
    重构-改善既有代码设计
    iphoneX 适配
    汇编语言(2)程序表示
    汇编语言(1)基础理论
    css 边框颜色渐变的半圆
    横向时间轴(进度条)
    pdf中内嵌字体问题
    jabRef里引用的相邻同名作者变横线
  • 原文地址:https://www.cnblogs.com/ccit/p/10077095.html
Copyright © 2011-2022 走看看