PAM認證-中小企業網絡

系列總索引: 中小企業計算機網絡:簡介

你好朋友和朋友們!

在本文中,我們打算通過“身份驗證”主題提供概述。 PAM。 我們習慣於每天在Linux / UNIX操作系統上使用Workstation,並且在少數情況下,我們每次學習會話時都會停下來研究身份驗證機制的發生方式。 我們知道檔案的存在嗎 / etc / passwd文件,而 / etc /陰影 構成本地用戶身份驗證憑據的主數據庫。 我們希望閱讀這篇文章後,您-至少-對PAM的工作原理有一個清晰的了解。

認證方式

出於實際目的,身份驗證是針對系統驗證用戶的方式。 身份驗證過程要求存在一組身份和憑據(用戶名和密碼),並將其與數據庫中存儲的信息進行比較。 如果顯示的憑據與存儲的憑據相同,並且該用戶的帳戶處於活動狀態,則稱該用戶為 真實 成功或成功通過 認證方式.

用戶通過身份驗證後,該信息就會傳遞到 門禁服務 確定該用戶可以在系統中執行的操作以及他們應得的資源 授權 訪問它們。

可以將驗證用戶的信息存儲在系統上的本地數據庫中,或者本地系​​統可以引用遠程系統上的現有數據庫,例如LDAP,Kerberos,NIS數據庫等。

大多數UNIX®/ Linux操作系統具有必要的工具,可以為最常見的用戶數據庫類型配置客戶機/服務器認證服務。 其中一些系統具有非常完整的圖形工具,例如Red Hat / CentOS,SUSE / openSUSE和其他發行版。

PAM:可插入身份驗證模塊

很多 插入用於身份驗證的模塊 當我們使用基於Linux / UNIX的操作系統登錄到桌面時,以及在許多其他情況下,當我們訪問具有特定本地PAM模塊的本地或遠程服務時,我們每天都會使用它們 插入 針對該服務進行身份驗證。

可以通過狀態序列獲得有關如何插入PAM模塊的實用想法 認證 en 與Debian和 en 另一個與CentOS 接下來我們發展.

Debian

文件

如果我們安裝軟件包 libpam文件 我們將在目錄中提供非常好的文檔 / usr / share / doc / libpam-doc / html.

根@ linuxbox:〜#aptitude安裝libpam-doc
根@ linuxbox:〜#ls -l / usr / share / doc / libpam-doc /

目錄中還有關於PAM的更多文檔:

root @ linuxbox:〜#ls -l / usr / share / doc / | grep pam
drwxr-xr-x 2根目錄4096 Apr 5 21:11 libpam0g drwxr-xr-x 4根目錄4096 Apr 7 16:31 libpam-doc drwxr-xr-x 2根目錄4096 Apr 5 21:30 libpam-gnome-密鑰環drwxr-xr-x 3根root 4096 Apr 5 21:11 libpam-modules drwxr-xr-x 2根root 4096 Apr 5 21:11 libpam-modules-bin bin drwxr-xr-x 2根root 4096 Apr 5 21: 11 libpam運行時drwxr-xr-x 2根root 4096 Apr 5 21:26 libpam-systemd drwxr-xr-x 3根root 4096 Apr 5 21:31 python-pam

我們相信,在外出尋找Internet上的文檔之前,我們應該查看已安裝的文檔或可以直接從存在某些問題的程序存儲庫中安裝的文檔,並且在許多情況下,我們會將其複製到硬盤中。 示例如下:

根@ linuxbox:〜#少/ usr / share / doc / libpam-gnome-keyring / README
gnome-keyring是一個為用戶保留密碼和其他秘密的程序。 它類似於ssh-agent在會話中作為守護程序運行,其他應用程序通過環境變量或D-Bus對其進行定位。 該程序可以管理多個密鑰環,每個密鑰環都有自己的主密碼,並且還有一個會話密鑰環,它永遠不會存儲到磁盤上,但是在會話結束時會被忘記。 應用程序使用庫libgnome-keyring與GNOME密鑰環系統集成。

