oracle asm,关键字:dbca 11g select disk group is null

1、执行:

/usr/sbin/oracleasm scandisks和/usr/sbin/oracleasm listdisks

查看执行结果, listdisk可以正常的将磁盘组可显示出来.


2
、切换到 grid 用户下 ,查看ASM实例是否启动,并执行查询 

sqlplus / as sysdba

select group_number,path,mount_status,state from v$asm_disk;

select group_number,offline_disks,state from v$asm_diskgroup;

查看磁盘以及磁盘组及其磁盘状态都正常(正常状态为mount);


3
、用户组判断

id oracle 和id grid

查看oracle用户是否在admdba组里面,我这里的问题是把oracle加入到asmadmin组,问题解决

usermod -G asmadmin,asmdba,asmoper,dba,oper oracle


4
、查看oracle用户和grid用户的$ORACLE_HOME/bin/oracle文件的权限

$ORACLE_HOME/bin/oracle 该文件的默认权限为6751权限,有个s权限,如果s权限消失,这时通过OS认证将不能登录到数据库;

经过对问题的逐一排查,终于找到了问题的所在:

执行 chmod +s oracle 解决问题

(?i)正则表达式

Q:经常看见的正则前面的 (?i) (?s) (?m) (?is) (?im) 是什么意思?
A: 称为内联匹配模式,通常用内联匹配模式代替使用枚举值RegexOptions指定的全局匹配模式,写起来更简洁。
(?i) 表示所在位置右侧的表达式开启忽略大小写模式
(?s) 表示所在位置右侧的表达式开启单行模式。
更改句点字符 (.) 的含义,以使它与每个字符(而不是除 \n 之外的所有字符)匹配。
注意:(?s)通常在匹配有换行的文本时使用
(?m) 表示所在位置右侧的表示式开启指定多行模式。
更改 ^ 和 $ 的含义,以使它们分别与任何行的开头和结尾匹配,
而不只是与整个字符串的开头和结尾匹配。
注意:(?m)只有在正则表达式中涉及到多行的“^”和“$”的匹配时,才使用Multiline模式。
上面的匹配模式可以组合使用,比如(?is),(?im)。
另外,还可以用(?i:exp)或者(?i)exp(?-i)来指定匹配的有效范围。

附:

.表示除\n之外的任意字符
*表示匹配0-无穷
+表示匹配1-无穷
多行模式参考实例:点击打开链接

ssh fingerprint 的确认,StrictHostKeyChecking

方式一:在命令行中添加 -o “StrictHostKeyChecking no”
执行ssh或scp命令时,系统就会自动把远程主机的rsa key加入到.ssh/known_hosts文件中。

ssh -o “StrictHostKeyChecking no” root@host
StrictHostKeyChecking no|ask|yes:

StrictHostKeyChecking代码了远程主机的host key确认方式。有如下几种设置。

no代表不做任何确认,直接通过验证,把rsa加入到.ssh/known_hosts。

ask为默认值,需要用户手动确认是否通过验证,是否把远程主机加入到.ssh/known_hosts中。

yes为最高安全级别,如果本地没有相应的rsa key则会直接拒绝连接,并出给提示。

mysql的any_value函数

SELECT ANY_VALUE(ID),USER_ID,ANY_VALUE(problems),ANY_VALUE(last_updated_date) FROM t_iov_help_feedback GROUP BY USER_ID;

MySQL有any_value(field)函数,它主要的作用就是抑制ONLY_FULL_GROUP_BY值被拒绝。
这样sql语句不管是在ONLY_FULL_GROUP_BY模式关闭状态还是在开启模式都可以正常执行,不被mysql拒绝。
any_value()会选择被分到同一组的数据里第一条数据的指定列值作为返回数据。

解决:
select count(*) c,truename from creative_baoming where cid=33 group by userid order by c desc
> 1055 – Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘baoming_cc.creative_baoming.truename’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
> 时间: 0.021s

oracle的kmod-oracleasm,oracleasm-support,oracleasmlib的rpm包

kmod-oracleasm—–centos或rh提供
oracleasm-support和oracleasmlib是oracle官方提供

kmod-oracleasm的rpm通过rpm -qpR kmod-oracleasm…….rpm查看kernel的版本要求

asmlib下载地址:
https://www.oracle.com/linux/downloads/linux-asmlib-rhel6-downloads.html

追加一篇文章:
https://www.thegeekdiary.com/where-to-find-asmlib-oracleasm-rpms-for-centos-rhel-suse-oel

