系列总索引: 中小企业计算机网络:简介
你好朋友和朋友们!
在本文中,我们打算通过“身份验证”主题提供概述。 PAM。 我们习惯于每天在Linux / UNIX操作系统上使用Workstation,并且每次启动会话时我们都很少停止研究认证机制的发生方式。 我们知道档案的存在吗 / etc / passwd文件,而 / etc /阴影 构成本地用户身份验证凭据的主数据库。 我们希望阅读这篇文章后,您至少-对PAM的工作原理有一个清晰的了解。
认证
出于实际目的,身份验证是针对系统验证用户的方式。 身份验证过程要求存在一组身份和凭据(用户名和密码),并将其与数据库中存储的信息进行比较。 如果显示的凭据与存储的凭据相同,并且该用户的帐户处于活动状态,则称该用户为 真实 成功或成功通过 认证方式.
用户通过身份验证后,该信息就会传递到 门禁服务 确定该用户可以在系统中执行的操作以及他们应得的资源 授权书 访问它们。
可以将用于验证用户的信息存储在系统上的本地数据库中,或者本地系统可以引用远程系统上的现有数据库,例如LDAP,Kerberos,NIS数据库等等。
大多数UNIX®/ Linux操作系统具有必要的工具,可以为最常见的用户数据库类型配置客户机/服务器认证服务。 其中一些系统具有非常完整的图形工具,例如Red Hat / CentOS,SUSE / openSUSE和其他发行版。
PAM:可插入身份验证模块
MGI 插入用于身份验证的模块 当我们使用基于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模块是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-更新 我们将获得以下输出:
系统已启用在安装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模块,甚至没有启用读取指纹的模块,这是我们在某些型号的笔记本电脑中发现的身份验证系统。
具有GNOME3 GUI的CentOS已加入Microsoft Active Directory
如我们所见,已添加并启用了必要的模块-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的pam_mapi通过MAPI针对Kerberos 86 pam_mapi的可插拔身份验证模块.x64_86:用于OATH的可插入登录身份验证的PAM模块pam_pkcs64.i11:PKCS#686 / NSS PAM登录模块pam_pkcs11.x11_86:PKCS#64 / NSS PAM登录模块pam_radius.x11_86:用于RADIUS身份验证的PAM模块pam_script.x64_86:PAM执行脚本的模块pam_snapper.i64:用于调用快照程序的PAM模块pam_snapper.x686_86:用于调用快照程序的PAM模块pam_ssh.x64_86:用于SSH密钥和ssh-agent的PAM模块pam_ssh_agent_64 686:用于ssh-agent认证的PAM模块pam_ssh_agent_auth.x86_64:用于ssh-agent认证的PAM模块pam_url.x86_64:用于通过HTTP服务器进行认证的PAM模块pam_wrapper.x86_64:用于测试PAM应用程序和PAM模块的工具pam_yubico.x86_64: yubikeys的可插入身份验证模块libpamtest-doc.x86_64:libpamtest API文档python-libpamtest.x86_64:libpamtest的python包装器libpamtest.x86_64:测试PAM应用程序和PAM模块的工具libpamtest-devel.x86_64:测试PAM应用程序的工具PAM应用程序和PAM模块
总结
如果我们想以一般的方式了解每次登录Linux / UNIX计算机时如何进行身份验证,那么对PAM的知识要少得多,这一点很重要。 同样重要的是要知道,只有通过本地身份验证,我们才能为小型SME网络中的其他计算机提供服务,例如代理,邮件,FTP等,所有这些都集中在一台服务器上。 以前的所有服务-以及我们以前看到的更多-都有其PAM模块。
咨询来源
- 指令手册- 手册页.
- 认证:西班牙语的维基百科页面
- 可插拔认证模块
- Red_Hat_Enterprise_Linux-6-Deployment_Guide-zh-CN
PDF版本
下载PDF版本 信息.
直到下一篇文章!
作者:Federico A. Valdes Toujague
federicotoujague@gmail.com
https://blog.desdelinux.net/author/fico
我承认一篇关于使用PAM进行身份验证的非常详细的文章,我承认我并不详细了解身份验证的操作以及我们可以为您提供的无数更详细,安全的应用程序。 这是一篇很棒的文章,可让您可视化PAM身份验证的范围,在SME中也可以有多个目标。
非常感谢您的贡献,非常感谢您出色的Fico Material
亲爱的Luigys,谢谢您的评论。 本文的目的是就PAM及其模块打开读者的视野。 我认为该职位成功。
顺便说一句,我通知您,评论没有通过邮件发送给我。
大声笑,我忘了在前面的评论中写我的电子邮件地址。 这就是为什么匿名出现的原因。 😉
一如既往的伟大文章。
非常有启发性的Federico,我不得不不止一次地处理PAM,而且我很欣赏设计,能够在允许的钩子中插入功能非常有用,例如,我最后做的是收集Python / Flask中的REST API我网域的用户的登录和注销信息(老大哥的风格,无所不知),因为他们不知道我将调用放在哪里来通知api? 是的,使用PAM。
感谢HO2GI对帖子的评价。
Dhunter:再次问候。 与往常一样,您正在做非常有趣的事情。 没什么,这篇文章是我分类为“开放思想”的文章之一。