我如何以 root(或任何其他用户)身份发送墙上消息并且它不识别原始用户?
看看下面的内容,我原本希望墙上会显示消息从根但它仍然显示管理员1,我错过了什么?
我尝试了各种 sudo -i、-s、使用 -c 发送命令、tmux、runuser,但结果总是一样。这是 sudoers 中的全局设置还是其他什么?
就上下文而言,这是测试中的一个问题,我无法弄清楚并且没有得到答案!
[admin1@RHELPOC ~]$ sudo su -
[root@RHELPOC ~]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@RHELPOC ~]# wall "whoisthis"
Broadcast message from admin1@RHELPOC (pts/0) (Fri Jan 8 13:58:40 2021):
whoisthis
答案1
这是因为wall
用来getlogin()
查找用户的名称。
if (!(whom = getlogin()) || !*whom)
whom = (pw = getpwuid(getuid())) ? pw->pw_name : "???";
if (!whom) {
whom = "someone";
warn(_("cannot get passwd uid"));
}
进而:
snprintf(lbuf, line_max,
_("Broadcast message from %s@%s (%s) (%s):"),
whom, hostname, where, date);
从getlogin
手册页中:
getlogin() 返回一个指向字符串的指针,该字符串包含登录在进程控制终端上的用户的名称;如果无法确定此信息,则返回一个 NULL 指针。
...
这些函数可让您的程序准确识别正在运行的用户 (cuserid()) 或登录此会话的用户 (getlogin())。(当涉及设置用户 ID 的程序时,这些可能会有所不同。)