oracle asm 缩写

ASM                         Automated Storage Management 自动存储管理
ASM 是 Oracle 数据库 10g 中一个非常出色的新特性,它以平台无关的方式提供了文件系统、逻辑卷管理器以及软件 RAID(磁盘阵列) 等服务。ASM 可以条带化和镜像磁盘,从而实现了在数据库被加载的情况下添加或移除磁盘以及自动平衡 I/O 以删除“热点”。它还支持直接和异步的 I/O 并使用 Oracle9i 中引入的 Oracle 数据管理器 API(简化的 I/O 系统调用接口)。

RAC                        缩写    real application cluses 实时应用集群
RAC是real application clusters的缩写,译为“实时应用集群”, 是Oracle新版数据库中采用的一项新技术,是高可用性的一种,也是Oracle数据库支持网格计算环境的核心技术。

CRS                        Oracle Cluster Ready Service(Oracle集群就绪服务),简称CRS
在10g和11.1,Oracle的集群称为CRS(Oracle Cluster Ready Service), 在11.2,Oracle的集群称为GI (Grid Infrastructure) 对于CRS/GI,他们的一些核心进程的功能基本类似,但是在11.2,新增了很多新的Deamon进程。

从Oracle 10gR1 RAC 开始,Oracle推出了自身的集群软件,这个软件的名称叫做Oracle Cluster Ready Service(Oracle集群就绪服务),简称CRS。从Oracle 10gR2开始,包括最新的11g,Oracle将其更名为Clusterware(集群件),但通常意义上我们认为CRS = Clusterware = Oracle Cluster Ready Service = Oracle Cluster Software.
CRS一般用来搭建Oracle的并行数据库,即RAC,但除了与RAC的接口之外,CRS还提供了一组高可用性的应用程序接口(API),用来搭建一般应用程序的高可用集群,即一般我们常说的双机热备,比如使用CRS实现MySQL的双机热备。

OCR                       Oracle cluster register         Oracle Configuration Repository

CVU                       Cluster Verification Utility
在安装RAC的过程中,如果没有安装cvuqdisk包,那么集群检验工具(Cluster Verification Utility,CVU)就不能发现共享磁盘。而且,如果没有安装该包或者安装的版本不对的话,那么当运行集群检验工具的时候就会报“PRVF-10037 : Failed to retrieve storage type for “” on node “””或“Could not get the type of storage”或“PRVF-07017: Package cvuqdisk not installed”的错误。cvuqdisk的RPM包含在Oracle Grid Infrastructure安装介质上的rpm目录中。以root用户在RAC的2个节点上都进行安装

 

ACD = Active Change Directory

ACFS = ASM Cluster File System

ADDM = Automatic Database Diagnostic Monitor

ADR = Automatic Diagnostic Repository

ADVM = ASM Dynamic Volume Manager

AIO = Asynchronous I/O

AMDU = ASM Metadata Dump Utility

AMM = Automatic Memory Management

ARC = Archive process

ASH = Active Session History

ASM = Automatic Storage Management

ASMB = ASM Background process

ASMCA = ASM Configuration Assistant

ASMCMD = ASM CoMmanD line utility

ASMLIB = ASM LIBrary tool

ASMM = Automatic Shared Memory Management

ASMSNMP = ASM Simple Network Management Protocol

AT = Allocation Table

ATA = Advanced Technology Attachment

AU = Allocation Unit

AWR = Automatic Workload Repository

BH = Block Header

BMC = Baseboard Management Controller

BS = Block Size

CBO = Cost-Based Optimizer

CF = Control File

CFS = Cluster FileSystem

CHM = Cluster Health Monitor

CIO = Concurrent I/O

CKPT = ChecKPoinT process

CLUVFY = CLUster VeriFy utility

COD = Continuing Operation Directory

CPU = Central Processing Unit or Critical Patch Update

CRM = Customer Relationship Management

CRS = Cluster Ready Services

CSS = Cluster Synchronization Services

CSV = Comma-Separated Values

CVM = Cluster Volume Manager

DB = DataBase

DBCA = DataBase Configuration Assistant

DBFS = DataBase File System

DBM = DataBase Machine

DBMS = DataBase Management Systems

DBPERF = DataBase PERFormance

DBV = DataBase Verification tool

DBW = DataBase Writer process

DD = Disk Directory or Data Description tool

DES = Database Excelleration Systems Inc.

DG = DiskGroup

DH = Disk Header

DIO = Direct I/O