那個翻譯很自由地想表達:

  • gnome-keyring是負責為用戶保留密碼和其他機密的程序。 在每個會話中,它都作為守護程序運行,類似於ssh-agent以及通過環境變量(環境或D-Bus)定位的其他應用程序。 該程序可以處理多個密鑰環,每個密鑰環都有自己的主密碼。 還有一個密鑰環會話,它永遠不會存儲在硬盤上,並且在會話結束時會被忘記。 應用程序使用libgnome-keyring庫與GNOME密鑰環系統集成。.

Debian與基本操作系統

我們從剛安裝了Debian 8“ Jessie”作為操作系統的計算機開始,在其安裝過程中,我們僅選擇“基本系統實用程序”,而沒有標記任何其他安裝任務的選項- 任務 或OpenSSH服務器之類的預定義軟件包。 如果在開始第一個會話之後我們執行:

根@主:〜#pam-auth-update

我們將獲得以下輸出: PAM驗證-01

PAM驗證-02

這表明到目前為止,唯一使用的PAM模塊是UNIX身份驗證。 效用 pam-auth-更新 允許我們在使用PAM模塊提供的預定義配置文件時為系統配置中央身份驗證策略。 有關更多信息,請參見 男子 pam 身份驗證更新.

由於尚未安裝OpenSSH服務器,因此無法在目錄中找到其PAM模塊 /etc/pam.d/,其中將包含截至目前的PAM模塊和配置文件:

根@主:〜#ls -l /etc/pam.d/
總計76 -rw-r-r-- 1個根root 235 Sep 30 2014 atd -rw-r-r-- 1個根root 1208 Apr 6 22:06 common-account -rw-r-r-- 1個根root 1221 6月22日06:1 common-auth -rw-r-r-- 1440個根root 6年22月06日1:1156 common-password -rw-r -r-- 6 root root 22 06月1日1154:6 common-session -rw -r-r-- 22個根目錄06 Apr 1 606:11 common-session-noninteractive -rw-r-r-- 2015個根目錄1 Jun 384 19 cron -rw-r-r-2014個根目錄1 92年19月2014日chfn -rw-r-r-- 1個根root 581年19月2014日chpasswd -rw-r-r-- 1個根root 4756 19年2014月1日chsh -rw-r-- r-- 92個根root 19 2014年1月520日登錄-rw-r-r-- 6根root 2016年1月92日newusers -rw-r-r-- 19根root 2014 1年143月29日其他-rw-r- -r-- 2015根root 1 138年29月2015日passwd- rw-r-r-- 1個根目錄2257 Mar 19 2014 runuser -rw-r-r-- 1個根目錄220 Mar 2 2016 runuser-l -rw -r-r-- XNUMX個根目錄XNUMX Nov XNUMX XNUMX su- rw-r-r-- XNUMX root root XNUMX Sep XNUMX XNUMX systemd-user

例如,使用PAM模塊 /etc/pam.d/chfn 系統配置服務 陰影,而通過 /etc/pam.d/cron 守護程序已配置 cron的。 要了解更多信息,我們可以閱讀每個文件的內容,這很有啟發性。 作為示例,我們在下面提供模塊的內容 /etc/pam.d/cron:

root @ master:〜#少了/etc/pam.d/cron
#cron守護程序的PAM配置文件

@include 通用認證

#設置所需的loginuid進程屬性會話pam_loginuid.so#從pam_env的默認文件/ etc / environment和/etc/security/pam_env.conf中讀取環境變量。 session required pam_env.so#另外,讀取系統區域設置信息session required pam_env.so envfile = / etc / default / locale

@include普通帳戶
@include 公共會話非交互式 

#設置用戶限制,請為cron任務定義限制#通過/etc/security/limits.conf會話需要pam_limits.so

每個文件中的語句順序很重要。 一般而言,除非我們非常了解我們在做什麼,否則我們建議您不要修改其中的任何一個。

具有基本OS + OpenSSH的Debian

root @ master:〜#aptitude安裝任務-ssh-server
將安裝以下新軟件包:openssh-server {a} openssh-sftp-server {a} task-ssh-server

我們將驗證PAM模塊是否已正確添加和配置 sshd的:

