我现在正在看书Unix 和 Linux 系统管理 - Evi Nemeth。在第 70 页上的主题“su:替换用户身份”下有一个声明:“su 不会记录以 root 身份执行的命令,但它会创建一个日志条目,说明谁成为 root 以及何时成为 root。” 我和我一样很困惑苏根在 CentOS Linux 版本 7.6.1810 上并运行历史命令,我可以看到我以 root 身份运行的命令。
聚苯乙烯添加了该书的链接 - 旧版本。
答案1
history
只显示当前 shell 中已执行的命令。这段历史有很多缺点:
- 如果用户将 shell 配置为不这样做,则它可能不会存储到任何文件中;
- 即使它被记录下来,它也位于用户可写访问的文件中(通常是 ~/.history、~/.bash_history、~/.zsh_history 或类似的文件)。因此,它可以被用户伪造。
总而言之,这不是一个可以依赖的安全审计线索。
书中所说的“记录命令”的意思是将它们写入一些日志中不是普通用户可以访问。书上说su
做记录一些东西,让我们尝试一下:
$ su
Password:
root@firefly:/home/minoru# echo hello
hello
root@firefly:/home/minoru# exit
现在让我们看看记录了什么auth.log
(大多数发行版的路径应该相同):
$ sudo less /var/log/auth.log
Jun 12 22:40:35 firefly su: (to root) minoru on pts/8
Jun 12 22:40:35 firefly su: pam_unix(su:session): session opened for user root by (uid=1000)
Jun 12 22:40:41 firefly su: pam_unix(su:session): session closed for user root
我们可以看到我(minoru)获得了超级用户权限,我们可以看到什么时候我这么做了,但没有任何echo hello
我被处决的痕迹。
现在让我们将其与另一个工具进行比较,sudo
该工具将在本书的下一部分中进行描述:
$ sudo echo hello
hello
$ sudo less /var/log/auth.log
Jun 12 22:44:48 firefly sudo: minoru : TTY=pts/8 ; PWD=/home/minoru ; USER=root ; COMMAND=/bin/echo hello
Jun 12 22:44:48 firefly sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Jun 12 22:44:48 firefly sudo: pam_unix(sudo:session): session closed for user root
我们再次看到谁获得了特权以及何时获得特权,但我们还看到我当时位于哪个目录(/var/log)、我运行的命令,甚至我使用的控制台。好多了!
答案2
您所看到的使用history
是由 shell 记录的,而不是由su
.su
它本身不记录以 root 身份运行的命令。作者可能想将其与sudo
记录其参数(甚至可以配置为记录整个会话)进行对比。
答案3
记录通常意味着将事件信息存储在标准位置中/var/log
。一项活动还有很多其他方式留下痕迹,但这些显然不是她在这里的意思。您可以在同一本书中有关日志记录的章节中获得更多详细信息(第 5 版第 572 页)。