即使在 sudo 下运行,记录器命令也会报告我是用户?

即使在 sudo 下运行,记录器命令也会报告我是用户?

我有一条线

记录器 好的

在我的脚本中。当我使用以下任一命令从命令行运行它时

./myscript.sh
sudo ./myscript.sh
sudo bash ./myscript.sh

它写在日志中

Oct 17 22:32:01 d40688 mysqlf: Ok

即它知道我的用户名并且不认为我是root。

如果我运行这个脚本,/var/spool/cron/root它会写

Oct 17 22:32:01 d40688 root: Ok

即它认为我是根。

如何从命令行模拟后者运行?

答案1

这要么是一个错误,要么是手册页​​错误。表示使用控制终端的uid或有效uid。因此,它应该调用 geteuid,但实际上并没有调用,它只是调用getlogin返回终端的 uid 所有者。随你挑选。

答案2

你甚至不需要sudo那个。

user$ logger -t root sudo sucks

然后

root# journalctl -n1 | cat
-- Journal begins at Mon 2021-09-13 04:01:40 UTC, ends at Sun 2021-10-17 20:15:43 UTC. --
Oct 17 20:15:43 diantre root[1441]: sudo sucks

根据logger(1)手册页:

-t, --tag tag
使用指定标签标记要记录的每一行。默认标签是终端登录的用户名(或基于有效用户ID的用户名)

现在,“用户在终端上登录”是什么,记录器如何确定它?

$ strace logger t
...
openat(AT_FDCWD, "/proc/self/loginuid", O_RDONLY) = 4
read(4, "2000", 12)                     = 4
close(4)
...                                = 0

已经通过了其他 未记录的接口在过程中。

相关内容