標籤:描述 方法 ast ulimit structure login 檔案的 flow 解釋
無論安裝什麼版本的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 fifi
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檔案夾。通過修改此檔案夾下的設定檔,可以為應用選定具體的驗證模組
要使/etc/security/limits.conf 檔案配置生效,必須要確保 PAM驗證模組pam_limits.so 檔案被加入到開機檔案中。查看 /etc/pam.d/login 檔案中有:
session required /lib/security/pam_limits.so
64位地址是:/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一行指本檔案中沒有單獨列出的其他應用程式
驗證模組的類型,主要有以下幾種
auth :鑒別類別模組 account:賬戶類別模組
session:會話類別模組 password:口令類別模組
每行只能指定一中類型模組,如果應用程式需要多種模組組合使用,則需要在多行中分別規定。
Control_flag:對模組驗證成功或者失敗的結果的處理情況
Required:該模組驗證成功是使用者通過鑒別的必要條件。只有當應用程式對應的所有帶有required標記的模組全部成功後,該應用程式才能通過 鑒別。同時,如果任何帶有required標記的模組出現了錯誤,PAM並不立刻將錯誤資訊返回給應用程式,而是在所有模組都調用完畢後,再將錯誤資訊返回給調用它的應用程式。
Requisite:與required相似,只有帶有此標記的模組返回成功後,使用者才能通過鑒別,不同之處在於,一旦失敗就不再執行堆中後面的其他模組,並且鑒別過程到此結束。
Optiona: 即使該模組驗證失敗,使用者仍能通過鑒別。在PAM體系中,帶有該標記的模組失敗後,將繼續處理下一模組。
:指出PAM模組的位置。
:用於向特定模組傳遞相關的選項,然後由模組分析解釋這些任選項。比如使用此欄開啟模組調試,或向某模組傳遞諸如逾時值之類的參數等。另外,它還用於支援口令映射技術。
PAM驗證模組的設定檔放在/etc/security/下,這裡只介紹limits.conf檔案。
Limits檔案限制使用者進程解析
PAM驗證模組/lib/security/pam_limits.so主要是限制使用者會話過程中對各種系統資源的使用。其對應的設定檔/etc/security/limits.conf其格式為
Domain type item
使用者名稱/組名軟/硬限制 項目
Domain:指被限制的使用者名稱或組
Soft:當前系統生效的設定值(soft限制不能比hard限制高)
- :同時設定了soft和hard的值
data——最大資料大小(KB)
memlock——最大可用記憶體空間(KB)
nofile——最大可以開啟的檔案數量
stack——最大堆棧空間(KB)
nproc——最大運行進程數
maxlogins——使用者可以登入到系統最多次數
四、理解環境變數檔案使用者進程限制
而最後對於環境變數檔案/etc/profile的更改也是為了修改對目前使用者的進程限制。
-n:設定核心可以同時開啟的檔案描述符的最大值。
-u:設定使用者最多可開啟的程式數目。
資料區段長度:ulimit -d unlimited
最大記憶體大小:ulimit -m unlimited
堆棧大小:ulimit -s unlimited
CPU 時間:ulimit -t unlimited。
虛擬記憶體:ulimit -v unlimited
ulimit: max user processes: cannot modifylimit: 不允許的操作
這種情況是因為liunx對使用者有預設的ulimits限制,這個預設的限制是儲存在/etc/security/limits.conf中,其中的hard配置是個上限,超出上限的修改就會出“不允許的操作”這樣的錯誤,這就是為什麼前面要修改limits.conf檔案的原因。
如umask 022,就是設定檔案許可權為777-022=755
.NET/blog/yhc13429826359/22832521
理解RHEL上安裝oracle的配置參數 :/etc/security/limits.conf, /etc/profile, /etc/pam.d/login