vsftpd虚拟用户搭建

首选的FTP服务器搭建方式

安装vsftpd

     yum install -y vsftpd

     systemctl enable vsftpd     #设置开机启动

     systemctl is-enabled vsftpd   #查看是否开机启动

基于虚拟用户的配置

所谓虚拟用户就是没有使用真实的帐户,只是通过映射到真实帐户和设置权限的目的。虚拟用户不能登录CentOS系统,所以是相对安全的登陆方式

auth required pam_mysql.so user=vsftpd passwd=111111 host=localhost db=vftpuser table=users usercolumn=name passwdcolumn=passwd crypt=0

account required pam_mysql.so user=vftpuser passwd=111111 host=localhost db=vftpuser table=users usercolumn=name passwdcolumn=passwd crypt=0

1.修改配置文件

systemctl  start vsftpd

2.建立本地映射用户并设置宿主目录权限

[root@shewei ~]#useradd –d /home/vftpsite –s /sbin/nologin vftpuser


3.配置vsftpd.conf(设置虚拟用户配置项)

[root@shewei ~]#vim /etc/vsftpd/vsftpd.conf                           

guest_enable=YES                                   #开启虚拟用户

guest_username=vftpuser                      #FTP虚拟用户对应的系统用户,需要创建系统用户

pam_service_name=vsftpd                     #PAM认证文件   这里是手动建立的pam认证文件名

4.在MySQL中建立用户口令数据库                     #没有数据库就安装数据库,以下用mariadb

[root@shewei ~]#yum -y install mariadb-server

[root@shewei ~]#systemctl start mariadb

[root@shewei ~]#mysql 

MariaDB [(none)]> create database vsftpd;             #建立虚拟用户数据库,库名vsftpd

MariaDB [(none)]> use vsftpd;                                   #进入vsftpd数据库

MariaDB [(none)]>create table users(name char(16) binary,passwd char(16) binary);  #建立虚拟用户口令表,表名users

                                 #16位长度的用户密码区分大小写

MariaDB [(none)]> insert into users (name,passwd) values (‘bobyuan’,password(‘111’)); 

MariaDB [(none)]> insert into users (name,passwd) values (‘she’,password(‘111’));

                                                                                        #建立两个虚拟用户,bobyuan和she

注意:此处还可以批量添加用户;后期学mysql时可以使用,此时使用单个添加用户

MariaDB [(none)]> grant select on vsftpd.users to vsftpd@localhost identified by ‘111111’;#授权vsftpd这个账号可以读取vsftpd数据库的user表

5.验证mysql的设置是否成功

MariaDB [vsftpd]> show databases;                             #此处会显示上面添加的vsftpd数据库名字

MariaDB [vsftpd]> use vsftpd;                                    #这里是切换进此数据库

show tables;                                                            #这里查看建立的虚拟用户口令表,应显示users

select * from users;                                                   #这里显示添加的虚拟用户和密码

退出后使用mysql看能否登陆

mysql -uvsftpd -hlocalhost -p111111


6.编译MySQL的PAM认证模块

查看/lib64/security/目录下有没有MySQL对应的PAM模块,centos7.3也没有,需要编译安装;

# yum install mariadb-devel pam-devel -y

# ./configure –with-pam=/usr –with-mysql=/usr –with-pam-mods-dir=/usr/lib64/security
# make && make install

 7.编辑vsftpd的PAM认证文件

在/etc/pam.d目录下,

[root@shewei ~]#vim /etc/pam.d/vsftpd

将里面其他的都注释掉,添加下面这两行:                    #或者全部删除

auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=111111 host=localhost db=vsftpd table=users u
sercolumn=name passwdcolumn=passwd crypt=0
account required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=111111 host=localhost db=vsftpd table=user
s usercolumn=name passwdcolumn=passwd crypt=0

这里需要注意的是user和passwd填写的是授权数据库访问账号和密码

crypt=0:表示口令使用明文方式保存在数据库中
crypt=1:表示口令使用UNIX的DES加密方式加密后保存在数据库中
crypt=2:表示口令使用MySQL的password()函数加密后保存在数据库中
crypt=3:表示口令使用MD5散列值的方式保存在数据库中

8. 重启vsftpd服务

 [root@shewei pam_mysql-0.7RC1]#systemctl restart vsftpd

9. 测试虚拟用户登录FTP

[root@shewei pam_mysql-0.7RC1]#iptables -F

通过其他linux访问就大功告成了;一下是匿名访问和本地用户禁锢访问等:


注意:只有共享权限和本地权限都有的权限才能执行,单独开放一个权限不能读写   

                     共享权限:vsftpd中的主配置文件
                     本地权限:文件的属主属组
            匿名用户:
                   anonymous_enable=YES                  #是否允许匿名账号登陆
                   anon_upload_enable=YES                #是否允许上传
                   anon_mkdir_write_enable=YES        #是否能够创建目录
                   anon_other_write_enable=YES         #是否允许其他用户有写权限

程序环境:

      主程序       : /usr/sbin/vsftpd
      主配置文件: /etc/vsftpd/vsftpd.conf
      数据根目录: /var/ftp 
      Systemd Unit File: /usr/lib/systemd/system/vsftpd.service 
      
