無論安裝什麼版本的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文件的原因。
而umask是反碼的意思。它是爲該用戶新建的文件設定權限信息。
如umask 022,就是設定文件權限爲777-022=755
Umask002,就是設定文件權限爲777-002=775。