㈠ 如何為 linux 系統中的 SSH 添加雙重認證
第一步需要在運行著OpenSSH服務的Linux主機上安裝Google認證器。按照如下步驟安裝Google認證器及其PAM模塊。
用安裝包安裝 Google Authenticator
如果你不想自己構建 Google Authenticator,在幾個 Linux 發行版上有已經編譯好的安裝包。安裝包裡麵包含 Google Authenticator 二進製程序和 PAM 模塊。
在 Ubuntu 上安裝 Google Authenticator:
$ sudo apt-get install libpam-google-authenticator
在 Fedora 上安裝 Google Authenticator:
$ sudo yum install google-authenticator
在 CentOS 上安裝 Google Authenticator ,需要首先啟用 EPEL 軟體庫,然後運行如下命令:
$ sudo yum install google-authenticator
如果不想使用已經編譯好的安裝包,或者你的 Linux 發行版不在此列,可以自行編譯:
在 Linux 上 Google Authenticator
首先,安裝構建 Google Authenticator 所需的軟體包。
在 Debian、 Ubuntu 或 Linux Mint 上:
$ sudo apt-get install wget make gcc libpam0g-dev
在 CentOS、 Fedora 或 RHEL上:
$ sudo yum install wget make gcc pam-devel
然後下載 Google Authenticator 的源代碼,並按如下命令編譯。
$ tar xvfvj libpam-google-authenticator-1.0-source.tar.bz2
$ cd libpam-google-authenticator-1.0
$ make
如果構建成功,你會在目錄中看到 pamgoogleauthenticator.so 和 google-authenticator 兩個文件。
最後,將 Google Authenticator 安裝到合適位置
$ sudo make install
排錯
當編譯 Google Authenticator 時出現如下錯誤:
fatal error: security/pam_appl.h: No such file or directory
要修復這個問題,請安裝如下依賴包。
在 Debian、 Ubuntu 或 Linux Mint 上:
$ sudo apt-get install libpam0g-dev
在 CentOS、 Fedora 或 RHEL 上:
$ sudo yum install pam-devel
當Google認證器安裝好後,你需要在Linux主機上創建驗證密鑰,並且在安卓設備上注冊,注意這項配置操作是一次性的。我們將詳細敘述如何完成這些操作:
生成驗證密鑰
在Linux主機上運行Google認證器
$ google-authenticator
你將看到一個QR碼,它使用如下圖形表示我們數字形態的密鑰。一會我們要用到它在安卓設備上完成配置。
Google認證器會問一些問題,如果你不確定,就回答"Yes"。這個應急備用驗證碼(圖中 emergency scratch codes)可以在你由於丟失了綁定的安卓設備的情況下(所以不能得到生成的一次性密碼)恢復訪問。最好將應急備用驗證碼妥善保存。
在安卓設備上運行Google認證器
我們需要在安卓設備上安裝Google Authenticator app才能完成雙因子認證,到Google Play下載並安裝一個。在安卓設備上運行Google認證器,找到下圖所示中的配置菜單。
你可以選擇"Scan a barcode" 或者"Enter provided key"選項。"Scan a barcode"允許你掃描QR碼來完成密鑰的輸入,在此可能需要先安裝掃描軟體Barcode Scanner app。如果選擇"Enter provided key"選項,你可以使用鍵盤輸入驗證密鑰,如下圖所示:
為SSH伺服器用Google認證器
最終我們需要修改兩個文件來完成集成Google認證器和OpenSSH服務這臨門一腳。
首先,修改PAM配置文件,命令和需添加的內容如下:
$ su
㈡ PAM 教程:二、Linux-PAM 的配置文件
本系列講解了 Linux-PAM 的工作機制和配置方式,並利用幾個 Linux-PAM 模塊做一些有趣的小實驗。附錄中介紹了一些常用的 Linux-PAM 模塊。
本文的目標讀者是期望了解 PAM 認證機制的 Linux 用戶或者系統管理員。如果您是開發人員,希望編寫一個使用 PAM 認證的應用程序,或者是為 PAM 寫插件的開發人員,本文的內容可能並不能滿足您的需求,請參閱 《Linux-PAM應用開發指南》 (英文)和 《Linux-PAM 模塊開發指南》 (英文)。
PAM 的各個模塊一般存放在 /lib/security/ 或 /lib64/security/ 中,以動態庫文件的形式存在(可參閱 dlopen(3) ),文件名格式一般為 pam_*.so 。PAM 的配置文件可以是 /etc/pam.conf 這一個文件,也可以是 /etc/pam.d/ 文件夾內的多個文件。如果 /etc/pam.d/ 這個文件夾存在,Linux-PAM 將自動忽略 /etc/pam.conf 。
/etc/pam.conf 類型的格式如下:
/etc/pam.d/ 類型的配置文件通常以每一個使用 PAM 的程序的名稱來命令。比如 /etc/pam.d/su , /etc/pam.d/login 等等。還有些配置文件比較通用,經常被別的配置文件引用,也放在這個文件夾下,比如 /etc/pam.d/system-auth 。這些文件的格式都保持一致:
不難看出,文件夾形式的配置文件中只是沒有了服務名稱這一列:服務名稱已經是文件名了。
由於很難在時下的發行版本中找到使用 /etc/pam.conf 這一獨立文件作為 PAM 配置的例子,此處僅就 /etc/pam.d/ 格式舉例。在筆者安裝的 CentOS(x64) 7.2.1511 中, /etc/pam.d/login 的內容如下:
# 表示注釋。
每一行代表一條規則。但也可以用 \ 來放在行末,來連接該行和下一行。
例子的最後一行開頭有一個短橫線 - ,意思是如果找不到這個模塊,導致無法被載入時,這一事件不會被記錄在日誌中。這個功能適用於那些認證時非必需的、安裝時可能沒被安裝進系統的模塊。
我們在[第一篇]({% post_url 2016-03-30-pam-tutorial-1-intro %})中接觸了 Linux-PAM 的四種工作類別(type)。在上面的例子中,工作類別作為第一列出現。
講到這里,我們有必要聊一聊 PAM 的 流程棧(stack) 概念:它是認證時執行步驟和規則的堆疊。在某個服務的配置文件中,它體現在了配置文件中的自上而下的執行順序中。棧是可以被引用的,即在一個棧(或者流程)中嵌入另一個棧。我們之後和它會有更多的接觸。
第二列為 控制模式(control) ,用於定義各個認證模塊在給出各種結果時 PAM 的行為,或者調用在別的配置文件中定義的認證流程棧。該列有兩種形式,一種是比較常見的「關鍵字」模式,另一種則是用方括弧( [] )包含的「返回值=行為」模式。
「關鍵字」模式下,有以下幾種控制模式:
「返回值=行為」模式則更為復雜,其格式如下:
其中, valueN 的值是各個認證模塊執行之後的返回值。有 success 、 user_unknown 、 new_authtok_reqd 、 default 等等數十種。其中, default 代表其他所有沒有明確說明的返回值。返回值結果清單可以在 /usr/include/security/_pam_types.h 中找到,也可以查詢 pam(3) 獲取詳細描述。
流程棧中很可能有多個驗證規則,每條驗證的返回值可能不盡相同,那麼到底哪一個驗證規則能作為最終的結果呢?這就需要 actionN 的值來決定了。 actionN 的值有以下幾種:
我們在前文中已經介紹了控制模式(contro)的「關鍵字」模式。實際上,「關鍵字」模式可以等效地用「返回值=行為」模式來表示。具體的對應如下:
正如前文所述,模塊一般保存在 /lib/security 或 /lib64/security 中(取決於操作系統位數)。Linux-PAM 配置文件中的模塊位置可以是相對於上述文件夾的相對路徑,也可以是文件的全路徑。
模塊參數用空格與模塊路徑相隔。該參數將只和特定模塊相關,因此某個模塊的文檔中一定包含其參數的信息。如果需要在單個參數中使用空格,可以將整個參數用方括弧( [] )包裹起來。
㈢ Linux的PAM認證問題。標準的PAM應用程序怎樣將用戶名和明文的密碼傳給PAM服務模塊
自己也寫了一個pam認證模塊,用函數pam_get_authtok可以獲取到登錄用戶輸入的明文口令。
㈣ kali與SUSE Linux 配置SSH認證失敗次數和鎖定時間
第一步:檢查是否有pam_tally2.so模塊。
如果find到了模塊則會如上圖所示,如果沒有就配置軟連接過去。
方法如下:
第二步:配置pam.d下的sshd認證模塊
注意!!!寫下面沒用,本人測試,必須寫在最上面。
第三步:驗證測試。
用win10ssh進虛擬機後,故意輸入多次錯誤密碼。
之後嘗試輸入正確的密碼,發現無法登錄,成功。
再查看登錄失敗記錄
OK成功了。pam_tally2.so其他參數如下:
命令行下輸入: pam_tally2 -r -u root 清零計數器。
㈤ 如何在linux中建立一個普通用戶,並且登錄到本機的FTP伺服器,但不能登錄本機
1、建立虛擬帳號和用戶口令文件
A vi logins.txt 口令庫文件中奇數行為用戶名、偶數行設置密碼
B 生成vsftpd的認證文件
命令 db_load -T -t hash -f ./logins.txt /etc/vsftpd/vsftpd_login.db
C 建立虛擬用戶所需的PAM配置文件。
手工建立vsftpd.vu 文件
****重要****uth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
****重要****account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
建立所有FTP虛擬用戶帳號使用的系統用戶帳號,並設置該帳號宿主目錄的許可權。
# useradd -d /home/ftpsite virtual
# chmod 700 /home/ftpsite
f,設置vsftpd.conf配置文件。
在配置文件中添加虛擬用戶的配置內容。
guest_enable=YES
guest_username=virtual
pam_service_name=vsftpd.vu
重新啟動vsftpd服務程序。
對虛擬用戶設置不同的許可權
設置主配置文件。
在vsftpd.conf文件中添加用戶配置文件目錄設置。
user_config_dir=/etc/vsftpd_user_conf
建立用戶配置文件目錄。
使用mkdir命令建立用戶配置文件目錄。
# mkdir /etc/vsftpd_user_conf
為虛擬用戶建立單獨的配置文件。
用戶配置文件名稱與用戶名相同。
/etc/vsftpd_user_conf/mike
/etc/vsftpd_user_conf/john
裡面的內容如下:
anon_world_readable_only=NO 表示用戶可以瀏覽FTP目錄和下載文件
anon_upload_enable=YES 表示用戶可以上傳文件
anon_mkdir_write_enable=YES 表示用戶具有建立和刪除目錄的許可權
anon_other_write_enable=YES 表示用戶具有文件改名和刪除文件的許可權
沒有的配置項默認按照vsftpd.conf的配置內容
#virtual_use_local_privs 設置為 YES 時,虛擬用戶使用與本地用戶相同許可權,設置為 NO 時,虛擬用戶使用與匿名用戶相同許可權
virtual_use_local_privs=YES
#pam 認證文件名
pam_service_name=vsftpd
#將本地用戶限制在家目錄
chroot_local_user=YES
㈥ 系統之家Linux如何通過PAM限制用戶登錄失敗次數怎麼辦
現在很多地方都有限制用戶登錄的功能,Linux也是如此,當你登錄失敗多次後就可以限制用戶登錄,從而起到保護電腦安全的作用,通過PAM模塊即可實現,下面隨小編一起來了解下吧。
Linux有一個pam_tally2.so的PAM模塊,來限定用戶的登錄失敗次數,如果次數達到設置的閾值,則鎖定用戶。
編譯PAM的配置文件#
vim
/etc/pam.d/login
#%PAM-1.0
auth
required
pam_tally2.so
deny=3
lock_time=300
even_deny_root
root_unlock_time=10
auth
[user_unknown=ignore
success=ok
ignoreignore=ignore
default=bad]
pam_securetty.so
auth
include
system-auth
account
required
pam_nologin.so
account
include
system-auth
password
include
system-auth
#
pam_selinux.so
close
should
be
the
first
session
rule
session
required
pam_selinux.so
close
session
optional
pam_keyinit.so
force
revoke
session
required
pam_loginuid.so
session
include
system-auth
session
optional
pam_console.so
#
pam_selinux.so
open
should
only
be
followed
by
sessions
to
be
executed
in
the
user
context
session
required
pam_selinux.so
open
各參數解釋
even_deny_root
也限制root用戶;
deny
設置普通用戶和root用戶連續錯誤登陸的最大次數,超過最大次數,則鎖定該用戶
unlock_time
設定普通用戶鎖定後,多少時間後解鎖,單位是秒;
root_unlock_time
設定root用戶鎖定後,多少時間後解鎖,單位是秒;
此處使用的是
pam_tally2
模塊,如果不支持
pam_tally2
可以使用
pam_tally
模塊。另外,不同的pam版本,設置可能有所不同,具體使用方法,可以參照相關模塊的使用規則。
在#%PAM-1.0的下面,即第二行,添加內容,一定要寫在前面,如果寫在後面,雖然用戶被鎖定,但是只要用戶輸入正確的密碼,還是可以登錄的!
㈦ Linux裡面pam是什麼
Linux-PAM(linux可插入認證模塊)是一套共享庫,使本地系統管理員可以隨意選擇程序的認證方式。Linux-PAM有四種模塊類型,分別代表四種不同的任務,它們是:認證管理(auth),賬號管理(account),會話管理(session)和密碼(password)管理。
㈧ Linux認證的概念
Linux認證的概念
RHCA(Red Hat Certified Architect),是RedHat公司在2004年推出的頂級認證,也是Linux界公認的操作系統最高級認證。下面是我整理的關於Linux認證的概念,歡迎大家參考!
Linux用戶認證方法簡介
當今IT環境中,任何計算機系統都要充分考慮設計、使用和運行過程中的安全性。所以在目前主流操作系統的各個環節當中都增加了很多安全方面的功能和特性,而在眾多的安全特性和功能中有相當多的技術是確保用戶鑒別和身份認證方面的安全性的。
所謂用戶鑒別,就是用戶向系統以一種安全的方式提交自己的身份證明,然後由系統確認用戶的身份是否屬實的過程。換句話說,用戶鑒別是系統的門戶,每個用戶進入到系統之前都必須經過鑒別這一道關。 而所謂認證安全,簡而言之就是計算機系統確認了用戶是經過授權的合法用戶之後才能允許訪問。安全認證最常用的方式是比對用戶輸入和預存於資料庫中的密碼。
不過在用戶進行身份鑒別和安全認證的過程中,肯定會涉及幾個核心問題。例如:
如何真正實現正確鑒別用戶的真實身份?
在鑒別用戶合法身份之後,如何確定用戶可以對哪些資源進行訪問?
如何控制用戶以何種方式來訪問計算機資源?
如何對用戶的安全訪問隨時隨地按需調整?
上述這些問題都是在設計鑒別和認證程序過程中需要充分考慮和精心設計的。而在Linux類的操作系統中,這些問題的處理實際上有一套完整的流程和機制。
在Linux類的操作系統中,最初用戶鑒別過程就像各種Unix操作系統一樣:系統管理員為用戶建立一個帳號並為其指定一個口令,用戶用此指定的口令登錄之後重新設置自己的口令,這樣用戶就具有了一個只有它自己知道的口令或者密碼。一般情況下,用戶的身份信息在Linux系統中存放在/etc/passwd文件當中,這實際上是一個擁有簡單格式的資料庫表,通過":"作為分隔符分隔出多個欄位,其中包括用戶的名稱、用戶ID、組ID、用戶說明、主目錄和登錄使用的shell等相關信息。而用戶口令經過加密處理後存放於/etc/shadow 文件中。也是一個格式類似的資料庫表,除了用戶名和經過加密之後的密碼之外,還包括多個對密碼有效期進行定義的欄位,包括密碼有效時間、密碼報警時間等。
用戶登錄的時候,登錄服務程序提示用戶輸入其用戶名和口令,然後將口令加密並與/etc/shadow 文件中對應帳號的加密口令進行比較,如果口令相匹配,說明用戶的身份屬實並允許此用戶訪問系統。這種思想基於只有用戶自己知道它的口令,所以輸入的口令是正確的話,那麼系統就認定它是所聲稱的那個人。
在Linux類操作系統中,定義用戶信息和密碼信息的欄位和格式都需要符合標準的Linux Naming Service Switch定義,即NSS定義。因此用戶信息只要保證滿足NSS規范,就可以來源於本地passwd和shadow之外的其它信息資料庫和認證源。所以在此基礎上還派生出一些其它認證解決方案。例如NIS、LDAP等,都可作為存放用戶信息的資料庫,而存放用戶口令或者鑒別用戶身份的資料庫,可以採用專用於網路環境的Kerberos以及智能卡鑒別系統等方式。
這一整套的鑒別和認證方案貌似無懈可擊,但是將這種解決方案真正應用到操作系統中的話就會發現一些問題:
第一,在操作系統上所包含的認證不僅僅只涉及到系統登錄和訪問,在系統外圍往往提供了眾多的應用程序,相當多的應用程序在訪問過程中是有認證需求的。那麼是否需要針對每一個應用程序都得加入認證和鑒別的功能?如果要,那麼無論從程序的開發和使用管理角度來講,工作量都將成倍增加;如果不要,則系統級的用戶鑒別和安全認證與應用程序沒有任何關系,意味著不管用戶是否需要登錄系統,但是對應用程序的訪問都將缺乏最基本的安全性。
第二,如果針對每一個應用程序都開發用戶鑒別和認證的功能,那麼一旦發現所用的.演算法存在某些缺陷或想採用另一種鑒別和認證方法時,開發者或者用戶都將不得不重寫(修改或替換)應用程序,然後重新編譯原程序。
所以,尤其是當實現鑒別功能的代碼以通常方法作為應用程序一部分一起編譯的時候,上述問題將十分突出。很明顯,傳統的身份鑒別和用戶認證方式一旦整合到實際的操作系統中,在實用當中缺乏靈活性。
鑒於以上原因,Linux操作系統的開發者和設計人員開始尋找一種更佳的替代方案:一方面,將鑒別功能從應用中獨立出來,單獨進行模塊化的設計,實現和維護;另一方面,為這些鑒別模塊建立標準的應用程序介面即API,以便眾多的應用程序能方便地使用它們提供的各種功能;同時,鑒別機制對上層用戶(包括應用程序和最終用戶)要求一定要是透明的,這樣可以對使用者隱藏其中比較復雜的實現細節。
可插拔認證模塊PAM的基本概念
事實上直到1995年的時候,SUN的研究人員才提出了一種滿足以上需求的方案,這就是可插拔認證模塊(Pluggable Authentication Mole--PAM)機制,並首次在其操作系統 Solaris 2.3上部分實現。
可插拔認證模塊(PAM)機制採用模塊化設計和插件功能,使用戶可以輕易地在應用程序中插入新的認證模塊或替換原先的組件,同時不必對應用程序做任何修改,從而使軟體的定製、維持和升級更加輕松。因為認證和鑒別機制與應用程序之間相對獨立。所以應用程序可以通PAM API來方便地使用PAM提供的各種鑒別功能而不必了解太多的底層細節。此外PAM的易用性也較強,主要表現在它對上層屏蔽了鑒別和認證的具體細節,所以用戶不必被迫學習各種各樣的鑒別方式,也不必記住多個口令;又由於它實現了多鑒別認證機制的集成問題,所以單個程序可以輕易集成多種鑒別機制,如Kerberos和Diffie - Hellman等認證機制,但用戶仍可以用同一個口令登錄而且感覺不到採取了各種不同的鑒別方法。
在廣大開發人員的努力下,各版本的UNIX系統陸續增加和提供了對PAM應用的支持。其中Linux-PAM是專門為Linux操作系統實現的,眾多的Linux操作系統包括Caldera、Debian、Turbo、Red Hat、SuSE 及它們的後續版本都提供對PAM的支持。而FreeBSD從3.1版本也開始支持PAM。而且除了具體實現方法上多少有些不同外,各種版本Unix系統上PAM的框架是相同的。所以我們在這里介紹的Linux的PAM框架知識具有相當的普遍性,而且在下文介紹其框架過程中可以看到,我們並沒有刻意區分Unix PAM與Linux PAM這兩個技術術語。
PAM的分層體系結構
PAM 為了實現其插件功能和易用性,採取了分層設計思想。就是讓各鑒別模塊從應用程序中獨立出來,然後通過PAM API作為兩者聯系的紐帶,這樣應用程序就可以根據需要靈活地在其中"插入"所需要的鑒別功能模塊,從而真正實現了在認證和鑒別基礎上的隨需應變。實際上,這一思路也非常符合軟體設計中的"高內聚,低耦合"這一重要思想。
PAM 的體系如下簡圖所示:
從上面的結構圖可以看出,PAM 的API起著承上啟下的作用,它是應用程序和認證鑒別模塊之間聯系的紐帶和橋梁:當應用程序調用PAM API 時,應用介面層按照PAM配置文件的定義來載入相應的認證鑒別模塊。然後把請求(即從應用程序那裡得到的參數)傳遞給底層的認證鑒別模塊,這時認證鑒別模塊就可以根據要求執行具體的認證鑒別操作了。當認證鑒別模塊執行完相應的操作後,再將結果返回給應用介面層,然後由介面層根據配置的具體情況將來自認證鑒別模塊的應答返回給應用程序。
上面描述了PAM的各個組成部分以及整體的運作機理。下面將對PAM中的每一層分別加以介紹。
第一層:模塊層。模塊層處於整個PAM體系結構中的最底層,它向上為介面層提供用戶認證鑒別等服務。也就是說所有具體的認證鑒別工作都是由該層的模塊來完成的。對於應用程序,有些不但需要驗證用戶的口令,還可能要求驗證用戶的帳戶是否已經過期。此外有些應用程序也許還會要求記錄和更改當前所產生的會話類的相關信息或改變用戶口令等。所以PAM在模塊層除了提供鑒別模塊外,同時也提供了支持帳戶管理、會話管理以及口令管理功能的模塊。當然,這四種模塊並不是所有應用程序都必需的,而是根據需要靈活取捨。比如雖然login可能要求訪問上述所有的四種模塊,但是su可能僅僅需要使用到鑒別模塊的功能即可。至於如何取捨則涉及到介面層的PAM API和配置文件,這部分內容將在後文中加以介紹。
第二層:應用介面層。應用介面層位於PAM結構的中間部分,它向上為應用程序屏蔽了用戶鑒別等過程的具體細節,向下則調用模塊層中的具體模塊所提供的特定服務。由上圖可以看出,它主要由PAM API和配置文件兩部分組成,下面將逐一介紹。
PAM API可以分為兩類:一類是用於調用下層特定模塊的介面,這類介面與底層的模塊相對應,包括:
鑒別類介面:pam_authenticate()用於鑒別用戶身份,pam_setcred()用於修改用戶的私密信息。
帳號類介面:pam_acct_mgmt()用於檢查受鑒別的用戶所持帳戶是否有登錄系統許可,以及該帳戶是否已過期等。
會話類介面:包括用於會話管理和記帳的 pam_open_session()和 pam_close_session()函數。
口令類介面:包括用於修改用戶口令的 pam_chauthtok()。
第二類介面通常並不與底層模塊一一對應,它們的作用是對底層模塊提供支持以及實現應用程序與模塊之間的通信等。具體如下:
管理性介面: 每組 PAM 事務從 pam_start()開始,結束於 pam_end()函數。介面 pam_get_item()和 pam_set_item()用來讀寫與 PAM 事務有關的狀態信息。同時,能夠用 pam_str()輸出 PAM 介面的出錯信息。
應用程序與模塊間的通訊介面:在應用程序初始化期間,某些諸如用戶名之類的數據可以通過 pam_start()將其存放在PAM介面層中,以備將來底層模塊使用。另外底層模塊還可以使用 pam_putenv()向應用程序傳遞特定的環境變數,然後應用程序利用pam_getenv()和pam_getenvlist()讀取這些變數。
用戶與模塊間的通訊介面:pam_start()函數可以通過會話式的回調函數,讓底層模塊通過它們讀寫模塊相關的鑒別信息,比如以應用程序所規定的方式提示用戶輸入口令。
模塊間通訊介面:盡管各模塊是獨立的,但是它們仍然能夠通過pam_get_item()和pam_set_item()介面共享某些與鑒別會話有關的公用信息,諸如用戶名、服務名、口令等。此外,這些API還可以用於在調用pam_start()之後,讓應用程序修改狀態信息。
讀寫模塊狀態信息的介面:介面pam_get_data()和pam_set_data()用以按照PAM句柄要求訪問和更新特定模塊的信息。此外,還可以在這些模塊後附加一個清除數據函數,以便當調用 pam_end()時清除現場。
由於 PAM 模塊隨需載入,所以各模塊始化任務在第一次調用時完成。如果某些模塊的清除任務必須在鑒別會話結束時完成,則它們應該使用 pam_set_data()規定清除函數,這些執行清除任務的函數將在應用程序調用 pam_end()介面時被調用。
;