DISM = Dynamic Intimate Shared Memory

DM = Device Mapper

DNFS = Direct Network File System

DRAM = Dynamic Random Access Memory

DSS = Decision Support System

DUL = Data UnLoader

DW = Data Warehouse

EIDE = Enhanced Integrated Drive Electronics

ERP = Enterprise Resource Planning

ETA = Estimated Time of Arrival

ETL = Extract Transform Load

FD = File Directory

FG = FailGroup

FRA = Flash Recovery Area or Fast Recovery Area

FS = FileSystem

FST = Free Segments Table

FTS = Full Table Scan

GC = Grid Control

GI = Grid Infrastructure

GUI = Graphical User Interface

HA = High Availability

HARD = Hardware Assisted Resilient Data

HB = Heart Beat

HBA = Host Bus Adapter

IDE = Integrated Drive Electronics

IIS = Internet Information Services

INST = INSTance

IO = Input/Output

IOPS = IO Per Second

IOT = Index Organized Table

IP = Internet Protocol

IPMI = Intelligent Platform Management Interface

JET = Joint Escalation Team

JFS = Journaled FileSystem

KB = KiloByte

KFED = Kernel Files metadata EDitor

KFOD = Kernel Files Osm disk[group] Discovery

LGWR = redo LoG WRiter process

LLT = Veritas Low Latency Transport protocol

LSNR = LiSteNeR

LUN = Logical Unit Number

LVM = Logical Volume Manager

MAA = Maximum Availability Architecture

MB = MegaByte

NAS = Network Attached Storage

NetApp = Network Appliance

NETCA = NETwork Configuration Assistant

NFS = Network FileSystem

NIC = Network Interface Controller

OCFS = Oracle Cluster FileSystem

OCR = Oracle Cluster Registry

ODM = Oracle Disk Manager

ODS = Operational Data Store

OEL = Oracle Enterprise Linux

OEM = Oracle Enterprise Manager

OID = Oracle Internet Directory

OLAP = OnLine Analytical Processing

OLTP = OnLine Transaction Processing

OMS = Oracle Management Service

OPATCH = Oracle PATCHing utility

OS = Operating System

OSCP = Oracle Storage Compatibility Program

OSW = OS Watcher

OSWFW = OS Watcher For Windows

OTN = Oracle Technology Network

OUI = Oracle Universal Installer

PB = PetaByte

PFILE = Parameter FILE

PGA = Program Global Area

PID = Proces ID

PL/SQL = Procedural Language/Structured Query Language

POC = Proof Of Concept

PROCWATCHER = PROCess WATCHER

PST = Partnership Status Table

PSU = Patch Set Update

PX = Parrallel eXecution

RAC = Real Application Cluster

RAID = Redundant Array of Independent Disks

RAM = Random Access Memory

RBAL = ReBALance process

RCA = Root Cause Analysis

RDA = Remote Diagnostic Agent

RDBMS = Relational DataBase Management System

RHEL = RedHat Enterprise Linux

RM = Resource Manager

RMAN = Recovery MANager

RPM = Resource Package Manager

SAN = Storage Area Network

SAS = Serial Attached SCSI

SATA = Serial Advanced Technology Attachment

SCAN = Single Client Access Name

SCSI = Small Computer System Interface

SGA = System Global Area

SLA = Service Level Agreement

SMF = Service Management Facility

SPFILE = Server Parameter FILE

SQL = Structured Query Language

SRDF = EMC Symmetrix Remote Data Facility

SSD = Solid State Disk

SVCTM = average SerViCe TiMe

SVM = Solaris Volume Manager

TB = TeraByte

TCP = Transmission Control Protocol

TDE = Transparent Data Encryption

TKPROF = Transient Kernel PROFile

TNS = Transparent Network Substrate

UDEV = Unix DEVice manager

UDP = User Datagram Protocol

UFG = Umbilicus ForeGround process

UFS = User FileSystem

VBG = Volume BackGround process

VCS = Veritas Cluster Server

VD = Voting Disk

VDBG = Volume Driver BackGround process

VIP = Virtual Internet Portocol

VLDB = Very Large DataBase

VM = Virtual Machine

VMB = Volume Membership BackGround process

VxFS = Veritas File System

VxVM = Veritas Volume Manager

XDB = XML DataBase

常用的Linux可插拔认证模块(PAM)应用举例:pam_limits.so、pam_rootok.so和pam_userdb.so模块

纯干货 常用的Linux可插拔认证模块(PAM)应用举例:pam_limits.so、pam_rootok.so和pam_userdb.so模块

