PAM認證機制

一、PAM簡介

Sun公司1995年開發的一種與認證相關的通用框架機制,PAM只關注如何為服務驗證用戶的API,通過提供一些動態鏈接庫和一套統一的API,將系統提供的服務和該服務的認證方式分開;PAM只是一個框架而已,自身不做認證。

它提供了對所有服務進行認證的中央機制,適用于login\telnet\rlogin\fsh\ftp\pp\su等應用程序中。

PAM-API 調用認證接口
PAM-SPI 提供認證接口

對應的文件名:pam_xxxx()

PAM認證一般遵循這樣的順序:Service->PAM(配置文件)->pam_*.so,這就是調用機制

二、配置PAM

PAM的目錄:

/lib64/security/pam* 全是pam模塊
/etc/security/ pam模塊的配置文件
/etc/pam.conf? pam主配置文件,默認不存在(不推薦使用)
/etc/pam.d/ pam子配置文件,推薦使用

?

我們查看/etc/pam.d/passwd

  1. [root@newhostname 1372]# cat /etc/pam.d/passwd
  2. #%PAM-1.0
  3. auth include system-auth
  4. account include system-auth
  5. password substack system-auth
  6. -password optional pam_gnome_keyring.so use_authtok
  7. password substack postlogin
  8. [root@newhostname 1372]#

pam.conf文件格式
1)、第一列為type包括一下項目:
session
auth 只負責賬戶的認證和授權
account 負責賬戶相關,但是是認證之后的
password 負責用戶修改口令時,口令復雜度檢查
-type 表示因為缺失二不能加載的模塊將不記錄在日志內:例-password -session

pam.conf內,每一行,都要經過一次認證

2)、第二列為control,用來表示如何控制,一般都是簡單實現,即一個關機自
required 表示一票否決制,本模塊必須返回成功才能通過認證,但如果失敗,繼續檢查,但總體結果已經失敗了。
requisite 表示一票否決,它和required不同的地方是,不會繼續向下認證,直接返回失敗。
optional :表明本模塊是可選的,它的成功與否不會對身份認證起關鍵作用,其返回值一般被忽略
include: 調用其他的配置文件中定義的配置信息
sufficient:一票通過
3)、第三列為模塊名
具體路徑的引用由主配置文件/etc/pam.conf 中定義

三、PAM模塊示例

1、模塊:pam_securetty.so

功能:只允許root用戶在/etc/securetty列出的安全終端上登陸

例:

  1. 允許root在telnet登陸
  2. 方法一:
  3. [root@newhostname 1372]# vim /etc/pam.d/remote
  4. #%PAM-1.0
  5. auth required pam_securetty.so
  6. auth substack password-auth
  7. auth include postlogin
  8. account required pam_nologin.so
  9. account include password-auth
  10. password include password-auth
  11. # pam_selinux.so close should be the first session rule
  12. session required pam_selinux.so close
  13. session required pam_loginuid.so
  14. # pam_selinux.so open should only be followed by sessions to be executed in the user context
  15. session required pam_selinux.so open
  16. session required pam_namespace.so
  17. session optional pam_keyinit.so force revoke
  18. session include password-auth
  19. session include postlogin
  20. 注釋auth required pam_securetty.so這一行
  21. 方法二:
  22. [root@newhostname 1372]# vim /etc/securetty
  23. 添加
  24. pts/0
  25. pts/1
  26. pts/2
  27. pts/3
  28. .
  29. .
  30. .
  31. pts/9
  32. 第一種修改方法是直接通過禁用該模塊實現的
  33. 第二種方法則是修改pam的規則來實現的
  34. 關于如何獲取修改pam模塊的規則的方法,可以通過 man 模塊名來獲得

2、模塊:pam_shells

功能:檢查有效shell

例:

  1. 不允許使用/bin/csh的用戶本地登錄
  2. [root@newhostname 1372]# vim /etc/shells
  3. /bin/sh
  4. /bin/bash
  5. /sbin/nologin
  6. /usr/bin/sh
  7. /usr/bin/bash
  8. /usr/sbin/nologin
  9. /bin/tcsh
  10. /bin/csh
  11. 去掉 /bin/csh
  12. useradd –s /bin/csh testuser
  13. testuser將不可登錄

3、模塊:pam_nologin.so

功能:

如果/etc/nologin文件存在,將導致非root用戶不能登陸
如果用戶shell是/sbin/nologin 時,當該用戶登陸時,會顯示
/etc/nologin.txt文件內容,并拒絕登陸

4、模塊:pam_limits.so

功能:在用戶級別實現對其可使用的資源的限制,例如:可打
開的文件數量,可運行的進程數量,可用內存空間

