如何在 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 程式時,這些可能會有所不同。)

相關內容