根@主:〜#ls -l /etc/pam.d/sshd 
-rw-r-r-- 1 root root 2133 22年2016月XNUMX日/etc/pam.d/sshd

如果我們想知道該個人資料的內容:

根@主:〜#少/etc/pam.d/sshd

換句話說,當我們嘗試使用以下方法從另一台計算機啟動遠程會話時 SSH,本地計算機上的身份驗證是通過PAM模塊完成的 sshd的 主要是,不要忘記ssh服務本身涉及的其他授權和安全方面。

順便說一句,我們添加了此服務的主要配置文件是 的/ etc / SSH / sshd_config中,並且至少在Debian中默認安裝了它,不允許交互式用戶登錄 。 要允許它,我們必須修改文件 的/ etc / SSH / sshd_config中 並更改行:

允許RootLogin無密碼

PermitRootLogin是

然後重新啟動並通過以下方法檢查服務的狀態:

根@主:〜#systemctl重新啟動ssh
根@主:〜#systemctl status ssh

Debian與LXDE桌面

我們與同一個團隊繼續-我們更改了他們的名字或 主機 通過“linux盒子»供將來使用-我們已完成LXDE Desktop的安裝。 跑吧 pam-auth-更新 我們將獲得以下輸出: PAM驗證-03

PAM驗證-04

系統已啟用在安裝LXDE桌面期間進行正確身份驗證所需的所有配置文件-模塊-,如下所示:

  • UNIX認證模塊。
  • 記錄用戶會話的模塊 systemd.
  • GNOME密鑰環守護程序模塊
  • 我們藉此機會建議,在所有情況下,當系統提示您“啟用PAM配置文件”時,請選擇除非我們非常了解我們在做什麼。 如果我們更改由操作系統本身自動進行的PAM配置,則可以輕鬆禁用計算機上的登錄.

在上述情況下,我們正在談論 本地認證 或通過本地計算機啟動遠程會話時針對本地計算機的身份驗證 SSH.

如果我們執行一種方法 遠程認證 在當地隊 對於其憑據存儲在遠程OpenLDAP服務器或Active Directory中的用戶,系統將考慮新的身份驗證形式,並將添加必要的PAM模塊。

主要檔案

  • / etc / passwd文件:用戶帳戶信息
  • / etc /陰影:用戶帳戶的安全信息
  • /etc/pam.conf:僅在目錄不存在時才應使用的文件 /etc/pam.d/
  • /etc/pam.d/:程序和服務安裝其PAM模塊的目錄
  • /etc/pam.d/passwd:PAM配置 passwd文件.
  • /etc/pam.d/普通賬戶:所有服務共有的授權參數
  • /etc/pam.d/common-auth:所有服務共有的身份驗證參數
  • /etc/pam.d/通用密碼:與密碼相關的所有服務共有的PAM模塊- 密碼
  • /etc/pam.d/共同會話:與用戶會話相關的所有服務共有的PAM模塊
  • /etc/pam.d/common-session-noninteractive:與非交互式會話相關的所有服務或不需要用戶干預的所有PAM模塊,例如在非交互式會話的開始和結束時執行的任務。
  • / usr / share / doc / passwd /:文檔目錄。

我們建議您閱讀以下內容的手冊頁: passwd文件 y 陰影 通過 男子密碼 y 男人的影子。 讀取文件內容也很健康 通用帳戶,通用身份驗證,通用密碼,通用會話 y 普通會話非交互.

提供PAM模塊

了解可用的PAM模塊 先驗 在標準的Debian存儲庫中,我們運行:

buzz @ linuxbox:〜$ aptitude搜索libpam

該列表很長,我們將只反映顯示其範圍的模塊:

