pam_lastlog 不写入 /var/log/lastlog

pam_lastlog 不写入 /var/log/lastlog

我在用帕梅拉使用 JupyterHub 为我的用户打开 PAM 会话。我在 CentOS 8 上并且正在使用登录服务。我可以在 /var/log/secure 中看到

pam_unix(login:session): 由 (uid=0) 为用户 testuser 打开的会话

以及 /var/log/messages

systemd[1]:启动了用户 testuser 的会话 8341

此外,/var/log/{messages|secure|audit/audit.log} 中没有记录任何错误。但是当新用户成功登录到 JupyterHub 时,lastlog 命令仍然显示该用户从未登录过。所以我认为我错过了 pam_lastlog 的一些要求,以便将信息写入 /var/log/lastlog 。 pam_open_session 在具有 root 权限的子进程中调用。也许这个子进程需要绑定到 pts 或 tty 才能将有用的信息写入 /var/log/lastlog ?这是 /etc/pamd.d/login 文件:

#%PAM-1.0
auth       substack     system-auth
auth       include      postlogin
account    required     pam_nologin.so
account    include      system-auth
password   include      system-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
session    optional     pam_console.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      system-auth
session    include      postlogin
-session   optional     pam_ck_connector.so

这是在 /etc/pamd.d/postlogin 中

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authselect is run.

session optional                   pam_umask.so silent
session [success=1 default=ignore] pam_succeed_if.so service !~ gdm* service !~ su* quiet
session [default=1]                pam_lastlog.so nowtmp showfailed
session optional                   pam_lastlog.so silent noupdate showfailed

这是在 /etc/pamd.d/system-auth 中

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authselect is run.
auth        required      pam_env.so
auth        sufficient    pam_unix.so try_first_pass nullok
auth        required      pam_deny.so

account     required      pam_unix.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password    sufficient    pam_unix.so try_first_pass use_authtok nullok sha512 shadow
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so

答案1

您的/etc/pam.d/postlogin文件包含nowtmp此行上的指令:

session [default=1] pam_lastlog.so nowtmp showfailed

$ man pam_lastlog

       nowtmp
           Don't update the wtmp entry.

命令last使用/var/log/wtmp文件,而lastlog命令使用/var/log/lastlog文件。

lastlog通常比文件小得多,wtmp因为它只记录每个用户的最后一次登录。wtmp记录一个历史全部用户的登录时间和日期。

手册页中似乎没有可以pam_lastlog.so关闭最后日志记录的指令,因此所有帐户都应该可以使用此功能。请注意,该指令有一个 to 指令nowtmp

但是,您可以关闭写入​​的历史登录信息,wtmp因此也许可以尝试仅删除该nowtmp指令,看看是否有所不同。

答案2

对于登录服务,使用的是带有silent、noupdate 和showfailed 的postlogin 行。noupdate显然意味着pam_lastlog不应该更新任何文件。所以这一行不允许pam_lastlog更新lastlog。

似乎仍然在某处记录失败的登录,但没有记录成功的登录。这会导致仅当使用gdm* 或su* 服务成功登录时才会重置失败登录计数。

相关内容