CentOS6.7下关于vsftpd的应用之一(匿名用户/普通用户/虚拟用户)

1)使用yum安装vsftpd

[root@C67-X64-A1 ~]# /etc/init.d/vsftpd start
为 vsftpd 启动 vsftpd:                                    [确定]
[root@C67-X64-A1 ~]# chkconfig vsftpd on
//查看21端口是否开启
[root@C67-X64-A1 ~]# netstat -tulnp| grep 21
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      4169/vsftpd         
tcp        0      0 :::23                       :::*                        LISTEN      2321/xinetd         
[root@C67-X64-A1 ~]# lsof -i :21
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
vsftpd  4169 root    3u  IPv4  18067      0t0  TCP *:ftp (LISTEN)
//备份vsftpd配置文件
[root@C67-X64-A1 ~]# cd /etc/vsftpd/
[root@C67-X64-A1 vsftpd]# cp vsftpd.conf vsftpd.conf.bak

说明:/var/ftp/pub目录默认情况下是只能下载,不允许上传的(不要调整该目录的任何权限)


2)配置有关匿名用户的常用功能

a.默认情况下,使用匿名用户进行测试

匿名用户默认权限.png分别下载和上传文件进行测试

blob.png

如上图提示可以知道,下载test.iso,正常;上传的xml提示权限问题,

说明:匿名用户默认是可以下载,但不允许上传资料的。

我们开放匿名用户上传文件的权限:

anon_upload_enable=YES

blob.png

[root@C67-X64-A1 vsftpd]# cd /var/ftp/pub/
[root@C67-X64-A1 pub]# mkdir -p upload
[root@C67-X64-A1 pub]# ls -ld upload/
drwxr-xr-x 2 root root 4096 8月  24 14:22 upload/
//匿名用户在系统中对应的是ftp用户,通过acl配置,让ftp用户对upload目录具有最大权限
[root@C67-X64-A1 pub]# setfacl -m u:ftp:rwx upload/
[root@C67-X64-A1 pub]# getfacl upload/
# file: upload/
# owner: root
# group: root
user::rwx
user:ftp:rwx
group::r-x
mask::rwx
other::r-x

blob.png

文件能够上传,但新建目录提示权限问题

在配置文件中添加:anon_mkdir_write_enable=YES

然后我们使用匿名账号在upload下创建一个123的目录

blob.png

如上图所示,我们正常创建了一个名为123的目录,如果我们想删除名为123的目录

blob.png

如上图所示,我们删除upload下的123目录,没有删除成功

添加“anon_other_write_enable=YES”命令参数到配置文件中,然后再次删除123目录,成功删除

blob.png

关于匿名用户配置的小结:

  • anonymous_enable=YES

  • anon_upload_enable=YES(默认没有开启)

  • anon_mkdir_write_enable=YES(默认没有开启,开启后表面可以创建目录)

  • anon_other_write_enable=YES(默认在配置文件中没有这个选项,删除文件)

  • 真正的权限=共享权限与文件系统的权限的交集

3)关于本地用户的配置参数

[root@C67-X64-A1 ~]# adduser wanzhixing

[root@C67-X64-A1 ~]# echo wanzhixing | passwd –stdin wanzhixing

更改用户 wanzhixing 的密码 。

passwd: 所有的身份验证令牌已经成功更新。

blob.png

默认情况下,本地用户登录的ftp的家目录为自己的家目录,比如用户wanzhixing,实际所在的目录为/home/wanzhixing,并且能够上传/下载/创建目录/删除目录和文件(这里我就不截图说明了)

配置信息:

local_enable=YES

write_enable=YES

local_umask=022

从上图信息可以看出,用户并没有禁锢在自己的家目录,这样操作起来就会显得非常不安全,为避免这种现象,我们使用另外一个参数:

chroot_local_user=YES

blob.png

配置完成后,验证可知被禁锢在自己的目录了,看不到其它目录

本地用户小结:

  • local_enable=YES

  • write_enable=YES

  • local_umask=022

  • chroot_local_user=YES(禁锢所有的ftp本地用户于其家目录中)

  • 禁锢文件中指定的用户在其家目录中

  • chroot_list_enable=YES

  • chroot_list_file=/etc/vsftpd/chroot_list

