3231212 发表于 2016-1-8 09:55:33

安装并配置基于虚拟用户的vsftpd

                      vsftpd用户分为:匿名用户、本地用户、虚拟用户

   虚拟用户和本地用户没有关系,但是所有虚拟用户会被映射为一个指定的系统帐号,访问共享位置就是这系统帐号的家目录。
   各虚拟用户可以被赋予不同的访问权限:
          通过匿名用户权限控制参数进行指定;
    虚拟用户帐号的存储方式
          文件,编辑文本文件来存储
                  奇数行为用户名,奇数行+1为其对应密码。
                  此文件需要被编码为hash格式,这个方式非常费劲,添加一
                  次就需要重新hash加密一次
         关系型数据库的表中:
                  即时查询数据库完成用户认证:
                     mysql库,pam要依赖于pam-mysql模块
1 安装软件
   安装mysql,vsftpd,pam_mysql
   
    pam_mysql属于epel的,得安装epel:yum install epel-release
    打开它的readme
    里面示例:
   
    认证方式   可选的   模块认证    帐号密码
    红色字体是远程主机上执行的,黑色字体是在本地执行的:
2 配置数据库
   在远程主机上安装mariadb:
   远程主机上执行
   create database vsftpd;
    use vsftpd;
    grant select on vsftpd.* TO vsftpd@'192.168.%.%' identified by 'vsftpd';
    flush privileges;
      
   
    远程连接mariadb的主机
   mysql -uvsftpd -h192.168.1.108 -p
   
      但是centos7里面不是iptables了,所以需要关闭的是firewalld
    systemctl stop firewalld
    或者
    service firewalld stop
       
   
    本地查看下数据库。
   
      远程主机建立表
    create table user( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50) BINARY NOT NULL, password CHAR(48) BINARY NOT NULL);
   
   
    在本地端可以查到
    desc user;
   
   
    数据库内建函数password(‘xxx’)可以将任意数据变成48位的
    select password(‘abc’);
   
   
    insert into user (name,password) values('tom',password('magedu')),('gh',password('magedu'));
    向远程主机的vsftpd表中插入数据
   
   
    在本地查询
   
3 配置pam
   随便在/etc/pam.d里建立个文件
   
    在里面输入内容如下
   
    auth,认证
    account,验证用户有效与否
    required ,可选方式
    pam_mysql.so ,模块认证,相对路径,/lib64
    user=vsftpd,mysql连接用户
    passwd=vsftpd ,mysql连接密码
    host=192.168.1.108 ,mysql连接地址
    db=vsftpd ,数据库名字
    table=user ,表名字
    usercolumn=name ,用户列名
    passwdcolumn=password ,密码列名
    crypt=0,加密方式
   
4 建立账号
   需要在本地主机上建立一个帐号用来登录
    useradd –s /sbin/nologin –d /var/ftproot vuser
   
    chmod go+rx /var/ftproot
   
    请确保/etc/vsftpd.conf中已经启用了以下选项   
anonymous_enable=YES   //匿名用户      
local_enable=YES   //本地用户      
write_enable=YES   //本地用户写入      
anon_upload_enable=NO   //匿名上传      
anon_mkdir_write_enable=NO   //匿名建立文件夹      
chroot_local_user=YES    //是否将用户限制在主目录,yes是
   然后添加以下项   
guest_enable=YES      
guest_username=vuser
    并确保pam_service_name选项的值如下所示   
pam_service_name=vsftpd.mysql
   
   用tail /var/log/secure里显示最近登录系统的日志
   

   现在几个用户都是相同权限的,下面要赋予不同的权限。

5 配置不同用户的访问权限
   在/etc/vsftpd/vsftpd.conf
    添加user_config_dir=/etc/vsftpd/vuser_config
   
    然后在指定位置建立文件夹vuser,并针对每个用户建立一个文件
   
    里面的内容如下
    anon_upload_enable=YES   
anon_mkdir_write_enable=yes      
anon_other_write_enable=yes
   
    测试连接一下,成功
   
          -------------------------------------------------------------------------
除了ftp,下列也可以使用
axel,lftpget,wget,curl

ftp协议是明文
   ftps:SSL,认证过程是安全的
    sftp:SSH,
                   

页: [1]
查看完整版本: 安装并配置基于虚拟用户的vsftpd