libpam-afs-session          - PAM module to set up a PAG and obtain AFS tokens                    
libpam-alreadyloggedin      - PAM module to skip password authentication for logged users
libpam-apparmor             - changehat AppArmor library as a PAM module
libpam-barada               - PAM module to provide two-factor authentication based on HOTP
libpam-blue                 - PAM module for local authenticaction with bluetooth devices
libpam-ca                   - POSIX 1003.1e capabilities (PAM module)                             
libpam-ccreds               - Pam module to cache authentication credentials                      
libpam-cgrou                - control and monitor control groups (PAM)                            
libpam-chroot               - Chroot Pluggable Authentication Module for PAM                      
libpam-ck-connector         - ConsoleKit PAM module                 
libpam-cracklib             - PAM module to enable cracklib support 
libpam-dbus                 - A PAM module which asks the logged in user for confirmation         
libpam-duo                  - PAM module for Duo Security two-factor authentication               
libpam-dynalogin            - two-factor HOTP/TOTP authentication - implementation libs           
libpam-encfs                - PAM module to automatically mount encfs filesystems on login        
libpam-fprintd              - PAM module for fingerprint authentication trough fprintd            
libpam-geo                  - PAM module checking access of source IPs with a GeoIP database      
libpam-gnome-keyring        - PAM module to unlock the GNOME keyring upon login                   
libpam-google-authenticator - Two-step verification                 
libpam-heimdal              - PAM module for Heimdal Kerberos       
libpam-krb5                 - PAM module for MIT Kerberos           
libpam-krb5-migrate-heimdal - PAM module for migrating to Kerberos  
libpam-lda                  - Pluggable Authentication Module for LDA                         
libpam-ldapd                - PAM module for using LDAP as an authentication service              
libpam-mkhomedir            -         
libpam-mklocaluser          - Configure PAM to create a local user if it do not exist already     
libpam-modules              - Pluggable Authentication Modules for PAM                            
libpam-modules-bin          - Pluggable Authentication Modules for PAM - helper binaries          
libpam-mount                - PAM module that can mount volumes for a user session                
libpam-mysql                - PAM module allowing authentication from a MySQL server              
libpam-nufw                 - The authenticating firewall [PAM module]                            
libpam-oath                 - OATH Toolkit libpam_oath PAM module   
libpam-ocaml                - OCaml bindings for the PAM library (runtime)                        
libpam-openafs-kaserver     - AFS distributed filesystem kaserver PAM module                      
libpam-otpw                 - Use OTPW for PAM authentication       
libpam-p11                  - PAM module for using PKCS#11 smart cards                            
libpam-passwdqc             - PAM module for password strength policy enforcement                 
libpam-pgsql                - PAM module to authenticate using a PostgreSQL database              
libpam-pkcs11               - Fully featured PAM module for using PKCS#11 smart cards             
libpam-pold                 - PAM module allowing authentication using a OpenPGP smartcard        
libpam-pwdfile              - PAM module allowing authentication via an /etc/passwd-like file     
libpam-pwquality            - PAM module to check password strength 
libpam-python               - Enables PAM modules to be written in Python                         
libpam-python-doc           - Documentation for the bindings provided by libpam-python            
libpam-radius-auth          - The PAM RADIUS authentication module  
libpam-runtime              - Runtime support for the PAM library   
libpam-script               - PAM module which allows executing a script                          
libpam-shield               - locks out remote attackers trying password guessing                 
libpam-shish                - PAM module for Shishi Kerberos v5     
libpam-slurm                - PAM module to authenticate using the SLURM resource manager         
libpam-smbpass              - pluggable authentication module for Samba                           
libpam-snapper              - PAM module for Linux filesystem snapshot management tool            
libpam-ssh                  - Authenticate using SSH keys           
libpam-sshauth              - authenticate using an SSH server      
libpam-sss                  - Pam module for the System Security Services Daemon                  
libpam-systemd              - system and service manager - PAM module                             
libpam-tacplus              - PAM module for using TACACS+ as an authentication service           
libpam-tmpdir               - automatic per-user temporary directories                            
libpam-usb                  - PAM module for authentication with removable USB block devices      
libpam-winbind              - Windows domain authentication integration plugin                    
libpam-yubico               - two-factor password and YubiKey OTP PAM module                      
libpam0g                    - Pluggable Authentication Modules library                            
libpam0g-dev                - Development files for PAM             
libpam4j-java               - Java binding for libpam.so            
libpam4j-java-doc           - Documentation for Java binding for libpam.so

得出自己的結論。

CentOS的

