从哪个日志中我可以获取有关任何用户执行的 sudo 命令的详细信息。它应该包含工作目录、命令、用户。如果您能为我提供一个 shell 脚本来执行此操作,将会很有帮助
答案1
取决于您的发行版;简单地:
$ sudo grep sudo /var/log/secure
或者
$ sudo grep sudo /var/log/auth.log
这使:
Nov 14 09:07:31 vm1 sudo: pam_unix(sudo:auth): authentication failure; logname=gareth uid=1000 euid=0 tty=/dev/pts/19 ruser=gareth rhost= user=gareth
Nov 14 09:07:37 vm1 sudo: gareth : TTY=pts/19 ; PWD=/home/gareth ; USER=root ; COMMAND=/bin/yum update
Nov 14 09:07:53 vm1 sudo: gareth : TTY=pts/19 ; PWD=/home/gareth ; USER=root ; COMMAND=/bin/grep sudo /var/log/secure
在本例中,运行命令的用户位于sudo:
-之后。gareth
PWD
是目录。
USER
是本示例中gareth
运行为 -的用户。root
COMMAND
是命令运行。
因此,在上面的例子中,gareth
用来sudo
运行yum update
然后运行这个例子。在此之前,他输入了错误的密码。
另请注意,可能存在滚动日志文件,例如/var/log/secure*
在较新的系统上:
$ sudo journalctl _COMM=sudo
给出了非常相似的输出。
答案2
Gareth 解决方案的“结果过滤器”。 (对于那些通过帖子标题而不是描述到达的人)
为您提供所有用户以 sudo 身份运行的仅命令的干净列表。
$sudo journalctl _COMM=sudo | sed -e '/COMMAND/!d' -e 's/.*COMMAND=//' -e 's/.*bin\///'
sed 不可用时的解决方法
$sudo journalctl _COMM=sudo | grep COMMAND
C&P 结果存入 Google 表格
在单元格 B1 C&P 中此公式
=arrayformula(REGEXREPLACE(A1:A,".*AND=/usr/bin/(.*)","$1"))