补充信息:

<—————————————————————————————————————–

使用CentOS7配置ftp本地用户添加chroot_local_user=YES参数后,有一个报错信息:

500 OOPS: vsftpd: refusing to run with writable root inside chroot ()  

解决方法:

a、从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。

b、要修复这个错误,可以用命令chmod a-w /home/user去除用户主目录的写权限,注意把目录替换成你自己的。或者你可以在vsftpd的配置文件中增加下列两项中的一项:

allow_writeable_chroot=YES

<—————————————————————————————————————–


4)关于虚拟用户的配置参数

a.所有的虚拟用户会被统一映射为一个指定的系统账号,访问的共享位置即为此系统账号的家目录

b.各虚拟用户可被赋予不同的访问权限:通过匿名用户的权限控制参数进行指定:

c.常见的配置虚拟用户的方式有两种(配置到文本中或者配置到数据库中)

我们本次主要是介绍虚拟用户结合mysql数据库来进行配置:

安装所需要的程序:

[root@C67-X64-A1 ~]# rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
[root@C67-X64-A1 ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 
[root@C67-X64-A1 ~]# yum clean all
[root@C67-X64-A1 ~]# yum -y install yum-fastestmirror
[root@C67-X64-A1 ~]# yum -y install pam_mysql(需要注意,如果没有合适的yum源,可能没法进行安装)
[root@C67-X64-A1 ~]# rpm -ql pam_mysql
/lib64/security/pam_mysql.so
/usr/share/doc/pam_mysql-0.7
/usr/share/doc/pam_mysql-0.7/COPYING
/usr/share/doc/pam_mysql-0.7/CREDITS
/usr/share/doc/pam_mysql-0.7/ChangeLog
/usr/share/doc/pam_mysql-0.7/NEWS
/usr/share/doc/pam_mysql-0.7/README
[root@C67-X64-A1 ~]# yum -y install  mysql-server mysql-devel pam_mysql
配置数据库相关的信息:
[root@C67-X64-A1 ~]# /etc/init.d/mysqld start
[root@C67-X64-A1 ~]# /usr/bin/mysqladmin -u root password redhat12345
[root@C67-X64-A1 ~]# mysql -uroot -predhat12345
mysql> create database vsftpd;
mysql> grant select on vsftpd.* to vsftpd@localhost identified by 'vsftpd12345';
mysql> grant select on vsftpd.* to vsftpd@127.0.0.1 identified by 'vsftpd12345';
mysql> grant select on vsftpd.* to vsftpd@'10.10.10.129' identified by 'www.magedu.com';
mysql> flush privileges;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
| vsftpd             |
+--------------------+
4 rows in set (0.00 sec)
mysql> use vsftpd;
Database changed
mysql> show tables;
Empty set (0.00 sec)
mysql> create table users (
    ->  id int AUTO_INCREMENT NOT NULL,
    ->  name char(20) binary NOT NULL,
    -> password char(48) binary NOT NULL,
    ->  primary key(id)
    ->  );
Query OK, 0 rows affected (0.05 sec)
mysql> show tables;
+------------------+
| Tables_in_vsftpd |
+------------------+
| users            
+------------------+
1 row in set (0.00 sec)

创建虚拟用户:

mysql> insert into users(name,password) values('magedu1',password('magedu'));

mysql> insert into users(name,password) values('magedu2',password('magedu'));

mysql> insert into users(name,password) values('wanlong',password('redhat')),('wanzhixing1',password('wanzhixing1'));

mysql> select * from users;

+—-+————-+——————————————-+

| id | name        | password                                  |

+—-+————-+——————————————-+

|  1 | magedu1     | *6B8CCC83799A26CD19D7AD9AEEADBCD30D8A8664 |

|  2 | magedu2     | *6B8CCC83799A26CD19D7AD9AEEADBCD30D8A8664 |

|  3 | wanlong     | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 |

|  4 | wanzhixing1 | *EF6F8314A516192D2CC241E6A6B24E36B33908AA |

+—-+————-+——————————————-+

4 rows in set (0.00 sec)

配置pam的认证方式:

[root@C67-X64-A1 ~]# vim /etc/pam.d/vsftpd.mysql

auth required /lib64/security/pam_mysql.so user=vsftpd passwd=vsftpd12345 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /lib64/security/pam_mysql.so user=vsftpd passwd=vsftpd12345 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

说明:用户vsftpd,密码vsftpd12345,使用localhost登陆,数据库为vsftpd,表为users
crypt=0:表示口令使用明文方式保存在数据库中
crypt=1:表示口令使用UNIX的DES加密方式加密后保存在数据库中
crypt=2:表示口令使用MySQL的password()函数加密后保存在数据库中
crypt=3:表示口令使用MD5散列值的方式保存在数据库中

[root@C67-X64-A1 ~]# useradd -s /sbin/nologin -d /var/ftproot vuser
[root@C67-X64-A1 ~]# chmod go+rx /var/ftproot
请确保/etc/vsftpd/vsftpd.conf中已经启用了以下选项
anonymous_enable=NO
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES
而后添加以下选项
guest_enable=YES
guest_username=vuser
指定访客的身份为vuser。
并确保pam_service_name选项的值如下所示
pam_service_name=vsftpd.mysql

此时用户还只有下载的权限,不能下载,因为默认被映射为匿名用户的权限


5)配置虚拟用户具有不同的访问权限

vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可。

a. 配置vsftpd为虚拟用户使用配置文件目录

# vim vsftpd.conf

添加如下选项

user_config_dir=/etc/vsftpd/vusers_config 

b. 创建所需要目录,并为虚拟用户提供配置文件

# mkdir /etc/vsftpd/vusers_config/

# cd /etc/vsftpd/vusers_config/

# touch magedu1 wanzhixing1

c. 配置虚拟用户的访问权限

虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。比如,如果需要让wanzhixing1用户具有上传文件的权限,可以修改/etc/vsftpd/vusers_config/wanzhixing1文件,在里面添加如下选项即可。

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

blob.png

编辑用户magedu1的权限,设置允许上传、不允许创建目录、不允许删除权限(这里我就不截图演示了)
[root@ns1 vusers_config]# cat magedu1 
anon_upload_enable=YES
anon_mkdir_write_enable=NO
anon_other_write_enable=NO

以上的一些案列与配置,基本上涵盖了vsftpd下面的三种用户的应用。具体的操作不不杂,但需要我们去理解场景,做到跟实际需求结合起来。


原创文章,作者:Net21-冰冻vs西瓜,如若转载,请注明出处:http://www.178linux.com/39628

(0)
Net21-冰冻vs西瓜Net21-冰冻vs西瓜
上一篇 2016-09-19
下一篇 2016-09-19

相关推荐

  • Linux运维学习历程-第四天-Linux的使用帮助和快捷键

    本章内容     命令存放位置     命令帮助      help     man帮助     其它帮助        命令历史     快捷键 一、命令存放位置   &nbsp…

    Linux干货 2016-08-03
  • 自制Linux

    1. 分区出来两个区 fdisk /dev/sdb     2. 创建文件系统   [root@localhost ~]# mkfs.ext4 /dev/sdb1  [root@localhost ~]# mkfs.ext4 /dev/sdb2 3.…

    Linux干货 2016-09-16
  • Ansible初识

    Ansible概念 ansible是自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。说…

    2017-07-08
  • N21沉舟第十周作业

    1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情) 2、为运行于虚拟机上的CentOS 6添加一块新硬件,提供两个主分区;   (1) 为硬盘新建两个主分区;并为其安装grub;   (2) 为硬盘的第一个主分区提供内核和ramdisk文件; 为第二个分区提供rootfs;   (3) 为rootfs提供…

    Linux干货 2016-09-10
  • httpd的介绍以及常用配置

    继上一篇写了LAMP的编译安装之后没有介绍如何配置使用,接下来的几篇会依次介绍,编译安装的过程为http://www.178linux.com/64006 一.httpd介绍 1.httpd是http协议的一个经典实现,也是apache组织中的一个顶级项目,其官方站点为httpd.apache.org。 2.httpd的运行机制 高度模块化(Core+Mod…

    Linux干货 2016-12-22