如果在安裝過程中我們選擇選項«帶有GUI的服務器«,我們將獲得一個很好的平台,為SME Network實施各種服務。 與Debian不同,CentOS / RedHat®提​​供了一系列控制台和圖形工具,使系統管理員或網絡管理員的工作更加輕鬆。

文件

默認安裝,我們在目錄中找到它:

[root @ linuxbox〜]#ls -l /usr/share/doc/pam-1.1.8/
總計256 -rw-r-r--。 1 root root 2045 18年2013月2日版權所有drwxr-xr-x。 4096根根9 Apr 06 28:XNUMX HTML
-rw-r-r--。 1個根目錄175382 5月19日13:1 Linux-PAM_SAG.txt -rw-r-r--。 67948根root 18 2013年86.0月2日rfc4096.txt drwxr-xr-x。 9根根06 Apr 28 XNUMX:XNUMX 文字
[root @ linuxbox〜]#ls /usr/share/doc/pam-1.1.8/txts/
README.pam_access README.pam_exec README.pam_lastlog README.pam_namespace README.pam_selinux README.pam_timestamp README.pam_console README.pam_faildelay README.pam_limits README.pam_nologin README.pam_sepermit README.pam_tty_audit README.pam_cracklib README.pam_faillock README.pam_listfile README.pam_permit自述。 pam_shells README.pam_umask README.pam_chroot README.pam_filter README.pam_localuser README.pam_postgresok README.pam_stress README.pam_unix README.pam_debug README.pam_ftp README.pam_loginuid README.pam_pwhistory README.pam_succeed_if README.pam_userdb README.pam_deny README.pam_group README.pam_mail自述.pam_rhosts README.pam_tally README.pam_warn README.pam_echo README README.pam_issue README.pam_mkhomedir README.pam_rootok README.pam_tally2 README.pam_wheel READMEpm_ADMEADME。

是的,我們也像Debian一樣將CentOS團隊稱為“ linuxbox”,它將為我們在SMB Networks上的後續文章提供服務。

具有GNOME3 GUI的CentOS

當我們選擇選項«帶有GUI的服務器«,將安裝GNOME3桌面以及其他實用程序和基本程序來開發服務器。 在控制台級別,要知道身份驗證狀態,我們執行:

[root @ linuxbox〜]#authconfig-tui

PAM驗證-05

我們檢查是否僅啟用了當前服務器配置所需的PAM模塊,甚至沒有啟用讀取指紋的模塊,這是我們在某些​​型號的筆記本電腦中發現的身份驗證系統。

具有GNOME3 GUI的CentOS已加入Microsoft Active Directory

PAM驗證-06

如我們所見,已添加並啟用了必要的模塊-winbind的-為了針對Active Directory進行身份驗證,雖然我們有必要禁用該模塊以讀取指紋,因為這不是必需的。

在以後的文章中,我們將詳細介紹如何將CentOS 7客戶端加入Microsoft Active Directory。 我們只期望通過該工具 身份驗證配置 必要軟件包的安裝,在本地進行身份驗證的域用戶的目錄的自動創建的配置以及將客戶端加入Active Directory的域的過程本身都實現了極大的自動化。 也許在合併之後,僅需要重新啟動計算機即可。

主要檔案

與CentOS身份驗證有關的文件位於目錄中 /etc/pam.d/:

[root @ linuxbox〜]#ls /etc/pam.d/
atd liveinst smartcard-auth-ac authconfig登錄smtp authconfig-gtk其他smtp.postfix authconfig-tui passwd sshd config-util密碼-auth su crond密碼-auth-ac sudo cups pluto sudo-i chfn polkit-1 su-l chsh postlogin系統身份驗證指紋身份驗證postlogin-ac系統身份驗證ac指紋身份驗證ac ppp系統配置身份驗證gdm-自動登錄遠程系統用戶gdm-fingerprint runuser vlock gdm-launch-environment runuser-l vmtoolsd gdm-password samba xserver gdm引腳設置gdm-智能卡smartcard-auth

提供PAM模塊

我們有倉庫 基礎,centosplus,epel, y 更新。 在其中,我們使用以下命令找到了以下模塊之一- 百勝搜索-百勝搜索pam_,而 百勝搜索libpam:

