• 实验记录:vsftp整合mysql-pam管理虚拟账号


    为了提高系统的安全性,我们采用虚拟用户而非系统(匿名)用户的形式访问FTP。整体思路是通过开启vsftp中的虚拟账户功能并调用新的pam认证模块,然后再修改pam模块使得可以通过mysql验证用户的合法性。以下为实验过程。

    第一步装包:

    yum install -y vsftpd mysql-server mysql-devel pam-devel

    yum groupinstall -y Development tools

    tar -xf pam_mysql-0.7RC1.tar.gz -C /usr/src/

    cd /usr/src/pam_mysql-0.7RC1

    ./configure

    make && make install

    第二步配置mysql

    service mysqld start

    mysql -p

    create database ftpusers;

    use ftpusers;

    create table users( id int AUTO_INCREMENT NOT NULL,name char(20) NOT NULL UNIQUE KEY, passwd char(48) NOT NULL, primary key(id) );

    insert into users(name,passwd)values('nick',password('redhat'));

    grant select on ftpusers.* to virftp@localhost identified by 'vftpadm';

    flush privileges;

    第三步编辑vsftpd.conf,以下是我的配置:

    anonymous_enable=NO
    local_enable=YES
    write_enable=YES
    local_umask=022
    anon_upload_enable=YES
    dirmessage_enable=YES
    xferlog_enable=YES
    xferlog_std_format=YES
    connect_from_port_20=YES
    xferlog_std_format=YES
    chroot_local_user=YES
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list
    listen=YES
    user_config_dir=/etc/vsftpd/user_config
    local_root=/var/ftp/pub
    guest_enable=YES
    guest_username=virftp
    pam_service_name=vftp
    userlist_enable=YES
    tcp_wrappers=YES
    userlist_deny=YES

    第四步编辑pam文件:vim /etc/pam.d/vftp

    session optional pam_keyinit.so force revoke
    auth sufficient /lib64/security/pam_mysql.so user=virftp passwd=vftpadm host=localhost db=ftpusers table=users usercolumn=name passwdcolumn=passwd crypt=2
    auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
    auth required pam_shells.so
    auth include password-auth
    account sufficient /lib64/security/pam_mysql.so user=virftp passwd=vftpadm host=localhost db=ftpusers table=users usercolumn=name passwdcolumn=passwd crypt=2
    account include password-auth
    session required pam_loginuid.so
    session include password-auth

    上面红色字体是验证虚拟账户用的,其余为默认vsftpd验证,local账户验证时用得到。

    第五步:添加虚拟账户

    useradd virftp -s /sbin/nologin -d /home/virftp virftp

    chown virftp. -R /home/virftp/

    第六步:创建虚拟账户配置文件

    mkdir /etc/vsftpd/user_config

    cd /etc/vsftpd/user_config

    创建虚拟账户nick:

    vim nick

    local_root=/home/virftp/

    这里只限制了其根目录,这里不定义的一律继承主配置文件的设定(/etc/vsftp/vsftpd.conf)

    cp一个文件到此目录来验证试验

    cp /etc/inittab /home/virftp

    service vsftpd restart

    最后登陆账户nick 密码redhat 查看结果

    试验总结:开始我在pam文件中mysql验证没用sufficient而用了required,直接导致不能用local账户登录。

    这里解释下两者的含义,sufficient代表一旦满足这条规则,则直接退出不往下匹配了,如果不满足,则往下继续匹配。

    required说明如果不匹配则直接退出,如果匹配则继续往下匹配。

    所以当我用required时,local账户不匹配直接退出。 

  • 相关阅读:
    设计模式享元模式实现C++
    并查集
    设计模式代理模式实现C++
    设计模式装饰模式实现C++
    最小生成树Prim算法实现
    图的邻接矩阵存储
    威佐夫博弈(Wythoff Game)初识 HDU 1527 POJ 1067
    设计模式原型模式实现C++
    三种经典博弈问题 BashGame;WythoffGame;NimmGame;
    设计模式外观模式实现C++
  • 原文地址:https://www.cnblogs.com/nickqian/p/3860043.html
Copyright © 2020-2023  润新知