如何查看用户登录记录 last命令审计日志分析

发布时间 - 2025-09-01 00:00:00    点击率:

要查看用户登录记录并排查安全问题,必须结合last命令与auditd审计日志分析。1. 使用last命令可快速查看登录历史,如last查看所有记录,last username查询特定用户,last -n 10显示最近10条,last reboot查看重启记录,last -f /var/log/wtmp.1读取历史wtmp文件;但其依赖的/var/log/wtmp文件易被篡改,存在安全隐患。2. 配置auditd可实现更可靠的审计:通过sudo apt-get install auditd或yum install auditd安装并启动服务,编辑/etc/audit/rules.d/audit.rules添加-w /var/log/wtmp -p wa -k login_attempts和-w /var/log/btmp -p wa -k failed_login_attempts规则以监控成功与失败登录,重启auditd生效。3. 使用sudo ausearch -k login_attempts和sudo ausearch -k failed_login_attempts搜索对应事件,分析时间、uid、ip等信息。4. 分析异常行为包括:短时间内大量失败登录(可能为暴力破解)、非工作时间或异常ip登录;可通过编写python脚本调用ausearch自动检测失败登录频率,超过阈值则告警。综上,应以auditd为核心,结合last命令和自动化分析,全面追踪用户活动并保障系统安全。

查看用户登录记录,关键在于利用

last
命令,结合审计日志,可以追踪用户活动,排查安全问题。

last命令审计日志分析

last
命令的确是查看用户登录历史的利器,但仅仅依赖它是不够的。想想,如果有人清空了
/var/log/wtmp
文件,
last
就失效了。所以,审计日志的分析就显得尤为重要。

如何使用last命令?

last
命令默认会显示所有用户的登录和注销记录,时间倒序排列。直接输入
last
,你会看到密密麻麻的记录。

  • last username
    : 查看特定用户的登录记录。比如
    last john
  • last -n 10
    : 显示最近10条记录。
  • last reboot
    : 查看系统重启记录,这对于诊断系统问题很有用。
  • last -f /var/log/wtmp.1
    : 指定不同的wtmp文件,比如查看历史的登录记录。

但要注意,

last
依赖于
/var/log/wtmp
文件,这个文件如果被篡改,信息就不可信了。

如何配置和使用auditd审计日志?

auditd
是一个更强大的工具,它可以记录系统上的各种事件,包括用户登录。配置稍微复杂,但带来的价值远超
last

首先,确保

auditd
已安装并运行:

sudo apt-get install auditd  # Debian/Ubuntu
sudo yum install auditd      # CentOS/RHEL
sudo systemctl start auditd
sudo systemctl enable auditd

接下来,配置审计规则。编辑

/etc/audit/rules.d/audit.rules
,添加以下规则来审计用户登录:

-w /var/log/wtmp -p wa -k login_attempts
-w /var/log/btmp -p wa -k failed_login_attempts

这两条规则分别监控

/var/log/wtmp
(登录成功记录)和
/var/log/btmp
(登录失败记录),并将事件标记为
login_attempts
failed_login_attempts

重启

auditd
使配置生效:

sudo systemctl restart auditd

现在,你可以使用

ausearch
命令来搜索审计日志:

sudo ausearch -k login_attempts  # 查找登录成功的记录
sudo ausearch -k failed_login_attempts # 查找登录失败的记录

ausearch
的输出会包含很多信息,包括时间戳、用户ID、进程ID等。你需要仔细分析这些信息,才能还原用户登录行为。

如何分析审计日志中的异常登录行为?

仅仅记录登录信息是不够的,还需要分析这些信息,找出异常行为。比如:

  • 短时间内大量登录失败: 这可能是暴力破解攻击的迹象。
  • 非工作时间登录: 可能是账户被盗用。
  • 来自异常IP地址的登录: 同样可能是账户被盗用。

要自动化分析这些信息,可以使用

auditd
的日志分析工具,或者将日志导入到SIEM(安全信息和事件管理)系统中。SIEM系统可以关联多个日志源,提供更全面的安全分析。

例如,你可以编写一个简单的脚本,定期分析审计日志,查找短时间内大量登录失败的记录:

#!/usr/bin/env python3
import subprocess
import re

def analyze_failed_logins(time_window=60, threshold=5):
    """
    Analyzes audit logs for failed login attempts within a given time window.
    """
    cmd = f"sudo ausearch -k failed_login_attempts -ts recent -i"
    result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
    log_lines = result.stdout.splitlines()

    login_attempts = []
    for line in log_lines:
        if "time->" in line:
            timestamp = re.search(r"time->(.*)", line).group(1).strip()
            uid_match = re.search(r"uid=(.*?) ", line)
            uid = uid_match.group(1) if uid_match else "N/A"
            login_attempts.append((timestamp, uid))

    # Simple analysis: Count failed logins per user within the time window
    user_counts = {}
    for timestamp, uid in login_attempts:
        if uid not in user_counts:
            user_counts[uid] = 0
        user_counts[uid] += 1

    for user, count in user_counts.items():
        if count > threshold:
            print(f"Possible brute-force attack detected for user {user}: {count} failed logins in the last {time_window} seconds.")

if __name__ == "__main__":
    analyze_failed_logins()

这个脚本会调用

ausearch
命令,获取最近的登录失败记录,然后统计每个用户在指定时间窗口内的失败次数。如果超过阈值,就认为是潜在的暴力破解攻击。

这只是一个简单的例子,实际应用中,你需要根据你的安全需求,编写更复杂的分析脚本。 关键是理解

auditd
的强大之处,并善用它来监控和分析系统安全事件。


# python  # centos  # ubuntu  # 工具  # ai  # win  # 排列  # python脚本 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 大连网站制作公司哪家好一点,大连买房网站哪个好?  如何在VPS电脑上快速搭建网站?  如何在Windows虚拟主机上快速搭建网站?  英语简历制作免费网站推荐,如何将简历翻译成英文?  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  Laravel如何处理文件下载请求?(Response示例)  如何将凡科建站内容保存为本地文件?  手机网站制作与建设方案,手机网站如何建设?  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  javascript如何操作浏览器历史记录_怎样实现无刷新导航  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  如何快速搭建高效服务器建站系统?  JavaScript如何实现继承_有哪些常用方法  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  使用spring连接及操作mongodb3.0实例  如何在 Pandas 中基于一列条件计算另一列的分组均值  公司网站制作需要多少钱,找人做公司网站需要多少钱?  Laravel如何使用模型观察者?(Observer代码示例)  Laravel如何使用Service Container和依赖注入?(代码示例)  Laravel怎么在Blade中安全地输出原始HTML内容  如何获取PHP WAP自助建站系统源码?  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  如何在橙子建站中快速调整背景颜色?  Laravel如何与Pusher实现实时通信?(WebSocket示例)  如何在万网自助建站中设置域名及备案?  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  微信小程序 scroll-view组件实现列表页实例代码  如何实现javascript表单验证_正则表达式有哪些实用技巧  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  php 三元运算符实例详细介绍  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  Swift中swift中的switch 语句  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  香港服务器网站卡顿?如何解决网络延迟与负载问题?  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  Laravel如何实现事件和监听器?(Event & Listener实战)  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)