4.4. 用户的身份

  • Linux-PAM *模块将需要确定请求服务的用户的身份以及授予服务的用户的身份。这两个用户很少会是相同的。实际上,通常需要考虑第三个用户身份,即在授予服务后用户的新(假定)身份。

密切关注这些身份的需求显然是安全问题。一些模块积极使用的一种约定是,请求服务的用户的身份应为正在运行的进程的当前* UID (用户 ID);特权授予用户的身份是运行进程的 EUID (有效用户 ID); * PAM_USER * pam_get_item(3)的内容给出了将以其名称执行服务的用户身份。注意,模块可以在任何pam_*()库调用期间更改 PAM_USER PAM_RUSER *的值。由于这个原因,应用程序每次希望确定经过身份验证的用户是(或当前将是)谁时,都应谨慎使用pam_get_item()

对于提供自己的安全模型(独立于 OS 内核)的 Web Service 数据库和其他应用程序,上述方案不足以标识发出请求的用户。

存储请求用户身份的更可移植的解决方案是使用* PAM_RUSER * pam_get_item(3)。在尝试使用pam_authenticate()对用户进行身份验证之前,应用程序应提供此值。该名称的可信度最终将由本地 Management 员(为您的应用程序配置 PAM)决定,并且选定的模块可能会尝试覆盖该值,以获取更可靠的数据。如果应用程序无法确定请求实体/用户的身份,则不应调用 pam_set_item(3)来设置* PAM_RUSER *。

除了* PAM_RUSER 项目外,应用程序还应提供 PAM_RHOST *(请求主机)项目。通常,可以假定其值遵循以下约定:NULL =未知; localhost =直接从本地系统调用; * other.place.xyz * =用户连接的某些组件源自此远程/请求主机。当前,PAM 尚未构建用于指示应用程序是否支持从该主机进行通信的受信任路径的约定。