pam_limits.so模块:
pam_limits.so模块的主要功能是限制用户会话过程中对各种系统资源的使用情况。缺省情况下该模块的配置文件是/etc/security/limits.conf。而该配置文件的基本格式实际上是由4个字段组成的表,其中具体限制的内容包括:

Domain type item value
  用户名/组名 软/硬限制 具体值
   core——core文件大小 (KB)
   data——最大数据大小(KB)
   fsize——最大文件大小(KB)
   memlock——最大可用内存空间(KB)
   nofile——最大可以打开的文件数量
   rss——最大可驻留空间(KB)
   stack——最大堆栈空间(KB)
   cpu——最大CPU使用时间(MIN)
   nproc——最大运行进程数
   as——地址空间限制
   maxlogins——用户可以登录到系统最多次数
   locks——最大锁定文件数目
需要注意的是,如果没有任何限制可以使用”-”号,并且针对用户限制的优先级一般要比针对组限制的优先级更高。

使用pam_limits.so模块的最常见的场景是在运行Oracle数据库的RHEL服务器中,因为一般Oracle数据库在安装之前,按照其官方文档的说明需要先对某些用户(Oracle)使用系统资源的情况进行限制。

所以我们总是能够在Oracle数据库服务器的/etc/security/limits.conf文件中看到类似这样的配置:

oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
结合上面的配置文件说明,可知Oracle数据库需要对Oracle用户使用资源的情况进行一些限制,包括: oracle用户最大能开启的进程数不超过16384,最大能打开的文件数不超过65536。

至于soft和hard的区别,不同于磁盘配额中的软限制和硬限制。普通用户可以调整自己的soft limit但最高不能超过hard limit,而且除了root以外的普通用户也不能够随意更改hard limit。该调整完成之后一般可以使用ulimit命令查看。

顺便提一下,针对nofile,这个只是基于用户层面的限制和调整方法。基于系统层面的限制和调整方法是修改/etc/sysctl.conf文件,直接改fs.file-max参数,调整之后sysctl –p生效。

另外一个例子,pam_limits.so模块也可以使用在对一般应用程序使用的资源限制方面。举例来说,如果需要在SSH服务器上对来自不同用户的ssh访问进行限制,就可以调用该模块来实现相关功能。例如,当需要限制用户admin登录到SSH服务器时的最大连接数(防止同一个用户开启过多的登录进程),就可以在/etc/pam.d/sshd文件中增加一行对pam_limits.so模块的调用:

session required pam_limit.so

然后在/etc/security/limits.conf文件中增加一行对admin用户产生的连接数进行限定:

admin hard maxlogins 2
完成之后重启服务器端的sshd服务。

之后我们可以看到,从客户端以admin身份登录SSH服务器时,在客户端上可以打开两个控制台登录。但当客户端开启第三个登录窗口的时候会被服务器拒绝,但其它用户不会受到限制。

pam_rootok.so模块
一般情况下,pam_rootok.so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码。

pam_rootok.so模块的一个典型应用是插入到一些应用程序的认证配置文件中,当root用户执行这些命令的时候可以不用输入口令而直接通过认证。

比如说“su”命令,为什么当以root用户执行“su”切换到普通用户身份的时候是不需要输入任何口令而可以直接切换过去?

当我们查看一下/etc/pam.d/su文件的内容就不会奇怪了。因为该文件的第一行就是:

auth sufficient pam_rootok.so
而如果将该行配置注释掉的情况下,就会发现即便以root用户切换普通用户的时候仍然要求输入口令。

另外一种方法,只需要将上述的“sufficient”改成“required”即可。因为这样,pam_rootok.so模块的验证通过就成为了必要条件之一。

pam_rootok.so模块的另外一个应用是在chfn命令中。Chfn命令用于改变/etc/passwd中的用户的说明字段。当以root身份执行chfn命令修改用户信息的时候是不用输入密码的。但是以普通用户身份执行chfn则需要输入密码之后才能改变自己的用户说明。这实际上也是因为在/etc/pam.d/chfn配置文件中的第一行调用了pam_rootok.so的结果。

不过这里即便将该配置中的第一行注释掉,root用户通过chfn修改自己信息的时候仍然不需要使用密码。所以恐怕效果不是很明显。究其原因主要是很多PAM模块对root用户是不会产生限制的。

