无论安装什么版本的oracle,在安装之前,都需要配置 /etc/pam.d/login /etc/profile /etc/security/limits.conf这三个文件
那这三个文件究竟是做什么用的呢?答案就是设置对oracle用户的shell limits。下面就仔细分析一下这几个文件
首先需要编辑/etc/security/limits.conf文件(用户限制配置文件)
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
然后编辑/etc/pam.d/login文件 (将配置文件加入到登录验证模块)
Session required pam_limits.so
最后编辑/etc/profile文件(环境变量文件)
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
要弄明白这些文件的作用,我们首先需要了解PAM验证机制
一、理解PAM验证模块机制
PAM的起源和功能
Linux PAM(插件式认证模块,Pluggable Authentication Modules)
为安全起见,计算机系统只有经过授权的合法用户才能访问。这就需要程序提供鉴别登陆用户身份信息的代码。原本实现鉴别功能的代码是作为应用程序的一部分,这种情况下,如果发现所用算法存在某些缺陷或想采用另一种鉴别方法时,用户不得 不重写然后重新编译原本的整个程序。很显然这种鉴别方式缺乏灵活性。因此,人们开始寻找一种更好的鉴别方案:一方面,要把鉴别功能代码从应用中独立出来,形成独立模块,单独进行维护,另一方面,为这些鉴别模块建立标准API,以便各应用程序能方便地使用他们提供的各种功能。插件式鉴别模块(PAM)机制采用模块化设计和插件功能,使得我们可以轻易地在应用程序中插入新的鉴别模块或替换原先的组件,而不必对应用程序做任何修改,从而使软件的定制、维持和升级更加轻松
1995年SUN公司提出PAM方式,实现了以上要求,达到了应用程序和鉴别机制的分离,并且PAM可以集成多种鉴别机制,轻松实现应用程序的鉴别部分的灵活性。
除了具体实现不同外,各种版本 Unix 系统上的 PAM 的框架是相同的,所以我们在这里介绍的 Linux PAM 框架知识具有普遍性。因此在本文介绍其框架的过程中可以看到,我们并没有刻意区分 PAM 与 Linux-PAM 这两个术语。
PAM的分层体系结构
PAM 为了实现其插件功能和易用性,它采取了分层设计思想:让各鉴别模块从应用程序中独立出来,然后通过PAM API作为两者联系的纽带,这样应用程序就可以根据需要灵活地在其中"插入"所需鉴别功能模块,从而真正实现了"鉴别功能,随需应变"。PAM体系结构如下图所示
在rhel中,
PAM的验证模块,存放位置在/lib/security,如pam_limits.so、pam_group.so等
PAM验证模块的配置文件,存放位置 /etc/security中,如pam_limits.so验证模块对应的配置文件limits.conf,pam_group.so验证模块对应的配置文件group.conf。
PAM验证模块和应用程序的对应关系,存放位置/etc/pam.d文件夹。通过修改此文件夹下的配置文件,可以为应用选定具体的验证模块
二、理解PAM验证模块与应用程序对应关系的配置文件
要使/etc/security/limits.conf 文件配置生效,必须要确保 PAM验证模块pam_limits.so 文件被加入到启动文件中。查看 /etc/pam.d/login 文件中有:
session required /lib/security/pam_limits.so64位地址是:/lib64/security/pam_limits.so 否则本地即使输入正确密码也无法登陆。
PAM验证模块与应用程序对应关系的配置文件,即/etc/pam.d下的文件,这里以/etc/pam.d/login为例进行语法分析,/etc/pam.d/目录下的所有文件的语法相同。
Pam.d文件夹下配置文件的语法为
Service model_type control_flag model_path options
Service :使用PAM验证模块的应用程序,如ftp、telnet、login等。其中other一行指本文件中没有单独列出的其他应用程序
model_type :应用程序所用的PAM 验证模块的类型,主要有以下几种
auth :鉴别类模块 account:账户类模块
session:会话类模块 password:口令类模块
每行只能指定一中类型模块,如果应用程序需要多种模块组合使用,则需要在多行中分别规定。
Control_flag:对模块验证成功或者失败的结果的处理情况
Required:该模块验证成功是用户通过鉴别的必要条件。只有当应用程序对应的所有带有required标记的模块全部成功后,该应用程序才能通过 鉴别。同时,如果任何带有required标记的模块出现了错误,PAM并不立刻将错误信息返回给应用程序,而是在所有模块都调用完毕后,再将错误信息返回给调用它的应用程序。
Requisite:与required相似,只有带有此标记的模块返回成功后,用户才能通过鉴别,不同之处在于,一旦失败就不再执行堆中后面的其他模块,并且鉴别过程到此结束。
Optiona: 即使该模块验证失败,用户仍能通过鉴别。在PAM体系中,带有该标记的模块失败后,将继续处理下一模块。
Sufficiet:该模块取得成功是用户通过鉴别的充分条件,也就是说只要标记sufficient的模块一旦成功,那么PAM便立即向应用程序返回成功而不必尝试任何其他模块。当标记为sufficient的模块失败时,sufficient模块当做 optional对待。
Model_path:指出PAM模块的位置。
Options:用于向特定模块传递相关的选项,然后由模块分析解释这些任选项。比如使用此栏打开模块调试,或向某模块传递诸如超时值之类的参数等。另外,它还用于支持口令映射技术。
三、理解PAM验证模块的配置文件
PAM验证模块的配置文件放在/etc/security/下,这里只介绍limits.conf文件。
Limits文件限制用户进程解析
PAM验证模块/lib/security/pam_limits.so主要是限制用户会话过程中对各种系统资源的使用。其对应的配置文件/etc/security/limits.conf其格式为
Domain type item
用户名/组名软/硬限制 项目
Domain:指被限制的用户名或组
Type:
Soft:当前系统生效的设置值(soft限制不能比hard限制高)
Hard:系统中所能设置的最大值
- :同时设置了soft和hard的值
Item:限制用户的资源类型
core——core文件大小(KB)
data——最大数据大小(KB)
fsize——最大文件大小(KB)
memlock——最大可用内存空间(KB)
nofile——最大可以打开的文件数量
rss——最大可驻留空间(KB)
stack——最大堆栈空间(KB)
cpu——最大CPU使用时间(MIN)
nproc——最大运行进程数
as——地址空间限制
maxlogins——用户可以登录到系统最多次数
locks——最大锁定文件数目
四、理解环境变量文件用户进程限制
而最后对于环境变量文件/etc/profile的更改也是为了修改对当前用户的进程限制。
Ulimit:设定shell启动进程所占用的资源。
-n:设置内核可以同时打开的文件描述符的最大值。
-p:设置管道缓冲区的最大值。
-u:设置用户最多可开启的程序数目。
Linux默认限制了系统用户的最大进程数。为了提高性能,可以根据设备资源情况,设置各linux用户的最大进程数。其中一些设置也可以把参数设置成unlimited,即不加限制。如
数据段长度:ulimit -d unlimited
最大内存大小:ulimit -m unlimited
堆栈大小:ulimit -s unlimited
CPU 时间:ulimit -t unlimited。
虚拟内存:ulimit -v unlimited此外,如果单方面在这个位置为用户设置一些参数,有可能会遇到错误提示如下:
ulimit: max user processes: cannot modifylimit: 不允许的操作
ulimit: open files: cannot modify limit: 不允许的操作
这种情况是因为liunx对用户有默认的ulimits限制,这个默认的限制是保存在/etc/security/limits.conf中,其中的hard配置是个上限,超出上限的修改就会出“不允许的操作”这样的错误,这就是为什么前面要修改limits.conf文件的原因