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