深入理解linux: Kernel Logs, Syslogs, Authentication Logs, and User Management

126 阅读9分钟

好吧,让我们以一种真正有意义的方式分解 Linux 用户管理、身份验证和日志记录,特别是如果您同时使用过 Windows 和 Linux 系统。

🔑 1. Linux 与 Windows 中的唯一标识符

首先,我们来谈谈如何识别用户:

  • Windows使用SID(安全标识符) ——像 S-1-5-21-... 这样的长字符串来唯一地标识用户。
  • 另一方面,Linux对用户使用UID(用户 ID) ,对组使用GID(组 ID) 。

👉快速提示:

  • 普通用户账户从 UID 1000开始及以上。
  • 低于 1000 的任何值通常都是系统或服务帐户(如守护进程、系统日志等)。

📂 2. Linux 中的用户信息存储在哪里?

🧾 /etc/passwd

该文件保存基本用户信息:用户名UIDGID主目录shell(如/bin/bash或/usr/sbin/nologin)。

cat /etc/passwd

您会看到如下条目:

akash:x:10011001 :Akash,,,:/ home / akash :/ bin / bash

🔐 /etc/shadow

实际的(经过哈希处理的)密码存储在这里,而不是 /etc/passwd 中。出于某种原因,它仅限 root 用户使用。

sudo cat /etc/shadow猫/etc/shadow

您会注意到散列密码看起来像这样:

akash:$6$randomsalt$verylonghashedpassword:19428:0:99999:7:::$6 $randomsalt $verylonghashedpassword : 19428 : 0 : 99999 : 7 :::

  • 66 表示它是使用SHA-512进行散列的。
  • Linux 中其他常见的密码哈希算法:MD5BlowfishSHA-256SHA-512
  • 所有这些都使用加盐多轮哈希来增加安全性。

👥 3. 在 Linux 中管理用户(您实际会使用的命令)

以下是最常用的命令:

所有这些都与 Linux 如何处理访问和会话有关。

🛡️ 4. Linux 如何处理身份验证(感谢 PAM)

PAM代表可插入式身份验证模块- 它是 Linux 检查您的凭据背后的大脑。

🗂️ PAM 配置文件在哪里?

  • /etc/pam.d/:各个服务(如 sshd、login、sudo 等)的 PAM 配置文件的主目录
  • /etc/security/access.conf:您可以使用它根据 IP、组等允许或拒绝用户。

例子:

-:akash:192.168.1.100 外全部:akash :192.168 . 1.100外全部 

这意味着 Akash 只能从 IP 192.168.1.100 登录。

🧩 PAM 模块位置

这些是执行繁重工作的 .so 文件(共享对象库)。

  • 基于 RHEL 的发行版:/usr/lib64/security/
  • 基于 Debian 的发行版:/usr/lib/x86_64-linux-gnu/security/

可以将它们视为 Linux 版本的 Windows DLL,但用于身份验证逻辑。

