![即使在 sudo 下运行,记录器命令也会报告我是用户?](https://linux22.com/image/197151/%E5%8D%B3%E4%BD%BF%E5%9C%A8%20sudo%20%E4%B8%8B%E8%BF%90%E8%A1%8C%EF%BC%8C%E8%AE%B0%E5%BD%95%E5%99%A8%E5%91%BD%E4%BB%A4%E4%B9%9F%E4%BC%9A%E6%8A%A5%E5%91%8A%E6%88%91%E6%98%AF%E7%94%A8%E6%88%B7%EF%BC%9F.png)
我有一条线
记录器 好的
在我的脚本中。当我使用以下任一命令从命令行运行它时
./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
已经通过了其他 未记录的接口在过程中。