配置vsftpd三种用户类别:        
          匿名用户: anonymous –> ftp, /var/ftp
          系统用户: 至少禁止系统用户访问ftp服务,/etc/vsftpd/ftpusers
                                              (此文件中的所有用户禁止登陆)
                           通过PAM机制实现(/etc/pam.d/vsftpd);
          虚拟用户:
                     用户通过vsftpd服务访问到的默认路径,是用户自己的家目录;默认可以自己有权限访问的所有路径间切换;
                     禁锢用户于其家目录中;
          
          配置文件:/etc/vsftpd/vsftpd.conf
                          directive value
          注意:directive之前不能有多余字符;

        系统用户:
          local_enable=YES            #是否允许本地用户登陆(包括匿名和虚拟用户)
          write_enable=YES            #是否拥有写权限
          

          yum install -y vsftpd
        辅助配置文件/etc/vsftpd/ftpusers;
            列在此文件中的用户均禁止使用ftp服务;
            #但是这样还是不安全,因为登陆时候需要提供密码后才会显示登陆失败
            容易被抓包抓到密码

        chroot_local_user=YES
          禁锢所有本地用户于其家目录;需要事先去除用户对家目录的写权限;
                                      chmod a-w /home/users
        如果注释chroot_local_user,开启这两个选项;
             chroot_list_enable=YES
             chroot_list_file=/etc/vsftpd/chroot_list      #此文件需要创建
          禁锢列表中文件存在的用户于其家目录中;需要事先去除用户对家目录的写权限
          写入此文件中的用户都被锁定,
          
        传输日志:
          xferlog_enable=YES
          xferlog_file=/var/log/xferlog
          xferlog_std_format=YES
          
        守护进程的类型:
          standalone:独立守护进程;由服务进程自行监听套按字,并接收用户访问请求
          transient:瞬时守护进程;由受托管方代为监听套按字,服务进程没有访问
                     请求时不启动;当托管方收到访问请求时,才启动服务进程;
            CentOS 6:xinetd独立守护进程, /etc/xinetd.d/,
            CentOS 7:由systemd代为监听;
            
        控制可登录vsftpd服务的用户列表:
          userlist_enable=YES
            启用/etc/vsftpd/user_list文件来控制可登录用户;
          userlist_deny=
                     YES:意味着此为黑名单;
                     NO:白名单;
            
      虚拟用户:
        用户账号存储于何处?
               文件、MySQL、Redis、…
              vsftpd:认证功能托管给pam;
              
  虚拟用户的写权限,通过匿名一样的指令进行定义;还能实现不同的用户有不同的权限
         user_config_dir=/etc/vsftpd/vusers_config/
                    


原创文章,作者:shewei,如若转载,请注明出处:http://www.178linux.com/74293

(0)
sheweishewei
上一篇 2017-04-27
下一篇 2017-04-27

相关推荐

  • Linux基础介绍

    1、Linux用户: Linux用户分为普通用户和管理员,普通用户的系统操作权限低,用户的误操作对系统数据的破坏程度有限,不会对系统造成灾难性的破坏。而管理员对系统具有绝对的权限,可以修改和设置系统的任何数据,如果误操作,及其容易对系统数据造成不可挽回的破坏,比如执行以下命令 rm  -rf  / 。因此,系统管理员在操作root用户时需…

    Linux干货 2016-07-26
  • 实验:配置静态路由2

    实验:配置静态路由2 IP地址规划如下: VMware实验环境下给网卡分配不同的VMnet以实现物理分隔广播域: Client1-VMnet1: R1-VMnet1-VMnet2: R2-VMnet2-VMnet3: R3-VMnet3-VMnet4: Client2-VMnet4: 注意,环境准备: 1、MAC地址不要有冲突,如果是复制的虚拟机,对于cen…

    2017-03-26
  • N25-第七周作业

    第七周作业 — 1、创建一个10G分区,并格式为ext4文件系统; fdisk /dev/sdanp2enter+10Gwpartx -a /dev/sda(1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;mke2fs -t ext4 -b 2018 -m 2 -L “MYDATA” /…

    Linux干货 2017-02-25
  • linux文件管理类命令

    stat、alias、xargs命令使用;(非)字母,(非)数字的表示方法。

    2017-12-11
  • N21-北京-兔锅-马哥教育网络班21期+第3周课程练习

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。    who | cut -d' ' -f1 | uniq   2、取出最后登录到当前系统的用户的相关信息。    who | ta…

    系统运维 2016-07-07
  • 马哥教育网络班22期+第1周课程练习 忍者乱太郎喻成

    1.计算机组成:  根据冯诺依曼的计算机结构分为四大块:控制器,运算器, 存储器,输入输出设备 控制器:对其他的组件进行控制 运算器:用于处理计算工作,不控制输入和输出 储存器:用于暂时或长期存储数据 输入输出:与外界进行交互 个人延伸: 我的理解这是一个在计算机研发之前的一个理论假象, 相对现在真实的计算机体系,这个分类会比较模糊。 运算器:cp…

    Linux干货 2016-08-15