nss-pam-ldapd.i686:使用目錄服務器的nsswitch模塊nss-pam-ldapd.x86_64:使用目錄服務器的nsswitch模塊ovirt-guest-agent-pam-module.x86_64:oVirt訪客代理pam的PAM模塊-kwallet.x86_64:KWallet的PAM模塊pam_afs_session.x86_64:登錄pam_krb5.i686上的AFS PAG和AFS令牌:Kerberos 5的可插拔身份驗證模塊pam_krb5.x86_64:Kerberos的可插拔身份驗證模塊5 Kerberos 86的pam_m64模塊:通過針對Zarafa服務器的MAPI通過pam_oath.x86_64:用於OATH的可插入登錄認證的PAM模塊pam_pkcs11.i686:PKCS#11 / NSS PAM登錄模塊pam_pkcs11.x86_64:PKCS#11 / NSS PAM登錄模塊pam_radius.x86_64:PAM模塊用於RADIUS身份驗證的pam_script.x86_64:用於執行腳本的PAM模塊pam_snapper.i686:用於調用快照程序的PAM模塊pam_snapper.x86_64:用於調用快照程序的PAM模塊pam_ssh.x86_64:用於SSH密鑰和ssh-agent的PAM模塊pam_ssh_agent_686 86:用於ssh-agent認證的PAM模塊pam_ssh_agent_auth.x64_86:用於ssh-agent認證的PAM模塊pam_url.x64_86:用於通過HTTP服務器進行認證的PAM模塊pam_wrapper.x64_86:用於測試PAM應用程序和PAM模塊的工具pam_yubico.x64_86: yubikeys的可插入身份驗證模塊libpamtest-doc.x64_86:libpamtest API文檔python-libpamtest.x64_86:libpamtest的python包裝器libpamtest.x64_86:測試PAM應用程序和PAM模塊的工具libpamtest-devel.x64_XNUMX:測試PAM應用程序的工具PAM應用程序和PAM模塊

總結

如果我們想以一般的方式了解每次登錄Linux / UNIX計算機時如何進行身份驗證,那麼對PAM的知識要少得多,這一點很重要。 同樣重要的是要知道,只有通過本地身份驗證,我們才能為小型SME網絡中的其他計算機提供服務,例如代理,郵件,FTP等,所有這些都集中在一台服務器上。 以前的所有服務-以及我們以前看到的更多-都有其PAM模塊。

諮詢來源

PDF版本

下載PDF版本 這裡.

直到下一篇文章!

作者:Federico A. Valdes Toujague
federicotoujague@gmail.com
https://blog.desdelinux.net/author/fico


6條評論,留下您的評論

發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責數據:MiguelÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。

  1.   拉加托 他說:

    我承認一篇關於使用PAM進行身份驗證的非常詳細的文章,我承認我並不詳細了解身份驗證的操作以及我們可以為您提供的無數更詳細,安全的應用程序。 這是一篇很棒的文章,可讓您可視化PAM身份驗證的範圍,在SME中也可以有多個目標。

    非常感謝您的貢獻,非常感謝您出色的Fico Material

  2.   匿名 他說:

    親愛的Luigys,謝謝您的評論。 本文的目的是就PAM及其模塊打開讀者的視野。 我認為該職位成功。
    順便說一句,我通知您,評論沒有通過郵件發送給我。

  3.   費德里科 他說:

    大聲笑,我忘了在前面的評論中寫我的電子郵件地址。 這就是為什麼匿名出現的原因。 😉

  4.   HO2GI 他說:

    一如既往的偉大文章。

  5.   獵人 他說:

    非常有啟發性的Federico,我不得不不止一次地處理PAM,而且我很欣賞設計,能夠在允許的鉤子中插入功能非常有用,例如,我最後做的是Python中的REST API / Flask收集我域用戶的登錄和註銷信息(老大哥的風格,無所不知),因為他們不知道我將調用放在哪裡來通知api? 是的,使用PAM。

  6.   費德里科 他說:

    感謝HO2GI對帖子的評價。
    Dhunter:再次問候。 與往常一樣,您正在做非常有趣的事情。 沒什麼,這篇文章是我分類為“開放思想”的文章之一。