🔄 PAM 身份验证的工作原理(分步说明)

  1. 用户输入凭证(用户名+密码)。
  2. 系统从 /etc/pam.d/* 加载 PAM 配置。
  3. 相关模块从 /usr/lib/...调用。
  4. 密码与 /etc/shadow 中的哈希值进行比较。
  5. 如果有效,会话就开始。
  6. 身份验证日志通常写入 /var/log/auth.log 或 /var/log/secure。
  7. 访问被允许或被拒绝

简单但功能强大。

— — — — — — — — — — — — — — — — — — — — — — — —

📜 5. 日志记录 - 查看位置

🗂️ Linux 在哪里记录身份验证内容?

Linux 将日志保存在 /var/log/ 目录下 — — 这是您可以找到各种系统和用户相关日志的中心位置。

1. /var/log/auth.log(Debian/Ubuntu 系统)

这是您调查时要使用的文件

  • 通过终端、SSH 或 sudo 登录
  • 会话开始/停止
  • 身份验证失败和成功

使用 tail -f /var/log/auth.log 监控实时登录。对于较旧的压缩日志,请使用:zcat /var/log/auth.log.1.gz。

另外,有趣的是:cron 作业日志也在这里,因为 cron 必须在运行计划任务之前对用户进行身份验证。

2. /var/log/secure (Red Hat/CentOS/Fedora系统)

用途与 auth.log 相同,但没有 cron 日志。

因此,如果您正在 RHEL 或 CentOS 上追查暴力破解尝试或失败的 SSH 登录,那么这里就是您的最佳选择。

3. /var/log/failog

这个专门记录失败的登录尝试,但这里有一个转折:

  • 在 Ubuntu/Debian 上,它就在那里,但前提是你配置了 pam_faillock。
  • 在基于 RHEL 的系统上,它通常默认不启用

使用 faillog -a 检查所有失败的尝试。

4. /var/log/lastlog

想知道用户上次登录的时间吗?这个文件可以帮你搞定。

运行 lastlog -u akash 检查用户 akash 的最后登录时间。

非常适合检查休眠账户或进行基本审计。

5. /var/log/btmp

该文件跟踪失败的登录尝试,但它是二进制格式 - 因此不要尝试像文本文件那样对其进行 cat 处理。

使用 lastb 或者 lastb -f /var/log/btmp 可以干净地查看它。

6. /var/log/wtmp

它记录所有登录/注销事件、系统重启和关机。

最后运行来读取它。或者从死机系统中获取取证转储:

最后-f /mnt/disk/var/log/wtmp

7./运行/utmp

该文件更加“活跃”。它跟踪当前登录的用户。

使用 who 或 w 查看谁现在在线。

🔍 日志保存多长时间?

Linux 通常默认保存4 周的日志,每周轮换一次。较旧的日志会被压缩(您将看到 .gz 文件)。因此,为了更深入地了解日志:

  • 使用 zcat 或 zless 查看存档日志
  • 在原始取证场景中使用字符串、hexdump 或十六进制编辑器读取二进制日志(如 btmp、wtmp 或 utmp)

🧪 快速命令回顾

🧠 补充:Syslog 和内核日志在 Linux 中的工作原理

让我们来谈谈Syslog — Linux 日志的支柱。

Syslog 不是一个文件——它是系统进程用来将日志消息发送到日志服务器(或本地文件)的标准协议。它被广泛用于从 SSH 到 cron 等各种服务,并根据以下方式对日志进行分类:

  • 设施(如身份验证、内核、守护进程)
  • 严重性(信息、警告、错误、严重)

常见的 Syslog 实现:

  • rsyslog(目前最常见)
  • 系统日志生成器
  • journald(与 systemd 一起使用)

🗂️ 关键系统日志文件

1. /var/log/syslog (Ubuntu/Debian)

这就像一个包罗万象的系统日志。你会发现:

  • 内核消息
  • 应用程序级日志
  • Cron日志
  • 硬件问题

当您不确定到底出了什么问题但又想了解所有事情的时间表时,它非常有用。

使用 tail -f /var/log/syslog 或 grep 通过它来查找事件。

2. /var/log/messages (RHEL/CentOS/Fedora)

可以将其视为Fedora 风格的 syslog

它记录类似的数据——服务、内核消息、应用程序错误——但它是这些发行版的默认日志文件。

想要进入专业模式吗?

您甚至可以使用 rsyslog 或 syslog-ng 将日志转发到中央日志服务器。非常适合 SIEM 集成或企业设置。

🚨提示:查看二进制日志

wtmp、btmp 和 utmp 等文件不是纯文本,所以不要指望用 cat 命令读取它们。要么使用正确的命令(last、lastb、who 等),要么在完全取证模式下用十六进制编辑器打开它们。

— — — — — — — — — — — — — — — — — — — — — — — —

让我们来讨论一下非常重要但经常被忽视的东西——Linux 中的内核日志

这些日志在诊断系统级问题(例如驱动程序问题、启动错误或硬件故障)时,简直是金矿。但是,如果您和大多数人一样,内核日志记录可能会让您感到有些混乱,因为不同发行版涉及的工具和文件路径种类繁多。所以,让我们用通俗易懂的语言来解释一下。

🧠 首先要说的是 — dmesg 是干什么的?

当你想查看Linux 内核的运行情况时,dmesg 命令是你的首选工具——尤其是在启动之后。它显示以下内容:

  • 硬件检测
  • 驱动程序加载
  • 设备初始化(如 USB、磁盘、网络接口)
  • 启动时错误

基本上,如果您的操作系统核心出现问题,您就会在这里看到第一个危险信号。

🔧 如何使用它?

只需打开一个终端并运行:

消息

你会看到一大段文字。你可以用管道将其传递给 less 或 grep 以便于查看:

dmesg | grep -i 错误错误

现在问题来了:这个输出来自内核环形缓冲区——它位于内存中。这意味着一旦系统重启,——除非你保存了它,否则它就没了。

📁 但是等一下——这些东西保存在哪里?

在某些发行版中,它实际上_已被_保存!

🗂️ /var/log/dmesg(仅在某些系统上)

此文件会捕获上次启动时 dmesg 的输出并永久保存。您只需运行以下命令即可:

减少/var/log/dmesg

但不要指望它在所有系统上都可用。例如:

  • **Debian/Ubuntu:**您很可能会找到它。
  • **Fedora/RHEL/Rocky:**不是。他们用的是 journald(稍后详细介绍)。

📚 输入 /var/log/kern.log — 坚持不懈的英雄

现在这个很有趣。

kern.log文件__包含所有内核消息 — 就像 dmesg 一样 — 但即使在重新启动后它仍然存在。

这意味着如果您的系统在更新或安装新硬件后开始出现异常,您可以回去检查一周前内核在做什么。

像这样查看:

减少/var/log/kern.log日志/kern.日志

🕒 奖励:时间戳

与显示正常运行时间秒数(如 [ 3.421546])的原始 dmesg 输出不同,kern.log 中的消息带有真正的人类可读的时间戳,从而更容易与用户事件匹配。

🧰 Fedora、RHEL、Rocky Linux 怎么样?

好了,现在我们来谈谈Fedora 风格的发行版。它们已经放弃了传统的日志文件,现在严重依赖systemd 的 journald 服务

那么像 /var/log/kern.log 或 /var/log/dmesg 这样的文件呢?你在这里找不到它们。

相反,所有内容都记录在系统日志中。

✅ 如何查看内核日志?

journalctl-k

这样就只显示日志里的内核日志了。超级简洁,超级简单。

您还可以使用如下过滤器:

journalctl -k --since2天前”“2天前”

— — — — — — — — — — — — — — — — — — — — — — — —

💾 持久日志与非持久日志(这很关键!)

基于 Systemd 的发行版可以将日志存储在内存(易失性)或磁盘(持久性)中。日志是否在重启后保留取决于 journald 的设置方式。

  • 如果日志存储在 /var/log/journal 中,则它们是持久的
  • 如果没有,并且仅在 /run/log/journal 中,则它们在重启后就会消失

因此,如果您正在对死箱进行取证,您最好希望 /var/log/journal 存在。

— — — — — — — — — — — — — — — — — — — — — — — —

💀 Deadbox 日志搜寻技巧

如果您正在处理一个死机系统并试图深入了解死机前发生的情况:

  1. 使用实时 CD 或取证操作系统安装磁盘。
  2. 如果存在,请导航至 /var/log/journal/。
  3. 使用 journalctl --directory=/mount/path/var/log/journal 查看日志。

如果什么都没有呢?

除非您有其他工件(如 /var/crash/、旧 syslog 导出或甚至交换内存)进行分析,否则您就有点不走运了。

— — — — — — — — — — — — — — — — — — — — — — — —

🔚 最后的想法

无论您是在实时系统上、进行取证工作,还是尝试修复行为异常的服务器,都请不要忘记:

日志不会说谎——你只需要知道它们藏在哪里。