LPI Linux 认证/LPIC2 考试 202/网络客户端管理
|
- DHCP 配置
- NIS 配置
- LDAP 配置
- PAM 身份验证
- DHCP 配置
描述:考生应能够配置 DHCP 服务器并设置默认选项,创建子网和创建动态分配的范围。此目标包括添加静态主机,设置单个主机的选项,以及添加 BOOTp 主机。还包括配置 DHCP 中继代理,并在更改后重新加载 DHCP 服务器。
关键文件,术语和实用程序包括
dhcpd.conf dhcpd.leases
大多数阅读本文的人已经了解 DHCP 协议。只是作为一个快速的提醒。DHCP 代表动态主机配置协议,通常用于在网络中分发特定的网络设置。例如默认网关、名称服务器、IP 地址等等。
关于协议本身的一个小例子。
<在此插入关于 DHCP 请求的示意图>
安装 dhcpd 后,主配置文件可以在 /etc/dhcpd.conf 中找到。对于 Debian 安装,应在安装完成后立即编辑 /etc/default/dhcp,并根据您的设置更改以下行。
INTERFACES="eth1" # or "eth1 eth2", whatever interfaces you wish to serve ip's.
dhcpd.conf 文件分为全局参数和子网特定参数。每个子网都可以覆盖全局参数。最常用的参数如下。
option domain-name "example.com"; option domain-name-servers "192.168.0.1, 193.190.63.172" option subnet-mask 255.255.255.0; # global Subnet mask default-lease-time 600; # Seconds each DHCP lease is granted and after which a request for the same ip is launched. max-lease-time 7200; # If DHCP server does not respond, keep IP till 7200 seconds are passed. subnet 192.168.0.0 netmask 255.255.255.240 { # Subnet for first 13 devices, 10 of which are servers, 3 printers range 192.168.0.10 192.168.0.13; # Range of IP's for our printers option subnet-mask 255.255.255.240; option broadcast-address 192.168.0.15; # This is the subnets broadcast address option routers 192.168.0.14; # The gateway of this subnet option time-servers 192.168.0.14; # Gateway is running a timeserver option ntp-servers 192.168.0.14; # Gateway running a timeserver } subnet 192.168.0.16 netmask 255.255.255.224 { # Subnet for 29 computers range 192.168.0.17 192.168.0.45; option subnet-mask 255.255.255.224; option broadcast-address 192.168.0.47; option routers 192.168.0.46; } group { host server1 { # the first fixed server for subnet 192.168.0.0/28 server-name server1; hardware ethernet 0f:45:d3:23:11:90; fixed-address 192.168.0.1; } host server2 { server-name server2; hardware ethernet 0f:45:d3:23:11:91; fixed-address 192.168.0.2; } }
此示例只是提供关于可能的选项和覆盖的提示。
更多信息可以在 dhcpd.conf 和 dhcp-options 的手册页中找到。在这些页面中查找有关使用 DHCP 服务器来提供 BOOTP 的信息,这对无盘客户端很有用。
描述:考生应能够配置 NIS 服务器并为主要配置文件创建 NIS 地图。此目标包括将系统配置为 NIS 客户端,设置 NIS 从服务器,以及配置在 nsswitch.conf 中搜索本地文件、DNS、NIS 等等的能力。
关键文件,术语和实用程序包括
nisupdate, ypbind, ypcat, ypmatch, ypserv, ypswitch, yppasswd, yppoll, yppush, ypwhich, rpcinfo nis.conf, nsswitch.conf, ypserv.conf /etc/nis/netgroup /etc/nis/nicknames /etc/nis/securenets
NIS 代表网络信息服务。它的目的是向网络上的所有机器提供必须在整个网络中都知道的信息。NIS 可能会分发的信息包括登录名/密码/主目录 (/etc/passwd) 和组信息 (/etc/group)
例如,如果您的密码条目记录在 NIS passwd 数据库中,您将能够登录网络上所有运行 NIS 客户端程序的机器。
在一个网络中,必须至少有一台机器充当 NIS 服务器。您可以有多个 NIS 服务器,每个服务器服务不同的 NIS “域” - 或者您可以有协作的 NIS 服务器,其中一台是主 NIS 服务器,所有其他服务器都是所谓的从 NIS 服务器(针对某个 NIS “域” 而言!)- 或者您也可以混合使用它们...
从服务器只保存 NIS 数据库的副本,并在主 NIS 服务器的数据库发生更改时从主 NIS 服务器接收这些副本。根据网络中机器的数量和网络的可靠性,您可能决定安装一个或多个从服务器。每当 NIS 服务器出现故障或响应请求的速度过慢时,连接到该服务器的 NIS 客户端将尝试查找一个正常运行的或响应速度更快的服务器。
NIS 数据库采用 DBM 格式,源自 ASCII 数据库。例如,文件 /etc/passwd 和 /etc/group 可以使用 ASCII 到 DBM 的翻译软件(“makedbm”,包含在服务器软件中)直接转换为 DBM 格式。主 NIS 服务器应该同时具有 ASCII 数据库和 DBM 数据库。
从服务器将收到对 NIS 地图的任何更改的通知(通过“yppush”程序),并自动检索必要的更改以同步其数据库。NIS 客户端不需要这样做,因为它们总是与 NIS 服务器对话以读取存储在其 DBM 数据库中的信息。
要运行下面提到的任何软件,您需要运行程序 /usr/sbin/portmap。RPC 端口映射器 (portmap(8)) 是一个将 RPC 程序号转换为 TCP/IP(或 UDP/IP)协议端口号的服务器。它必须运行才能对该机器上的 RPC 服务器(如 NIS 或 NIS+ 服务器)进行 RPC 调用(这是 NIS/NIS+ 客户端软件所做的)。当 RPC 服务器启动时,它会告诉端口映射器它正在监听哪个端口号,以及它准备服务哪些 RPC 程序号。当客户端希望对给定程序号进行 RPC 调用时,它首先会联系服务器机器上的端口映射器以确定应发送 RPC 数据包的端口号。
由于 RPC 服务器可能由 inetd(8) 启动,因此端口映射器应该在 inetd 启动之前运行。对于安全的 RPC,端口映射器需要时间服务。确保时间服务在所有主机的 /etc/inetd.conf 中启用
# Time service is used for clock synchronization. # time stream tcp nowait root internal time dgram udp wait root internal
重要:不要忘记在更改其配置文件后重启 inetd!
设置 NIS 需要什么?
确定您是服务器、从服务器还是客户端:您的机器将成为具有现有 NIS 服务器的网络的一部分您网络中还没有任何 NIS 服务器
在第一种情况下,您只需要客户端程序 (ypbind、ypwhich、ypcat、yppoll、ypmatch)。最重要的程序是 ypbind。该程序必须始终运行,这意味着它应该始终出现在进程列表中。它是一个守护进程,需要从系统的启动文件(例如 /etc/init.d/nis、/sbin/init.d/ypclient、/etc/rc.d/init.d/ypbind、/etc/rc.local)启动。一旦 ypbind 运行,您的系统就变成了 NIS 客户端。
在第二种情况下,如果您没有 NIS 服务器,那么您还需要一个 NIS 服务器程序(通常称为 ypserv)。第 9 节描述了如何在您的 Linux 机器上使用“ypserv”守护进程设置 NIS 服务器。
ypbind 守护进程
较新的 ypbind 版本有一个配置文件叫做 /etc/yp.conf。你可以在里面硬编码 NIS 服务器 - 更多信息请参见 ypbind(8) 手册页。你还需要这个文件用于 NYS。一个例子
ypserver 10.10.0.1 ypserver 10.0.100.8 ypserver 10.3.1.1
如果系统能够在没有 NIS 的情况下解析主机名,你可以使用主机名,否则你必须使用 IP 地址。ypbind 3.3 有一个 bug,只会使用最后一个条目(例如 ypserver 10.3.1.1)。所有其他条目都会被忽略。ypbind-mt 会正确处理这个问题,并使用第一个响应的条目。
在将 ypbind 纳入启动文件之前,最好测试一下它。要测试 ypbind,请执行以下操作
确保你已经设置了 YP 域名。如果没有设置,请执行以下命令:/bin/domainname nis.domain
其中 nis.domain 应该是一个 _不_ 通常与你的机器的 DNS 域名相关的字符串!这样做是为了让外部攻击者更难从你的 NIS 服务器获取密码数据库。如果你不知道你的网络上的 NIS 域名是什么,请咨询你的系统/网络管理员。
如果 "/usr/sbin/portmap" 还没有运行,请启动它。如果目录 "/var/yp" 不存在,请创建它。启动 "/usr/sbin/ypbind"
使用命令 "rpcinfo -p localhost" 检查 ypbind 是否已成功向 portmapper 注册其服务。输出应该像
program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100007 2 udp 637 ypbind 100007 2 tcp 639 ypbind
或者像这样(取决于你使用的 ypbind 版本)
program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100007 2 udp 758 ypbind 100007 1 udp 758 ypbind 100007 2 tcp 761 ypbind 100007 1 tcp 761 ypbind
你也可以运行 "rpcinfo -u localhost ypbind"。这个命令应该产生类似于
program 100007 version 1 ready and waiting program 100007 version 2 ready and waiting
输出取决于你安装的 ypbind 版本。重要的是只有 "version 2" 消息。现在你应该能够使用 NIS 客户端程序,如 ypcat 等。例如,"ypcat passwd.byname" 将会显示整个 NIS 密码数据库。
重要:如果你跳过了测试步骤,请确保你已经设置了域名,并创建了目录 /var/yp。这个目录 _必须_ 存在,才能使 ypbind 成功启动。要检查域名是否设置正确,请使用 yp-tools 2.2 中的 /bin/ypdomainname。它使用 yp_get_default_domain() 函数,该函数更加严格。它不允许例如 "(none)" 域名,这是 Linux 下的默认值,会导致很多问题。
如果测试成功,你可能需要更改你的启动文件,以便 ypbind 在引导时启动,你的系统将充当 NIS 客户端。确保在启动 ypbind 之前设置域名。好了,就是这样。重启机器,观察引导消息,看看 ypbind 是否真的启动了。对于主机查找,你必须在 /etc/host.conf 文件中的查找顺序行中设置(或添加)"nis"。更多详细信息,请阅读手册页 "resolv+.8"。在你的 NIS 客户端的 /etc/passwd 文件中添加以下行
+::::::
你也可以使用 + 和 - 字符来包含/排除或更改用户。如果你想排除用户 guest,只需在你的 /etc/passwd 文件中添加 -guest。你想为用户 "linux" 使用不同的 shell(例如 ksh)?没问题,只需在你的 /etc/passwd 文件中添加 "+linux::::::/bin/ksh"(不带引号)。你不希望更改的字段必须留空。你也可以使用 Netgroups 来控制用户。
例如,要允许只有 miquels、dth 和 ed 以及 sysadmin netgroup 的所有成员登录,但让所有其他用户的帐户数据可用,请使用
+miquels::::::: +ed::::::: +dth::::::: +@sysadmins::::::: -ftp +:*::::::/etc/NoShell
请注意,在 Linux 中,你也可以覆盖密码字段,就像我们在本例中所做的那样。我们还删除了登录 "ftp",因此它不再存在,匿名 ftp 将无法工作。netgroup 将如下所示
sysadmins (-,software,) (-,kukuk,)
网络服务切换文件 /etc/nsswitch.conf 决定了在请求特定信息时执行查找的顺序,就像 /etc/host.conf 文件决定主机查找的方式一样。例如,行
hosts: files nis dns
指定主机查找函数应首先在本地 /etc/hosts 文件中查找,然后是 NIS 查找,最后是域名服务(/etc/resolv.conf 和 named),如果找不到匹配项,则返回错误。该文件必须对所有用户可读!你可以在手册页 nsswitch.5 或 nsswitch.conf.5 中找到更多信息。
适用于 NIS 的良好的 /etc/nsswitch.conf 文件是
# /etc/nsswitch.conf passwd: compat group: compat
# For libc5, you must use shadow: files nis shadow: compat passwd_compat: nis group_compat: nis shadow_compat: nis hosts: nis files dns services: nis [NOTFOUND=return] files networks: nis [NOTFOUND=return] files protocols: nis [NOTFOUND=return] files rpc: nis [NOTFOUND=return] files ethers: nis [NOTFOUND=return] files netmasks: nis [NOTFOUND=return] files netgroup: nis bootparams: nis [NOTFOUND=return] files publickey: nis [NOTFOUND=return] files automount: files aliases: nis [NOTFOUND=return] files
服务器程序 ypserv
如果你运行服务器作为主服务器,请确定你需要通过 NIS 提供哪些文件,然后在 /var/yp/Makefile 中的 "all" 规则中添加或删除相应的条目。你应该始终查看 Makefile 并编辑文件开头的 Options。
ypserv 1.1 和 ypserv 1.2 之间有一个重大变化。从 1.2 版本开始,文件句柄被缓存。这意味着如果你创建新的映射,你必须始终使用 -c 选项调用 makedbm。确保你使用的是 ypserv 1.2 或更高版本中的新 /var/yp/Makefile,或者在 Makefile 中向 makedbm 添加 -c 标志。如果你没有这样做,ypserv 将继续使用旧的映射,而不是更新的映射。
现在编辑 /var/yp/securenets 和 /etc/ypserv.conf。更多信息,请阅读 ypserv(8) 和 ypserv.conf(5) 手册页。
确保 portmapper (portmap(8)) 正在运行,然后启动服务器 ypserv。命令 « rpcinfo -u localhost ypserv » 应该输出类似于
program 100004 version 1 ready and waiting program 100004 version 2 ready and waiting
“version 1” 行可能缺失,具体取决于你使用的 ypserv 版本和配置。只有在你有旧的 SunOS 4.x 客户端时才需要它。
现在生成 NIS (YP) 数据库。在主服务器上运行
% /usr/lib/yp/ypinit -m
在从服务器上确保 ypwhich -m 工作。这意味着,你的从服务器必须配置为 NIS 客户端,然后你才能运行 « /usr/lib/yp/ypinit -s masterhost » 将主机安装为 NIS 从服务器。就这样,你的服务器已启动并运行。
如果你遇到更大的问题,你可以在不同的 xterm 中以调试模式启动 ypserv 和 ypbind。调试输出应该会显示问题所在。
如果你需要更新映射,请在 NIS 主服务器的 /var/yp 目录中运行 make。这将更新映射(如果源文件较新),并将文件推送到从服务器。请不要使用 ypinit 来更新映射。你可能需要编辑从服务器上的 root 的 crontab,并添加以下行
20 * * * * /usr/lib/yp/ypxfr_1perhour 40 6 * * * /usr/lib/yp/ypxfr_1perday 55 6,18 * * * /usr/lib/yp/ypxfr_2perday
这将确保大多数 NIS 映射保持最新,即使在从服务器在主服务器上更新时处于关闭状态而导致更新丢失的情况下也是如此。
你可以在以后随时添加从服务器。首先,确保新从服务器有权联系 NIS 主服务器。然后运行
% /usr/lib/yp/ypinit -s masterhost
在新的从服务器上。在主服务器上,将新从服务器名称添加到 /var/yp/ypservers,并在 /var/yp 中运行 make 以更新映射。
rpc.ypxfrd 用于加快将非常大的 NIS 映射从 NIS 主服务器传输到 NIS 从服务器的速度。如果 NIS 从服务器收到一条消息,表明有一个新的映射,它将启动 ypxfr 来传输新映射。ypxfr 将使用 yp_all() 函数从主服务器读取映射的内容。当有非常大的映射需要由数据库库存储时,此过程可能需要几分钟。
rpc.ypxfrd 服务器通过允许 NIS 从服务器简单地复制主服务器的映射文件而不是从头开始构建自己的映射文件来加快传输过程。rpc.ypxfrd 使用基于 RPC 的文件传输协议,因此不需要构建新的映射。
rpc.ypxfrd 可以由 inetd 启动。但由于它的启动速度很慢,因此应该与 ypserv 一起启动。你只需要在 NIS 主服务器上启动 rpc.ypxfrd。
每当用户更改密码时,NIS 密码数据库以及可能依赖于 NIS 密码数据库的其他 NIS 数据库都应该更新。程序 "rpc.yppasswdd" 是一个处理密码更改的服务器,确保 NIS 信息将相应更新。rpc.yppasswdd 现在已集成到 ypserv 中。你不需要更旧的单独的 yppasswd-0.9.tar.gz 或 yppasswd-0.10.tar.gz,也不应该再使用它们。ypserv 1.3.2 中的 rpc.yppasswdd 具有完整的 shadow 支持。yppasswd 现在是 yp-tools-2.2.tar.gz 的一部分。
您只需要在 NIS 主服务器上启动 rpc.yppasswdd。默认情况下,用户不允许更改其全名或登录 Shell。您可以使用 -e chfn 或 -e chsh 选项允许这样做。如果您的 passwd 和 shadow 文件不在 /etc 以外的目录中,则需要添加 -D 选项。例如,如果您将所有源文件放在 /etc/yp 中,并希望允许用户更改其 Shell,则需要使用以下参数启动 rpc.yppasswdd
rpc.yppasswdd -D /etc/yp -e chsh
或
rpc.yppasswdd -s /etc/yp/shadow -p /etc/yp/passwd -e chsh
您无需再做任何事情。您只需要确保 rpc.yppasswdd 使用与 /var/yp/Makefile 相同的文件。错误将使用 syslog 记录。
如果一切正常(应该如此),您可以使用一些简单的命令来验证您的安装。假设您的 passwd 文件由 NIS 提供,则命令
% ypcat passwd
应该会给出 NIS passwd 文件的内容。命令
% ypmatch userid passwd
(其中 userid 是任意用户的登录名)应该会给出用户在 NIS passwd 文件中的条目。"ypcat" 和 "ypmatch" 程序应该包含在您的传统 NIS 或 NYS 发行版中。在服务器和客户端上正确配置 NIS 后,您需要确保配置在重新引导后仍然有效。在 RedHat 上,在 /etc/sysconfig/network 文件中创建或修改变量 NISDOMAIN。
=== 练习 ===.
关键术语、文件和实用程序:Slapd slapd.conf
== PAM 身份验证 == 测试
PAM(可插拔身份验证模块)是一种灵活的用户身份验证机制。从 UNIX 的诞生之日起,用户身份验证就一直通过用户输入密码并由系统检查输入的密码是否与存储在 /etc/passwd 中的加密官方密码相符来实现。这个想法是,如果用户能正确输入其秘密密码,那么用户*就是*该用户。这是最初的情况。从那时起,许多新的用户身份验证方法变得流行起来。包括对 /etc/passwd 文件的更复杂的替换,以及硬件设备智能卡等。问题是,每次开发新的身份验证方案时,都需要重写所有必要的程序(login、ftpd 等),以支持它。PAM 提供了一种开发独立于身份验证方案的程序的方法。这些程序需要在运行时附加 "身份验证模块" 才能工作。要附加哪个身份验证模块取决于本地系统设置,由本地系统管理员自行决定。PAM 身份验证 Linux-PAM(Linux 的可插拔身份验证模块)是一套共享库,使本地系统管理员可以选择应用程序如何验证用户身份。换句话说,在不(重写和)重新编译支持 PAM 的应用程序的情况下,可以切换它使用的身份验证机制。实际上,人们可以完全升级本地身份验证系统,而无需触及应用程序本身。历史上,需要对给定用户进行身份验证的应用程序必须编译为使用特定的身份验证机制。例如,在传统的 UN*X 系统中,用户身份的验证是通过用户输入正确的密码来完成的。这个密码在加上两个字符的 ``salt 后,被加密(使用 crypt(3))。然后,如果这个加密密码与用户在系统密码数据库(/etc/passwd 文件)中的条目中的第二个字段相同,则对用户进行身份验证。在这些系统上,大多数(如果不是全部)形式的权限都是根据这种单一的身份验证方案授予的。权限以个人用户标识符 (uid) 和各种组的成员资格的形式出现。根据用户的个人和组身份提供服务和应用程序。传统上,组成员资格是根据 /etc/group 文件中的条目分配的。 PAM 身份验证 不幸的是,计算机速度的提高和网络计算的广泛引入,使曾经安全的身份验证机制(如这种机制)变得容易受到攻击。鉴于此类现实,新的身份验证方法不断涌现。Linux-PAM 项目的目的是将权限授予软件的开发与安全且适当的身份验证方案的开发分开。这是通过提供一个函数库来实现的,应用程序可以使用该库来请求对用户进行身份验证。这个 PAM 库在本地配置了一个系统文件 /etc/pam.conf(或位于 /etc/pam.d/ 中的一系列配置文件),通过本地可用的身份验证模块对用户请求进行身份验证。模块本身通常位于 /lib/security 目录中,并采用动态加载对象文件的形式(参见 dlopen(3))。PAM 身份验证 概述 对于新手来说,我们先考虑一个例子。我们采用一个为用户提供服务的应用程序;login 就是这样的一个程序。login 做两件事,首先它确定请求的用户就是他们声称的用户,其次它为他们提供请求的服务:在 login 的情况下,服务是运行在用户身份下的一个命令 shell(bash、tcsh、zsh 等)。传统上,前一步是通过 login 应用程序提示用户输入密码,然后验证密码是否与系统上的密码一致来实现的;因此,验证了就系统而言,用户就是他们声称的用户。这是委托给 Linux-PAM 的任务。从应用程序程序员(在本例中是编写 login 应用程序的人)的角度来看,Linux-PAM 负责处理这个身份验证任务 - 验证用户身份。PAM 身份验证 Linux-PAM 的灵活性在于,您,系统管理员,可以自由指定要使用的身份验证方案。您可以在 Linux 系统上的任何/所有支持 PAM 的应用程序上自由设置方案。也就是说,您可以从简单信任(pam_permit)之类的原始方法进行身份验证,也可以从视网膜扫描、声纹和一次性密码的组合之类的严格方法进行身份验证!为了说明您面临的灵活性,请考虑以下情况:一名系统管理员(家长)希望提高她用户(孩子)的数学能力。她可以配置他们的最喜欢的 ``Shoot 'em up game(当然支持 PAM)来通过要求他们提供两个小于 12 的随机数的乘积来对他们进行身份验证。很明显,如果游戏还不错,他们很快就会学会乘法表。随着他们的成长,身份验证可以升级为包括(长)除法! PAM 身份验证 Linux-PAM 处理四种不同的(管理)任务类型。这些是:身份验证管理;帐户管理;会话管理;以及密码管理。将首选的管理方案与应用程序的行为相关联是通过相关 Linux-PAM 配置文件中的条目实现的。管理功能由配置文件中指定的模块执行。Linux-PAM 库会查询 PAM 配置文件的内容并加载适用于应用程序的模块。这些模块分为四个管理组之一,并按照它们在配置文件中出现的顺序进行堆叠。这些模块在被 Linux-PAM 调用时,会为应用程序执行各种身份验证任务。通过使用应用程序提供的对话函数,可以交换来自用户或提供给用户的文本信息。PAM 身份验证 Linux-PAM 旨在为系统管理员提供极大的灵活性,以便配置他们系统中的权限授予应用程序。由 Linux-PAM 控制的系统安全方面的本地配置包含在两个位置之一:单个系统文件 /etc/pam.conf;或 /etc/pam.d/ 目录。该文件中的 Linux-PAM 特定标记不区分大小写。但是,模块路径区分大小写,因为它们表示文件名称,并反映了典型 Linux 文件系统的依赖大小写。每个模块的任何给定模块的参数的大小写敏感性是为每个模块定义的。除了下面描述的行之外,还为系统管理员提供了两个特殊字符以方便使用:注释以 `#' 开头,并扩展到下一行末尾;此外,模块规范行可以使用 `\' 转义的换行符进行扩展。/etc/pam.conf 文件的一般配置行具有以下形式:服务名称模块类型控制标记模块路径参数 PAM 身份验证 下面,我们将解释每个标记的含义。配置 Linux-PAM 的第二种(也是最近采用的一种)方式是通过 /etc/pam.d/ 目录的内容。在解释了上述标记的含义之后,我们将描述这种方法。
服务名称与该条目关联的服务的名称。通常,服务名称是给定应用程序的常规名称。例如,`ftpd'、`rlogind' 和 `su' 等。有一个特殊的服务名称,保留用于定义默认身份验证机制。它的名称为 `OTHER',可以使用小写或大写字符指定。请注意,当为命名的服务指定了一个模块时,`OTHER' 条目将被忽略。
PAM 身份验证 模块类型(目前)四种模块类型之一。四种类型如下
auth;此模块类型提供用户身份验证的两个方面。首先,它通过指示应用程序提示用户输入密码或其他识别方式来确定用户就是他们声称的用户。其次,该模块可以通过其凭据授予属性来授予组成员资格(独立于上面讨论的 /etc/groups 文件)或其他特权。
account;此模块执行基于非身份验证的帐户管理。它通常用于根据一天中的时间、当前可用的系统资源(最大用户数)或申请用户的可能位置来限制/允许访问服务 - `root' 登录仅在控制台上进行。
session;主要地,此模块与在用户可以获得服务之前/之后需要执行的操作相关联。此类操作包括记录有关与用户打开/关闭某些数据交换的信息、挂载目录等。
password; 这种最后一个模块类型是更新与用户关联的身份验证令牌所必需的。 通常,对于每个基于“挑战/响应”的身份验证(auth)模块类型,都有一个模块。 PAM 身份验证控制标志 控制标志用于指示 PAM 库将如何对与其关联的模块的成功或失败做出反应。 由于模块可以堆叠(相同类型的模块按顺序执行,一个接一个),因此控制标志决定了每个模块的相对重要性。 应用程序不会意识到 `/etc/pam.conf' 文件中列出的各个模块的成功或失败。 相反,它从 Linux-PAM 库接收到一个汇总的成功或失败响应。 这些模块的执行顺序与 /etc/pam.conf 文件中的条目顺序一致; 较早的条目在较晚的条目之前执行。 从 Linux-PAM v0.60 开始,此控制标志可以使用两种语法之一定义。 控制标志的更简单(且历史)语法是定义单个关键字以指示与特定模块的成功或失败相关的关注严重程度。 有四个这样的关键字:required、requisite、sufficient 和 optional。 PAM 身份验证控制标志 Linux-PAM 库以以下方式解释这些关键字: required; 这表示模块的成功对于模块类型设施的成功是必需的。 在所有剩余的模块(相同模块类型)执行完毕之前,此模块的失败不会对用户显而易见。
requisite; 与 required 相似,但是,如果这样的模块返回失败,则控制将直接返回到应用程序。 返回值与第一个返回失败的 required 或 requisite 模块相关联。 请注意,此标志可用于防止用户有机会在不安全的介质上输入密码。 可以想象,这种行为可能会通知攻击者系统上的有效帐户。 这种可能性应与在敌对环境中暴露敏感密码的不可忽视的担忧相权衡。
sufficient; 此模块的成功被认为“足够”,以使 Linux-PAM 库相信该模块类型已成功完成其目的。 如果之前没有 required 模块失败,则不会调用更多此类型的“堆叠”模块。 (请注意,在这种情况下,不会调用后续的 required 模块。)此模块的失败不会被视为对满足应用程序(该模块类型已成功)具有致命性。
Optional; 顾名思义,此控制标志将模块标记为对用户应用程序服务的成功或失败不关键。 通常,Linux-PAM 在确定模块堆栈是否会成功或失败时会忽略此类模块。 但是,如果之前或后续堆叠模块没有明确的成功或失败,则此模块将决定对应用程序的响应性质。 后一种情况的一个示例是,当其他模块返回类似于 PAM_IGNORE 的内容时。 PAM 身份验证控制标志: 更加复杂(更新)的语法更具体,并为管理员提供了对用户身份验证方式的很大控制。 此形式的控制标志用方括号分隔,并由一系列 value=action 令牌组成
[value1=action1 value2=action2 ...]
这里,valueI 是以下返回值之一:success; open_err; symbol_err; service_err; system_err; buf_err; perm_denied; auth_err; cred_insufficient; authinfo_unavail; user_unknown; maxtries; new_authtok_reqd; acct_expired; session_err; cred_unavail; cred_expired; cred_err; no_module_data; conv_err; authtok_err; authtok_recover_err; authtok_lock_busy; authtok_disable_aging; try_again; ignore; abort; authtok_expired; module_unknown; bad_item; 和 default。 这些中的最后一个(default)可用于设置未明确定义的那些返回值的操作。 actionI 可以是正整数或以下令牌之一:ignore; ok; done; bad; die; 和 reset。 当指定为操作时,正整数 J 可用于指示将跳过当前模块类型的下一个 J 个模块。 这样,管理员可以开发一个具有多个不同执行路径的适度复杂的模块堆栈。 通过单个模块的反应可以确定采取哪条路径。 PAM 身份验证
ignore - 当与模块堆栈一起使用时,模块的返回状态不会影响应用程序获得的返回码。
bad - 此操作表示应将返回码视为表明模块失败的指示。 如果此模块是堆栈中第一个失败的模块,则其状态值将用于整个堆栈的状态值。
die - 等效于 bad,并且具有终止模块堆栈和 PAM 立即返回到应用程序的副作用。
ok - 这告诉 PAM 管理员认为此返回码应直接影响整个模块堆栈的返回码。 换句话说,如果堆栈的前一个状态会导致返回 PAM_SUCCESS,则模块的返回码将覆盖此值。 请注意,如果堆栈的前一个状态包含一些指示模块失败的值,则此“ok”值将不会用于覆盖该值。
done - 等效于 ok,并且具有终止模块堆栈和 PAM 立即返回到应用程序的副作用。
reset - 清除模块堆栈状态的所有内存,并从下一个堆叠模块开始重新开始。 PAM 身份验证 以下四个关键字:required; requisite; sufficient; 和 optional,在 [...] 语法方面都有等效表达式。 它们如下
required 等效于 [success=ok new_authtok_reqd=ok ignore=ignore default=bad]
requisite 等效于 [success=ok new_authtok_reqd=ok ignore=ignore default=die]
sufficient 等效于 [success=done new_authtok_reqd=done default=ignore]
optional 等效于 [success=ok new_authtok_reqd=ok default=ignore]
为了感受这种新语法的强大功能,以下是一些您可以使用它的示例。 随着 Linux-PAM-0.63 的推出,引入了客户端插件代理的概念。 这使得 PAM 可以使用客户端/服务器应用程序固有的传输协议来支持机器到机器的身份验证。 借助“[...] value=action ... ]”控制语法,可以将应用程序配置为支持与兼容客户端的二进制提示,但可以优雅地切换到针对较旧的遗留应用程序的替代身份验证模式。 PAM 身份验证
Module-path
动态可加载对象文件的路径名; 可插拔模块本身。 如果模块路径的第一个字符是“/”,则假设它是一个完整路径。 如果不是这种情况,则给定的模块路径将附加到默认模块路径:/lib/security
Args Args 是在调用模块时传递给模块的令牌列表。 类似于典型的 Linux shell 命令的参数。 通常,有效参数是可选的,并且特定于任何给定的模块。 无效参数被模块忽略,但是,当遇到无效参数时,模块需要向 syslog(3) 写入错误。 有关通用选项列表,请参见下一节。
配置文 件 (其中之一) 中的任何格式不正确的行通常都会导致 (为谨慎起见) 身份验证过程失败。 使用对 syslog(3) 的调用将相应的错误写入系统日志文件。 PAM 身份验证 基于目录的配置 从 0.56 版本开始,比单个配置文件更灵活,可以通过 /etc/pam.d/ 目录的内容来配置 libpam。 在这种情况下,目录中将填充文件,每个文件的文件名都等于服务名称(小写):它是命名服务的个人配置文件。 Linux-PAM 可以以两种模式之一进行编译。 首选模式使用 /etc/pam.d/ 或 /etc/pam.conf 配置,但不会同时使用两者。 也就是说,如果存在 /etc/pam.d/ 目录,则 libpam 仅使用此目录中包含的文件。 但是,如果不存在 /etc/pam.d/ 目录,则使用 /etc/pam.conf 文件(这很可能是您首选发行版使用的模式)。 另一种模式是按顺序使用 /etc/pam.d/ 和 /etc/pam.conf。 在此模式下,/etc/pam.d/ 中的条目将覆盖 /etc/pam.conf 中的条目。 /etc/pam.d/ 中每个文件语法类似于 /etc/pam.conf 文件语法,由以下形式的行组成:module-type control-flag module-path arguments 唯一的区别是没有服务名称。 服务名称当然是给定配置文件的名称。 例如,/etc/pam.d/login 包含登录服务的配置。 PAM 身份验证 此配置方法比单文件方法具有许多优点。 我们在此列出它们以帮助读者决定采用哪种方案: 降低应用程序配置错误的可能性。 手动编辑配置文件时,需要输入的字段更少。 更易于维护。 可以重新配置一个应用程序,而不会有干扰系统上其他应用程序的风险。 可以将不同服务的配置文件符号链接到单个文件。 这使得更容易在不同的应用程序之间保持一致的系统访问策略。 (请注意,为了节省空间,也可以对多个配置文件进行硬链接。 但是,在管理此安排时应谨慎,因为编辑硬链接文件可能会破坏链接。) 配置文件解析速度可能更快。 只有在服务绑定到其模块时才解析相关条目。 可以使用文件系统的文件保护限制对各个 Linux-PAM 配置文件的读取访问权限。 包管理变得更简单。 每次安装新应用程序时,都可以随附一个 /etc/pam.d/xxxxxx 文件。 PAM 身份验证 以下是一些任何模块都可能理解的可选参数。 参数(包括这些)通常是可选的。 Debug: 使用 syslog(3) 调用将调试信息记录到系统日志文件。
no_warn : Instruct module to not give warning messages to the application. use_first_pass : The module should not prompt the user for a password. Instead, it should obtain the previously typed password (from the preceding auth module), and use that. If that doesn't work, then the user will not be authenticated. (This option is intended for auth and password modules only). try_first_pass : The module should attempt authentication with the previously typed password (from the preceding auth module). If that doesn't work, then the user is prompted for a password. (This option is intended for auth modules only). use_mapped_pass : This argument is not currently supported by any of the modules in the Linux-PAM distribution because of possible consequences associated with U.S. encryption exporting restrictions. Within the U.S., module developers are, of course, free to implement it (as are developers in other countries).
expose_account: 通常,模块采用有关用户帐户的一些信息的泄露并不是一个安全的策略。 有时,诸如用户名或主目录或首选 shell 之类的信息可用于攻击用户的帐户。 但是,在某些情况下,此类信息不被视为威胁: 在安全的环境中要求用户输入密码时显示用户的全名也可以被称为“友好”。 expose_account 参数是一个标准的模块参数,用于鼓励模块在当地管理员认为适当的情况下,对帐户信息不那么保密。 PAM 身份验证 配置文件示例条目 默认策略: 如果系统要被视为安全,那么它最好有一个相当安全的“OTHER”条目。 以下是偏执设置(这倒不失为一个好的起点!)
- default; 拒绝访问
OTHER auth required pam_deny.so OTHER account required pam_deny.so OTHER password required pam_deny.so OTHER session required pam_deny.so
虽然从根本上来说这是一个安全的默认设置,但这对配置错误的系统并不十分同情。 例如,这样的系统很容易被锁定,因为如果文件其余部分写错了,就会锁定所有用户。 pam_deny 模块不是很复杂。 例如,它在被调用时不会记录任何信息,因此,除非系统用户在无法执行服务应用程序时联系管理员,否则管理员可能会在很长一段时间内不知道他的系统配置错误。 PAM 身份验证 在上述示例中的那些行之前添加以下行将为管理员提供适当的警告。
- default; 醒醒! 此应用程序未配置
OTHER auth required pam_warn.so OTHER password required pam_warn.so
拥有两个 ``OTHER auth 行是堆叠的一个示例。在使用 /etc/pam.d/ 配置的系统上,相应的默认设置可以通过以下文件实现
- 默认配置: /etc/pam.d/other
auth required pam_warn.so auth required pam_deny.so account required pam_deny.so password required pam_warn.so password required pam_deny.so session required pam_deny.so PAM 身份验证 在安全性较低的计算机上,系统管理员希望对 Linux-PAM 的强大功能一无所知的计算机上,以下行选择(在 /etc/pam.conf 中)可能会模仿历史上熟悉的 Linux 设置。
- default; 标准 UN*X 访问
OTHER auth required pam_unix.so OTHER account required pam_unix.so OTHER password required pam_unix.so OTHER session required pam_unix.so
PAM 身份验证 关键术语、文件和实用程序 : /etc/pam.d /etc/pam.conf /lib/libpam.so.*