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博客-2016年8月2日用户、权限

    格式说明: 操作 概念 命令 说明及举例 六.用户、权限 创建用户、修改用户、删除用户 useradd 创建一个用户 useradd -r 创建系统用户,系统用户不创建家目录 useradd -D /etc/default/useradd 默认设置配置文件 newusers +文件 批量创…

    Linux干货 2016-08-24
  • 第六周小练习

    详细总结vim编辑器的使用并完成一下练习 vim编辑器的基本使用 vim模式: 1、编辑模式(命令模式) 2、输入模式 3、末行模式  一、打开文件 vim /path/to/somefile 打开单个文件 如果文件存在为打开,否则保存退出时为新建 vim /path/to/somefile vim +# : 打开文件…

    Linux干货 2016-12-19
  • Linux网络相关概念及bash脚本编程练习

    马哥教育网络班第23期+第八周课堂练习 Linux网络相关概念及bash脚本编程练习 习题: 1.请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别 (1)网桥: 橋接器(英语:network bridge),又称网桥,一種網路裝置,負責網路橋接(network bridging)之用。 橋接器将网络的多个网段在数据链路层(O…

    Linux干货 2016-11-15
  • rsyslog日志系统

    一、前言  什么是日志?    日志就是历史事件,按时间序列将发生的事件予以记录;日志记录信息记录的是事件的发生时间以及事件内容  Linux下记录日志的系统:    syslog:是CentOS 5.0系统上使用的日志系统,有两类日志,分别是syslogd、klogd;    …

    Linux干货 2015-06-15
  • 马哥教育21期网络班—第一周课程+练习

    计算机的组成及功能 根据冯·诺依曼原理 现在计算机有五部分组成 分别是:运算器、控制器、存储器、输入设备和输出设备 现在把运算器和控制器做到一块就是所谓的CPU CPU = 运算器+控制器 存储器:memory 用于存储信息的记忆设备,存储器分为ROM和RAM 编址存储设备 ROM:只读存储器,寻址地址空间的组成部分 RAM:随机存储器 输入和输出设备: 输…

    Linux干货 2016-06-26
  • sed大法好

    sed sed概念 (1)基本概念:sed是流编辑器(stream editor),A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline).作用就是对输入的流(文件或者从一个管道输入的流…

    Linux干货 2016-12-02