主要参考文档:http://linux.chinaitlab.com/tool/530218.html
http://happy-xp.blog.163.com/blog/static/2324170201088112737694/
http://linuxguest.blog.51cto.com/195664/362366/
在rhel上安装oracle的准备工作中,有一步是为oracle账户设置shell权限,其过程为
首先编辑用户限制配置文件
Vim /etc/security/limits.conf
Oracle soft nproc 2047
Oracle hard nproc 16384
Oracle soft nofile 1024
Oracle hard nofile 65536
将配置文件加入登陆验证模块
Vim ./etc/pam.d/login
Session required pam_limits.so
再更改环境变量文件
Vim /etc/profile
if [ \$USER = "oracle" ]; then
If [ \$SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
F
下面对这一修改内容进行解析。
Pam验证模块解析
Pam来源及功能
首先解释一下pam,pam英文全称为pluggable authentication model,即可插拔认证模块。
为了安全起见,计算机系统只允许经过授权的合法用户访问,这就需要程序提供鉴别登陆用户身份信息的代码。原本实现鉴别功能的代码是作为应用程序的一部分,这种情况下,如果发现所用算法存在某些缺陷或想采用另一种鉴别方法时,用户不得不重写然后重新编译原本的整个程序。很显然这种鉴别方式缺乏灵活性。因此,人们开始寻找一种更好的鉴别方案:一方面,要把鉴别功能代码从应用中独立出来,形成独立模块,单独进行维护,另一方面,为这些鉴别模块建立标准API,以便各应用程序能方便地使用他们提供的各种功能。
1995年,SUN公司提出PAM方式,实现了以上要求,达到了应用程序跟鉴别机制的分离,并且pam可以集成多种鉴别机制,可以轻松实现应用程序的鉴别部分的灵活性。
Pam的结构体系如下:
在rhel中,pam的验证模块有很多,存储位置应该是/lib/security,,如pam_limits.so、pam_group.so等。
每个验证模块的配置文件应该位于/etc/security中,如pam_limits.so模块对应的配置文件为limits.conf,pam_group.so模块对应的配置文件为group.conf等。
而应用程序和认证模块的对应关系则/etc/pam.d文件夹下。通过修改此文件夹下的某些配置文件,可以为应用选定具体的鉴别模块,模块间的组合以及规定模块的行为。
配置文件语法分析:
Pam.d文件夹下配置文件的语法为
Service model_type control_flag model_path options
其中service表示使用pam的应用程序,如ftp、telnet、login等。其中一行other是指本文件中没有单独列出的其他应用。
Module_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用于向特定模块传递相关的选项,然后由模块分析解释这些任选项。比如使用此栏打开模块调试,或向某模块传递诸如超时值之类的参数等。另外,它还用于支持口令映射技术。
至于更多liunx使用的pam模块以及各自的作用可参考:
http://tech.ddvip.com/2012-08/1344351176179539.html
Limits文件限制用户进程解析
Pam_limits模块主要是限制用户会话过程中对各种系统资源的使用情况。其格式为
Domain type item
用户名/组名 软/硬限制 项目
其中Domain用来指名被限制的用户名。
Type,有“soft”、“hard”和“-”三种。soft 指的是当前系统生效的设置值。hard 表明系统中所能设定的最大值。soft 的限制不能比har 限制高。用 - 就表明同时设置了 soft 和 hard 的值。
Item表示限制用户的资源类型。它可以是
core——core文件大小 (KB)
data——最大数据大小(KB)
fsize——最大文件大小(KB)
memlock——最大可用内存空间(KB)
nofile——最大可以打开的文件数量
rss——最大可驻留空间(KB)
stack——最大堆栈空间(KB)
cpu——最大CPU使用时间(MIN)
nproc——最大运行进程数
as——地址空间限制
maxlogins——用户可以登录到系统最多次数
locks——最大锁定文件数目
环境变量文件限制用户进程解析
而最后对于环境变量文件的更改也是为了修改对当前用户的进程限制。
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 modify limit: 不允许的操作
ulimit: open files: cannot modify limit: 不允许的操作
这种情况是因为liunx对用户有默认的ulimits限制,这个默认的限制是保存在/etc/security/limits.conf中,其中的hard配置是个上限,超出上限的修改就会出“不允许的操作”这样的错误,这就是为什么前面要修改limits.conf文件的原因。
而umask是反码的意思,具体可以参看百度。它是为该用户新建的文件设定权限信息。
如umask 022,就是设定文件权限为777-022=755
Umask 002,就是设定文件权限为777-002=775,以此类推。