zoukankan      html  css  js  c++  java
  • FTP服务-实现vsftpd虚拟用户

    前几篇介绍了基础,这篇将具体实现几个案例

    实现基于文件验证的vsftpd虚拟用户,每个用户独立一个文件夹

    1、创建用户数据库文件

    vim /etc/vsftpd/vusers.txt
    qq
    centos
    momo
    centos

    备注:文件内容格式为奇数行为用户名,偶数行为密码

    2、设置权限与编译此文件

    cd /etc/vsftpd/
    db_load -T -t hash -f vusers.txt vusers.db ##编译文件
    chmod 600 vusers.db 

    备注:修改权限是为了安全

    3、创建linux用户和ftp目录(这个账号将来虚拟账号映射成它)

    useradd -s /sbin/nologin vftpuser
    chmod 555 /home/vftpuser/  ###把用户家目录的写权限去掉

    备注:映射账号对根要没有写权限

    mkdir upload  ##创建上传用的文件夹
    chown vftpuser upload/  

    备注:把这个文件夹的所属人改为vftpuser用户,次用户虽然对 /home/vftpuser/ 就也是根,没有写权限,但是对根下的目录有写权限。

    把匿名写权限打开

    clipboard

    4、修改pam配置文件

    vim /etc/pam.d/vusers.db  #这个名字叫什么都可

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

    注意:这个vusers名字一定要和第二步中创建的xxxx.db名字一样

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

    5、让主配置文件知道你要用自己修改的pam模块

    clipboard

    备注:放在vusers.txt里面的就是合法用户,可以登陆

    6、把所有系统账号映射成我们创建的vftpuser账号,并关闭linux系统账号登陆

    vim /etc/vsftpd/vsftpd.conf

    guest_enable=YES
    guest_username=vftpuser

    7、虚拟用户建立独立的配置文件

    vim /etc/vsftpd/vsftpd.conf

    user_config_dir=/etc/vsftpd/vftpuser.d/

    创建上面这个文件夹创建出来

    mkdir /etc/vsftpd/vftpuser.d/

    在这个文件夹目录下创建针对虚拟用户的配置

    [root@centos7_77 vftpuser.d]# cat > qq
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES      
    备注:意思是说虚拟用户qq有匿名写权限

    8、让两个虚拟用户进来时看到的文件夹不一样

    vim /etc/vsftpd/vftpuser.d/qq

    local_root=/data/qq

    备注:要是这个文件夹不存在就创建

    mkdir /data/qq

    备注:在qq目录下创建个文件用于测试

    touch /data/qq/qq.txt

    重启,测试

    clipboard

    备注:想要增加用户,在vusers.txt文件中写入,再生成db文件

    实现:基于MYSQL验证的vsftpd虚拟用户

    说明:本实验在两台CentOS主机上实现,一台做为FTP服务器,一台做数据库服务器

    一、安装所需要包和包组

    在数据库服务器上安装包:

    Centos7:在数据库服务器上安装

    yum –y install mariadb-server
    systemctl start mariadb.service
    systemctl enable mariadb

    Centos6:在数据库服务器上安装

    yum –y install mysql-server

    在FTP服务器上安装vsftpd和pam_mysql包

    centos6:pam_mysql由epel6的源中提供

    yum install vsftpd pam_mysql

    centos7:无对应rpm包,需手动编译安装

    yum -y groupinstall "Development Tools"

    yum -y install mariadb-devel pam-devel vsftpd

    下载pam_mysql-0.7RC1.tar.gz

    https://sourceforge.net/projects/pam-mysql/

    1、解压缩pam模块

    [root@centos7_77 ~]# tar xvf pam_mysql-0.7RC1.tar.gz

    cd pam_mysql-0.7RC1/

    2、编译

    [root@centos7_77 pam_mysql-0.7RC1]# ./configure --with-pam-mods-dir=/lib64/security --with-mysql=/usr --with-pam=/usr

    备注:这样需要注意指定的位置,mysql

    现在还没有pam_mysql.so

    clipboard

    开始make

    [root@centos7_77 pam_mysql-0.7RC1]# make && make install

    clipboard

    3、创建数据库和表

    1)创建ftpdb数据库

    MariaDB [(none)]> create database ftpdb;

    2)授权一个用户可以连这个数据库(有读权限就行)

    MariaDB [(none)]> grant select on ftpdb.* to vsftpd@'localhost' identified by 'centos';

    3)创建一个表

    MariaDB [ftpdb]> create table users (id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, name CHAR(50) BINARY NOT NULL, password CHAR(48) BINARY NOT NULL );

    4)往表里增加虚拟用户

    MariaDB [ftpdb]> INSERT INTO users(name,password) values('gg',password('centos'));

    MariaDB [ftpdb]> INSERT INTO users(name,password) values('mm',password('centos'));

    clipboard

    3、准备一个pam配置文件(在FTP服务器上建立pam认证所需文件)

    cd /etc/pam.d/
    vim vsftpd.mysql
    
    auth required pam_mysql.so user=vsftpd passwd=centos host=localhost db=ftpdb table=users usercolumn=name passwdcolumn=password
     crypt=2
    account required pam_mysql.so user=vsftpd passwd=centos host=localhost db=ftpdb table=users usercolumn=name passwdcolumn=passw
    ord crypt=2

    备注:

    配置字段说明

    • auth 表示认证

    • account 验证账号密码正常使用

    • required 表示认证要通过

    • pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路径而言,也可以写绝

    对路径;后面为给此模块传递的参数

    • user=vsftpd为登录mysql的用户

    • passwd=magedu 登录mysql的的密码

    • host=mysqlserver mysql服务器的主机名或ip地址

    • db=vsftpd 指定连接msyql的数据库名称

    • table=users 指定连接数据库中的表名

    • usercolumn=name 当做用户名的字段

    • passwdcolumn=password 当做用户名字段的密码

    • crypt=2 密码的加密方式为mysql password()函数加密

    4、让ftp服务器知道调用我们配置的pam模块配置文件

    vim /etc/vsftpd/vsftpd.conf

    clipboard

    5、映射为系统账号vftpuser

    vim /etc/vsftpd/vsftpd.conf

    guest_enable=YES
    guest_username=vftpuser

    备注:意思说,启动guest用户,系统用户映射为guest用户,而guest用户是vftpuser,

    别忘了去掉此用户的家目录的读W权限

    6、让登陆的账号权限不一样(针对每个用户都有自己的配置文件)

    指定用户存放配置的文件夹

    vim /etc/vsftpd/vsftpd.conf
    user_config_dir=/etc/vsftpd/vftpuser.d
    cd /etc/vsftpd/vftpuser.d
    [root@centos7_77 vftpuser.d]# cat > mm
    local_root=/data/mm
    cat > gg
    local_root=/data/gg

    备注:要想gg mm 充当虚拟用户的根必须没有写权限

    [root@centos7_77 data]# chmod a=rx mm
    [root@centos7_77 data]# chmod a=rx gg
    再gg、mm目录下创建个文件好测试
    [root@centos7_77 gg]# touch gg.txt
    [root@centos7_77 mm]# touch mm.txt
    

    重启

    测试

    clipboard

    clipboard

    备注:要想让gg用户有写权限,在/etc/vsftpd/vftpuser.d/gg文件中加入

    anon_upload_enable=YES

    anon_mkdir_write_enable=YES

    还要对/data/gg这个目录要有写权限

    setfacl -m u:vftpuser:rwx /data/gg

  • 相关阅读:
    思念
    空白
    curl json string with variable All In One
    virtual scroll list All In One
    corejs & RegExp error All In One
    socket.io All In One
    vue camelCase vs PascalCase vs kebabcase All In One
    element ui 表单校验,非必填字段校验 All In One
    github 定时任务 UTC 时间不准确 bug All In One
    input range & color picker All In One
  • 原文地址:https://www.cnblogs.com/xsuid/p/9537235.html
Copyright © 2011-2022 走看看