環境: 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 ...