以下语句出现在 sudoers 手册的早期,它引用了“SUDO_USER 环境变量”,但手册中没有定义它:
如果 sudo 由 root 运行并且设置了 SUDO_USER 环境变量,则 sudoers 策略将使用该值来确定实际用户是谁。即使已调用 root shell,用户也可以使用它通过 sudo 记录命令。即使通过 sudo-run 脚本或程序调用,它还允许 -e 选项仍然有用。但请注意,sudoers 查找仍然是针对 root 完成的,而不是针对 SUDO_USER 指定的用户。
整个段落对我来说仍然相当难以捉摸,任何澄清将不胜感激。例如,sudoers 策略使用 SUDO_USER 环境变量来确定用户的实际身份是什么意思,以及用户可以使用它来记录命令是什么意思?
这句话也让我难以理解:
即使已调用 root shell,用户也可以使用它通过 sudo 记录命令。
答案1
SUDO_USER
记录在man sudo
(不是sudoers
):
SUDO_USER Set to the login name of the user who invoked sudo.
也就是说,如果你运行sudo sh -c 'echo $SUDO_USER'
它,它是获得 的效果的一种迂回方式whoami
。
sudo
当用户通过它运行(或尝试运行)命令时记录。您可以使用journalctl /usr/bin/sudo
或与您的系统相当的东西列出它们。它列出了每次调用的用户名和命令。
如果sudo
1) 作为 root 运行并且 2) 使用SUDO_USER
set 运行,则日志条目将使用SUDO_USER
用户名而不是“root”进行标记。这使得(合作的)用户可以记录他们为后代运行的命令,即使他们处于不受限制的环境中。sudo
使用 root 权限运行时总是会成功(除非通过设置禁用root_sudo
),因为您可以在没有 root 权限的情况下运行该命令。
出现这种情况主要有两种方式。第一种是显而易见的sudo bash
或等同的,即记录事物的愿望。另一种用例是脚本,它可以记录它们代表用户采取的实际操作。这是一种信息行为,而不是安全问题。
sudo -e
用于编辑文件并使用一组不同的安全策略,这些策略也记录在man sudo
更安全的编辑行为中。人们有时会在以 root 身份登录时使用它来使用这些功能,并且它具有与SUDO_USER
上述相同的交互作用。