pam_userdb.so模块
pam_userdb.so模块的主要作用是通过一个轻量级的Berkeley数据库来保存用户和口令信息。这样用户认证将通过该数据库进行,而不是传统的/etc/passwd和/etc/shadow或者其它的一些基于LDAP或者NIS等类型的网络认证。所以存在于Berkeley数据库中的用户也称为虚拟用户。

pam_userdb.so模块的一个典型用途就是结合vsftpd配置基于虚拟用户访问的FTP服务器。

相对于本地用户以及匿名用户来说,虚拟用户只是相对于FTP服务器而言才有用的用户,这些用户被严格地限定在pam_userdb数据库当中。所以虚拟用户只能访问FTP服务器所提供的资源,因而可以大大提高系统安全性。另外相对于匿名用户而言,虚拟用户必须通过用户名和密码才能够访问FTP的资源。这样也提高了对FTP用户下载的可管理性。

基于虚拟用户实现的vsftpd的原理基本上是这样一个过程:

先定义一些专门针对FTP的虚拟用户,然后将用户信息加入到系统自带的数据库中(但不是passwd)从而生成一个访问FTP的虚拟用户列表,这里使用的数据库是db4也就是Berkeley DB。然后可以通过使用pam_userdb.so模块来调用该数据库存储用户信息以及实现FTP用户认证。当然同时也可以在系统中通过对配置文件的定义和划分来实现对不同虚拟用户不同类型的访问控制。

下面我将详细介绍一下基于虚拟用户的FTP服务器配置方法,其中也包含了对pam_userdb.so模块的使用。

我的实验环境很简单:

FTP服务器的IP地址是:10.66.0.136,使用的操作系统是RHEL 5.4,FTP服务是vsftpd。

操作步骤:

1.备份配置文件:

[root@dhcp-0-136 ~]# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
2.建立虚拟用户数据库文件login.txt:

[root@dhcp-0-136 vsftpd]# pwd
/etc/vsftpd
[root@dhcp-0-136 vsftpd]# cat login.txt
ftpuser1
123
ftpuser2
123
ftpuser3
123
该文件单数行为用户名称,双数行为用户访问FTP服务器时的口令。

完成之后根据该文件内容创建登录用户数据库文件:

[root@dhcp-0-136 vsftpd]# db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/vsftpd_login.db

之后需要确认系统上已经安装Berkeley DB,即db4软件包。

完成之后,在/etc/vsftpd/vsftpd.conf目录下会产生vsftpd_login.db文件。

设置该文件的访问权限为仅root可读写:

[root@dhcp-0-136 vsftpd]# chmod 600 vsftpd_login.db
3.使用PAM来实现对登录FTP用户的限制:

现在需要创建一个使用数据库的pam配置文件,在这里该文件命名为vsftpd.pam,在/etc/pam.d目录下。

[root@dhcp-0-136 ~]# touch /etc/pam.d/vsftpd.pam
[root@dhcp-0-136 ~]# vi /etc/pam.d/vsftpd.pam
在该文件中写入下面的两行:

[root@dhcp-0-136 ~]# cat /etc/pam.d/vsftpd.pam
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
假如说以后添加了新的用户,那么修改login.txt,然后再次执行命令:
db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/vsftpd_login.db
生成新的数据库即可。

4.建立一个本地用户,其主目录作为虚拟用户对FTP服务器的访问时的服务目录:

[root@dhcp-0-136 ~]# useradd –d /home/ftpsite virtual
通过上面的步骤建立一个名为virtual的本地用户,并且该用户的主目录是/home/virtual

5.现在通过对/etc/vsftpd/vsftpd.conf主配置文件的定义来使虚拟用户可以访问FTP服务:

[root@dhcp-0-136 ~]# vi /etc/vsftpd/vsftpd.conf
既然该服务器要求使用虚拟用户访问,那么需要先关闭匿名用户访问功能:

anonymous_enable=NO
local_enable=YES
另外出于安全考虑,此处添加的所有用户都只赋予对FTP服务器只读权限:

write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
确保用户在登录的时候使用刚才定义的PAM配置文件来进行身份验证,因此更改此行为:

pam_service_name=/etc/pam.d/vsftpd.pam
6.激活虚拟用户功能,并将所有虚拟用户对FTP服务器的访问映射为刚才所添加的virtual用户对FTP服务器的访问。

guest_enable=YES
guest_username=virtual
这个 guest_enable非常重要,该选项用来激活虚拟用户! 而guest_username 是将所有虚拟用户映射成先前所建立的真实用户”virtual”。这也决定了虚拟用户在整个文件系统中的位置,也就是”virtual”的主目录 /home/ftpsite。
如果系统中还有本地用户需要访问FTP服务器,可以再次对本地用户访问FTP服务时的根目录进行指定:

