基於Linux安全驗證新增自定義PAM模組

2021-07-27 03:35:25 字數 2576 閱讀 7942

環境: ubuntu 14.04 、pam 1.2.1 ,需要root許可權,以及c語言知識

首先需要了解什麼是pam:

am即可插拔認證模組。它提供了對所有服務進行認證的**機制,適用於login,遠端登入(telnet,rlogin,fsh,ftp,點對點協議(ppp)),

su等應用程式中。系統管理員通過pam配置檔案來制定不同應用程式的不同認證策略;應用程式開發者通過在服務程式中使用pam api(pam_***x( ))來實現對認證方法的呼叫;

而pam服務模組的開發者則利用pam spi來編寫模組(主要是引出一些函式pam_sm_***x( )供pam介面庫呼叫),將不同的認證機制加入到系統中;pam介面庫(libpam)

則讀取配置檔案,將應用程式和相應的pam服務模組聯絡起來

配置pam:

新增自定義pam模組(修改現有pam模組的業務邏輯):

一. 原由:

為什麼需要自定義pam模組,舉例來說,我們配置pam login,已達到阻止root使用者或者其它使用者登入,或者在登入驗證時錯誤一定錯誤時鎖住當前使用者等操作,但是像這種情況,我依然可以進入單使用者模式,以達到進入系統修改配置檔案,還有pam的後門; 或許有人會想將grub加密;好,即使你將grub加密後,我還是一樣可以通過bios破解掉grub加密;所以這種情況,最好是自定義pam模組,或者修改現有的pam模組, 或許我們需要做的不多,一條簡訊,一條郵件即可; 

二. 正題:

1. 所有pam的配置依賴於pam介面庫(libpam), 所以我們不能嘗試說去修改相關pam介面庫

2. 需要查詢當前系統使用的pam版本, 可以檢視/etc/pam.d/目錄下pam的配置檔案

root@erp-client:/etc/pam.d# cat accountsservice

#%pam-1.2

# must use substack here, so the success of pam_unix will still

# cause our pam_pin to run

password substack common-password

password optional pam_pin.so

wget

4. 解壓pam 

mkdir /root/newpam/

tar xvjf /root/newpam/linux-pam-1.2.1.tar.bz2

5. 進入需要修改的模組的相關目錄, 然後修改**:

舉例來說: 

限制使用者登入的功能, 使用者登入驗證失敗達到一定次數然後限制使用者登入。其相關模組是pam_tally2.so , 現在我們需要為該模組新新增一些功能,比如列印一句話,建立乙個檔案,所以我們需要修改pam_tally2.so的原始檔

vim  /root/newpam/linux-pam-1.2.1/modules/pam_tally2/pam_tally

在第170行tally_parse_args函式開頭新增我們修要新增的功能的**(該函式是我們後面在/etc/pam.d/login 配置檔案的引數驗證)

fprintf(stdout, "hello\n");//輸入使用者名稱pam驗證引數時在標準輸出列印hello

file *fd;

// char str[1024];

fd = fopen("/tmp/file.txt", "a");//在tmp目錄新建file.txt目錄

if (fd)

新增後 儲存退出

6. 編譯

mkdir /root/newpam/config //該目錄用來編譯pam的因為我們只需要提前我們需要的模組

cd /root/newpam/linux-pam-1.2.1

./configure --host=arm-linux-gnueabi --prefix=/root/newpam/config

make install

編譯完成後 找到我們自定義的pam_tally2.so, 

輸入命令:find /root/newpam/linux_pam-1.2.1 -name pam_tally2.so

/root/newpam/linux-pam-1.2.1/modules/pam_tally2/.libs/pam_tally2.so

7.配置pam:

修改/etc/pam.d/login 

在檔案開頭位置新增**: 

auth          required       /root/newpam/linux-pam-1.2.1/modules/pam_tally2/.libs/pam_tally2.so deny=3  unlock_time=3 even_deny_root root_unlock_time=3
新增後儲存退出

8在本地終端測試:為測試結果 

注意的是,pam模組不要單獨編譯,一定要整個pam原始碼編譯在提取, 不然的話會出錯,如果出現錯誤的話,導致登入不上終端,可以使用ssh登入,關於ssh登入的限制,可以配置pam,也可以修改ssh配置檔案提高安全等級

linux新增自定義命令

例如在當前使用者下 新增自定義命令 ll表示ls l echo alias ll ls l bashrc source bashrc注意 echo 表示在檔案末尾追加內容 echo 表示覆蓋檔案內容 如果不小心把 bashrc檔案覆蓋了,可以用如下命令恢復 cp etc skel bashrc 該方...

Linux 新增自定義變數

一 按變數的生存週期來劃分,linux變數可分為兩類 1.永久 需要修改配置檔案,變數永久生效。2.臨時 使用export命令宣告即可,變數在關閉shell時失效。二 設定變數的三種方法 1 在 etc profile檔案中新增變數 對所有使用者生效 永久的 2 在使用者目錄下的.bash prof...

el form單個表單域新增自定義驗證

直接把validator寫在data中會報undefined,我們需要把它改造一下,寫在methods中 下面貼 style width 20px height 20px margin 4px 將validator寫在methods中 methods callback imagevalidator ...