修改限制的實現方式:

(1) ulimit命令,立即生效,但無法保存
-n 最多的打開的文件描述符個數
-u 最大用戶進程數
-S 使用 soft(軟)資源限制
-H 使用 hard(硬)資源限制

(2) 配置文件:/etc/security/limits.conf,
/etc/security/limits.d/*.conf

配置文件:每行一個定義;
<domain> <type> <item> <value>

<domain> 應用于哪些對象

Username 單個用戶
@group 組內所有用戶
* 所有用戶

<type> 限制的類型

Soft 軟限制,普通用戶自己可以修改
Hard 硬限制,由root用戶設定,且通過kernel強制生效
– 二者同時限定

<item> 限制的資源

nofile 所能夠同時打開的最大文件數量,默認為1024
nproc 所能夠同時運行的進程的最大數量,默認為1024

<value> 指定具體值

?

示例:pam_limits.so

  1. 限制用戶最多打開的文件數和運行進程數
  2. 查看 /etc/pam.d/system-auth內是否存在“session required pam_limits.so”
  3. vim /etc/security/limits.conf
  4. * soft nofile 102400
  5. * hard nofile 102400
  6. * soft nproc 40960
  7. * hard nproc 40960
  8. 設置所有人最大打開的進程數為40960
  9. 設置雖有人最大打開的文件數為102400

?

四、總結

我們只是pam模塊的使用戶,不是開發者,每個模塊的用法各不相同,所以我們要知道如何去尋找pam模塊的幫助,我們可以通過man來查詢模塊的用法,這個是最快的途徑,或者在官網上下載pam模塊的文檔也是一個不錯的選擇。

pam文檔說明

/user/share/doc/pam-*
rpm -qd pam
man –k pam_模塊名
man 模塊名 如man rootok

pam模塊手冊《The Linux-PAM System Administrators’ Guide》

?

轉載于:https://www.cnblogs.com/momenglin/p/8486069.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/250919.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/250919.shtml
英文地址,請注明出處:http://en.pswp.cn/news/250919.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

02 JSX學習

使用vite處理jsx vite引入的腳本必須是ESM的 npm init -y yarn add vite package.json 添加vite命令 index.html引入jsxJSX是什么 一種標簽語法&#xff0c;在JS基礎上進行的語法擴展不是字符串、也不是HTML是描述UI呈現與交互的直觀的表現形式JSX被編譯后會生成React元素 &am…

使用FreeCookies 控制瀏覽器cookies及修改http響應內容

FreeCookies 插件安裝 1&#xff1a;您的計算機需要已經安裝Fiddler &#xff08;如未安裝&#xff0c;請至官網下載安裝 http://docs.telerik.com/fiddler/configure-fiddler/tasks/configurefiddler&#xff09; 2&#xff1a;進入Fiddler安裝目錄下的Scripts目錄下&#xff…

node --- 使用node連接mysql

1.確保下載了mysql,且mysql處于打開狀態. 2.確保下載了node,并成功安裝:https://nodejs.org/en/ (小黑窗 node -v 查看) 3.安裝node操作mysql的依賴包: # 命令行 npm install --save -mysql# 注:如果沒有package.json 建議先使用 npm init -y 初始化正題 // app.js// 1. 引…

03 渲染元素ReactDOM.render

React與ReactDOM是2個不同的庫&#xff0c;根節點內的所有內容&#xff08;和DOM更新、渲染相關&#xff09;由ReactDOM來管理一個React應用只有一個根節點用ReactDOM.render將React元素渲染到根節點 ReactDOM.render 參數1 React元素&#xff08;React.createElement(類組件/…

javascript --- 異步按順序執行

使用promise可以很優雅的封裝一個異步函數,使其按指定順序執行: // 異步讀取文件操作 const fs require("fs"); function promiseReadFile(url) {return new Promise(function (resolve, reject) {fs.readFile(url, function(err, data) {if(err) {reject(err);} e…

web提高:負載均衡

1、集群 1、為什么建議在阿里云購買負載均衡 非常便宜&#xff0c;又好用&#xff0c;有穩定&#xff0c;有簡單。自己搭建不了負載均衡&#xff0c;因為共有云不支持組播跑不了vrp協議。你不會集群的概念&#xff0c;你還是蒙蒙的。2、為什么使用集群&#xff1f; 1、小規模 …

node --- 一個很好用的包json-server

這個第三方包,可以將json文件暴露出來,用http獲取. (data.json如下) 下載依賴: npm install --g json-server查看是否含有json-server json -sever --version啟動json-server 參考:https://www.npmjs.com/package/json-server

04 組件與Props

一些概念 組件&#xff1a;視圖的片段、內部管理數據集合&#xff08;state&#xff09;外部傳入配置結合&#xff08;props&#xff09;包含&#xff1a; 1. 視圖標記&#xff08;React的JSX、Vue的template&#xff09;需要經過轉換而成為真實的DOM 事件 數據 邏輯&#x…

利用ionic3進行上一行和左一行不動,中間移動的功能

首先在html中的寫法是 <ion-header><ion-navbar><ion-title>歷史數據</ion-title></ion-navbar></ion-header><ion-content ><div style"display:flex;width:625px;"><div class"head">地區</di…

05 state與setState、單向數據流

聲明周期與組件卸載 props配置&#xff1a;使用組件時傳入數據state私有數據&#xff1a;組件內部使用的數據 state的使用注意事項 必須使用setState方法來更改state多個setState會合并調用props和state更新數據要謹慎&#xff08;有可能在異步程序中更新&#xff09;setState…

HDU 3342 Legal or Not(拓撲排序)

描述 ACM-DIY is a large QQ group where many excellent acmers get together. It is so harmonious that just like a big family. Every day,many "holy cows" like HH, hh, AC, ZT, lcc, BF, Qinz and so on chat on-line to exchange their ideas. When someone…

jquery --- 阻止表單默認的提交行為,標準化表單的數據

表單如下: // .html <form id"topics_new_form" method"post" action"/topics/new"><div class"form-group"><label for"exampleInputEmail1">選擇模塊</label><selecet class"form-contr…

javascript --- spa初體驗

首先使用express創建一個簡單的服務器 創建文件夾 be-project # (確保安裝了node,并配置好了環境) 在be-project目錄下(命令行執行) npm init -y npm install --save express body-parse npm install --global nodemon// app.js const express require("express");…

vuex復習筆記

npm install vuex --save 進行安裝 vuex import Vuex from vuex 新建一個vuex文件夾&#xff08;這個不是必須的&#xff09;&#xff0c;并在文件夾下新建store.js文件&#xff0c;文件中引入我們的vue和vuex。 轉載于:https://www.cnblogs.com/jinsuo/p/8508699.html

python學習HTML之CSS(2)

1、邊框的屬性設置 PS&#xff1a;邊框的高度和寬度可以采用百分比&#xff0c;但是高度方向的百分比基本無用&#xff0c;因為基數沒定&#xff0c;參考沒意義&#xff01;&#xff01; 2、內邊距和外邊距 3、在右下角添加一個“回頂部”的標簽。 <div></div>中的…

06 事件處理函數綁定與事件對象

事件處理函數綁定 DOM事件處理 addEventListener or onclick function(){} 純小寫React元素也采用了類似DOM0標準中的事件屬性定義的方法 小駝峰 JSX <button onClick{ this.doSth }></button>直接創建React元素 React.createElement(button,{onClick: { this.…

css -- 兩種方法實現流式布局

Bootstrap將屏幕分為4個等級: 1.超小屏幕 (寬度小于768 px), 顯示寬度 100%; 2.小屏幕 (寬度在768px ~ 992px), 顯示寬度 750px; 3.中等屏幕 (寬度在992px ~ 1200px), 顯示寬度 970px; 4.大屏幕 (寬度大于1200px), 顯示寬度 1170px. js實現: window.addEventListener("r…

python文件名匹配

待匹配文件&#xff1a;#FY3D_IPMNT_GBAL_L1_20180516_0003_030KM_MS.HDF 干擾文件&#xff1a;#FY3D_IPMNT_GBAL_L1_20180516_0003_030KM_MS_uuu.HDF 1.正則表達式import reif re.findall(FY3D_IPMNT_GBAL_L1_\d_\d_030KM_MS.HDF,fileEvery): fileList.append(os.path.join(in…

【XSY1594】棋盤控制 概率DP

題目描述 給你一個\(n\times m\)的棋盤&#xff0c;每次隨機在棋盤上放一個國際象棋中的車&#xff0c;不能和以前放的重疊。每個車可以控制當前行和當前列。當所有行和所有列都被控制時結束游戲。問你結束時期望放了多少個車。 注意&#xff1a;結束的條件是所有行和所有列都被…

07、08 條件渲染、列表渲染

條件渲染 React沒有像v-if、v-show這樣的指令&#xff0c;需要使用JSX表達式組合而成 // 與運算 三目 // 判斷表達式一定是false/null/undefined時才不會被渲染&#xff0c;0、空字符串、NaN會顯示 // 如果render函數返回null&#xff0c;不會進行任何渲染 ......state {showL…