local_root=/home/ftpsite
当然在这里将local_root改为其它用户也没有任何问题。 再增加一行:

listen=YES
表示FTP服务器将会以standalone的模式启动。即不通过xinetd以及/etc/init.d下的脚本启动,而可以直接执行vsftpd的启动。最后启动FTP服务:

[root@dhcp-0-136 ~]# service vsftpd restart
在服务启动之后可在客户端上进行测试: 我们可以使用刚才在自定义数据库中建立的用户ftpuser1、ftpuser2、ftpuser3分别登录FTP服务器进行访问测试,如果都能够在ftp的命令行中正常登录则证明整个实验成功! 但是如果访问失败,比如说如果出现 “failed to open directory”,则有可能是因为目录/home/ftpsite不是全局只读属性(如果想更改,可以通过设置 anon_world_readable_only=NO来实现,这个默认是YES,它是用来设置匿名用户只能下载全局可读的文件)。

7.在FTP服务器的虚拟用户建立之后,可以考虑针对不同的虚拟用户设置不同的访问权限:

整个功能只有在使用虚拟帐号的情况下才能借助虚拟帐号的per-user功能来实现。 为了测试需要,现在添加另外三个新的用户,分别是ftpuser4,ftpuser5和ftpuser6:

[root@dhcp-0-136 vsftpd]# cat login.txt
ftpuser1
123
ftpuser2
123
ftpuser3
123
ftpuser4
123
ftpuser5
123
ftpuser6
123

然后将该文件所有信息再次导入数据库中:

[root@dhcp-0-136 vsftpd]# db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/vsftpd_login.db
假如在该场景中需要设置ftpuser4和ftpuser5用户具有对主目录的读取权限,而ftpuser6具有对主目录的写入权限。 那么可以针对这三个用户分别建立配置文件来进行限制。

首先创建并且定义一个容纳每个用户配置文件的目录:

[root@dhcp-0-136 vsftpd]# mkdir /etc/vsftpd_user_conf
然后在主配置文件中进行定义,定义的是不同用户配置文件所存储的路径,就在刚才建立的目录下:

user_config_dir=/etc/vsftpd_user_conf
进入该目录创建不同用户的配置文件:

[root@dhcp-0-136 vsftpd]# cd /etc/vsftpd_user_conf
创建的ftpuser4配置文件的内容如下:

[root@dhcp-0-136 vsftpd]# ls /etc/vsftpd_user_conf
ftpuser4
[root@dhcp-0-136 vsftpd]# cat /etc/vsftpd_user_conf/ftpuser4
anon_world_readalbe_only=NO
通过上面的定义,ftpuser4用户可以读取的同时也能够下载文件。但是如果写成YES则意味着无法列出文件和目录。 然后赋予ftpuser5用户相同的权限,由于权限与ftpuser4一致,所以只需要拷贝配置文件即可:

[root@dhcp-0-136 vsftpd]#cp /etc/vsftpd_user_conf/ftpuser4 /etc/vsftpd_user_conf/ftpuser5
最后是定义ftpuser6的权限,该用户可以向服务器目录写入和上传,那么配置文件内容为:

[root@dhcp-0-136 vsftpd]# vi /etc/vsftpd_user_conf/ftpuser6
anon_world_readable_only=NO 不仅仅是只读,还可以下载
write_enable=YES 可以写入
anon_upload_enable=YES 可以上传
anon_mkdir_write_enable=YES 可以建立目录
如果ftpuser5已经提升为管理员,现在需要针对管理员定义一个更高的权限,可以将ftpuser5的配置文件增加一行:

anon_other_write_enable=YES 增加管理员用户的删除/重命名的权限
完成之后保存退出,并重启服务:

分别测试ftpuser4、ftpuser5以及ftpuser6的权限会发现:

ftpuser4只有登录浏览权限; ftpuser5除了登录浏览之外还可以删除文件以及重命名文件 ftpuser6可以登录浏览并上传和下载,但是对于已有的文件没有写入权限。

实验到此基本成功!

在实际操作中,这种方法能够更好解决对服务器访问用户细化地设置权限的问题。而且pam_userdb.so模块也不仅仅只是用于在FTP服务中创建和使用虚拟用户,类似的服务,例如postfix,web服务等,都可以使用该模块实现类似功能。