没有让我登录,而是PAM
用消息向我打招呼“无法创建/删除指定会话的条目“输入密码后。它谈论的是哪个条目(以及哪个会话)?
包含错误消息的字符串可在libpam.so.0
(.83.1) 中找到。
我的系统基于 Fedora 版本 20 (Heisenburg) 的二进制文件。
如何对 PAM 进行故障排除以找出成功登录所需的条件?我没有系统日志(也没有永久磁盘,只有 initramfs)。
更新:
SELinux 已禁用。
我非常愿意将整个 PAM 配置替换为仅允许在虚拟控制台上登录(普通用户和 root)的简单配置。
来自Linux-PAM-1.1.8的源代码libpam/pam_strerror.c
显示,该消息来自错误代码PAM_SESSION_ERR
,该错误代码可能是由各种内部问题引起的,例如内存分配错误或无法定位用户主目录。尝试解释错误消息就这么多。 :-(
/etc/pam.d/login
以下是我的配置文件,以指示为起点的注释为基础:
(我也尝试删除所有包含的行pam_loginuid.so
,没有任何明显的差异)
/etc/pam.d/登录:
auth [user_unknown=忽略成功=ok 忽略=忽略默认=bad] pam_securetty.so auth 子栈系统-auth 授权包括登录后 需要帐户 pam_nologin.so 帐户包括系统身份验证 密码包含系统验证 需要会话 pam_selinux.so 关闭 需要会话 pam_loginuid.so 会话可选 pam_console.so 需要会话 pam_selinux.so 打开 需要会话 pam_namespace.so 会话可选 pam_keyinit.so 强制撤销 会话包括系统身份验证 会话包括登录后 -会话可选 pam_ck_connector.so
/etc/pam.d/postlogin:
会话 [成功 = 1 默认 = 忽略] pam_succeed_if.so 服务 !~ gdm* 服务 !~ su* 安静 会话 [default=1] pam_lastlog.so nowtmp showfailed 会话可选 pam_lastlog.so 无提示 noupdate showfailed
/etc/pam.d/system-auth:
需要身份验证 pam_env.so 验证足够的 pam_fprintd.so 验证足够 pam_unix.so nullok try_first_pass 身份验证必需条件 pam_succeed_if.so uid >= 1000 Quiet_success 需要身份验证 pam_deny.so 需要帐户 pam_unix.so 帐号足够 pam_localuser.so 帐户足够 pam_succeed_if.so uid < 1000 安静 需要帐户 pam_permit.so 密码必需 pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= 密码足够 pam_unix.so sha512 Shadow nullok try_first_pass use_authtok 需要密码 pam_deny.so 会话可选 pam_keyinit.so 撤销 需要会话 pam_limits.so -会话可选 pam_systemd.so 会话 [success=1 default=ignore] crond 中的 pam_succeed_if.so 服务安静 use_uid 需要会话 pam_unix.so
我有这些共享的 PAM 相关库:
libpam_misc.so.0 libpam.so.0 pam_access.so pam_console.so pam_deny.so pam_env.so pam_fprintd.so pam_gnome_keyring.so pam_keyinit.so pam_lastlog.so pam_limits.so pam_localuser.so pam_loginuid.so pam_命名空间.so pam_nologin.so pam_permit.so pam_pkcs11.so pam_pwquality.so pam_rootok.so pam_securetty.so pam_selinux_permit.so pam_selinux.so pam_sepermit.so pam_succeed_if.so pam_systemd.so pam_timestamp.so pam_unix_acct.so pam_unix_auth.so pam_unix.so pam_xauth.so
以及上面共享库引用的这些(根据ldd
):
libattr.so.1 libaudit.so.1 libcap.so.2 libcrack.so.2 libcrypt.so.1 libc.so.6 libdbus-1.so.3 libdbus-glib-1.so.2 libdl.so.2 libffi.so.6 libfreebl3.so libgcc_s.so.1 libgio-2.0.so.0 libglib-2.0.so.0 libgmodule-2.0.so.0 libgobject-2.0.so.0 liblzma.so.5 libnsl.so.1 libnspr4.so libnss3.so libnssutil3.so libpcre.so.1 libpcre.so.3 libplc4.so libplds4.so libpthread.so.0 libpwquality.so.1 libresolv.so.2 库.so.1 libselinux.so.1 libsmime3.so libssl3.so libutil.so.1 libz.so.1
答案1
就我而言,我使用的是 Centos 6,并在 /var/log/secure 中找到了以下内容:
Mar 13 10:13:02 server sudo(pam_google_authenticator)[24911]: Unrecognized option "user=root"
Mar 13 10:13:02 server sudo: ralph : pam_authenticate: Cannot make/remove an entry for the specified session ; TTY=pts/2 ; PWD=/home/ralph ; USER=root ; COMMAND=/usr/local/bin/become root
最终,是 GA PAM 模块呕吐,然后 PAM 不知道如何处理,因此出错。我确信不同 PAM 模块的许多其他问题也会导致相同的行为(不仅仅是 Google Authenticator)。某种日志可能是了解正在发生的情况的唯一方法。
答案2
这可能意味着 pam.d 文件存在问题,或者需要 pam 访问的内容存在问题。
一种调试技术是在整个 pam 文件中散布 pam_echo 语句:
例如
auth [default=ignore] pam_echo.so "sshd: calling faillock"
auth requisite pam_faillock.so preauth even_deny_root
auth [default=ignore] pam_echo.so "sshd: faillock did not fail"
auth [default=ignore] pam_echo.so "calling password-auth substack"
auth substack password-auth
auth [default=ignore] pam_echo.so "back from password-auth substack"
auth [default=ignore] pam_echo.so "calling postlogin"
auth include postlogin
auth [default=ignore] pam_echo.so "back from postlogin"
添加 pam_echo 时要小心 - 不要将其放在可以“跳过”后续行的行之后,或者如果必须,请更新要跳过的行数。
提醒:在更改 pam 文件时始终保持以 root 身份登录 - 更改会立即生效,任何错误都可能导致您无法登录或 sudo...
答案3
我使用该工具在自己的系统上解决了这个问题审核2允许。查看我的帖子。