Linux系统审计用户登录登出需监控/var/log/{lastlog,wtmp,btmp}、/etc/shadow、/etc/pam.d/等关键文件的写与属性变更,并结合execve、setuid等系统调用捕获带AUID的完整会话上下文,再通过ausearch和aureport精准查询与汇总,同时确保auditd配置启用AUID过滤、同步刷新及日志目录权限加固。

Linux 系统中审计用户登录与登出,核心是捕获 login、sshd、pam 相关的系统调用和关键文件变更,并确保日志能准确关联到具体用户(UID/AUID)。单纯监控进程启动远远不够,必须结合会话上下文和认证路径才具备可追溯性。
监控关键认证文件与目录
登录行为往往伴随对身份凭证文件的读取或修改,这些操作本身就能反映异常尝试或提权动作:
-
监控 /var/log/lastlog 和 /var/log/wtmp:记录成功登录与会话信息,权限为
wa(写+属性变更)-w /var/log/lastlog -p wa -k login_session-w /var/log/wtmp -p wa -k login_history -
监控失败登录记录文件:
/var/log/btmp存储失败登录尝试,高敏感-w /var/log/btmp -p wa -k failed_login -
监控 PAM 配置与 shadow 文件:防止绕过认证机制
-w /etc/shadow -p wa -k auth_shadow-w /etc/pam.d/ -p wa -k pam_config
捕获登录相关系统调用(含用户上下文)
仅靠文件监控无法还原“谁在何时通过什么方式登录”,需跟踪 execve(执行登录程序)和 setuid(切换用户身份)等关键调用,并强制记录审计 ID(AUID):
-
记录所有 execve 调用并保留 AUID(必须指定架构):
-a always,exit -F arch=b64 -S execve -F auid!=-1 -k login_exec-a always,exit -F arch=b32 -S execve -F auid!=-1 -k login_exec -
监控 sshd 进程创建与特权切换:
-a always,exit -F arch=b64 -S setuid -F auid!=-1 -k sshd_privdrop-w /usr/sbin/sshd -p x -k sshd_start -
捕获 login、gdm、lightdm 等本地登录管理器:
-w /bin/login -p x -k local_login-w /usr/bin/gdm-session-worker -p x -k gdm_login
验证与查询登录事件日志
规则生效后,使用 ausearch 按用户、时间或关键词精准提取登录链路:
-
查某用户(如 UID 1001)的所有登录/登出事件:
ausearch -ui 1001 -m USER_LOGIN,USER_LOGOUT,SYSCALL -i -
查最近 1 小时内所有 SSH 登录尝试(含成功/失败):
ausearch -m USER_AUTH,USER_ACCT -ts recent -i | grep -i "sshd\|ssh" -
按关键词快速定位(如前面设的
login_exec):ausearch -k login_exec -i --start recent -
生成登录行为汇总报告:
aureport -m --login --summary(显示登录类型分布)aureport -m --login --key login_exec(按关键词过滤详细记录)
确保审计链路完整的关键配置项
以下设置不写进规则,但直接影响登录事件能否被正确归因:
-
AUID 必须启用:默认已开启,可通过
auditctl -s | grep enabled确认enabled和auid_filter均为1 -
避免日志丢失:在
/etc/audit/auditd.conf中设flush = sync或incremental_sync,防止服务崩溃丢日志 -
日志权限加固:确保
/var/log/audit/目录属主为root:root,权限700,防止未授权篡改 -
规则加载方式正确:永久规则写入
/etc/audit/rules.d/login.rules(必须以.rules结尾),然后运行sudo augenrules --load,不要 用systemctl restart auditd


















