如何在 Linux(RHEL8)中以另一个用户身份运行 wall 命令

如何在 Linux(RHEL8)中以另一个用户身份运行 wall 命令

我如何以 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 的程序时,这些可能会有所不同。)

相关内容