So führen Sie den Wall-Befehl als anderer Benutzer in Linux (RHEL8) aus

So führen Sie den Wall-Befehl als anderer Benutzer in Linux (RHEL8) aus

Wie sende ich als Root (oder ein anderer Benutzer) eine Pinnwand-Nachricht, ohne dass der ursprüngliche Benutzer identifiziert wird?

Wenn ich mir das Folgende anschaue, hätte ich erwartet, dass an der Wand die Nachricht angezeigt wirdvon rootaber es zeigt immer nochAdministrator1, Was vermisse ich?

Ich habe verschiedene sudo -i, -s ausprobiert, -c zum Senden von Befehlen verwendet, tmux, runuser, aber immer das gleiche Ergebnis. Ist es eine globale Einstellung in sudoers oder etwas anderes?

Zum Kontext: Dies war eine Testfrage, die ich nicht verstehen konnte und auf die ich keine Antwort bekommen habe!

[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

Antwort1

Dies liegt daran, dass walles verwendet wird getlogin(), um den Namen des Benutzers zu ermitteln.

if (!(whom = getlogin()) || !*whom)
            whom = (pw = getpwuid(getuid())) ? pw->pw_name : "???";
        if (!whom) {
            whom = "someone";
            warn(_("cannot get passwd uid"));
        }

Und dann:

snprintf(lbuf, line_max,
                _("Broadcast message from %s@%s (%s) (%s):"),
                whom, hostname, where, date);

Aus der getloginManpage:

getlogin() gibt einen Zeiger auf eine Zeichenfolge zurück, die den Namen des Benutzers enthält, der am Steuerterminal des Prozesses angemeldet ist, oder einen NULL-Zeiger, wenn diese Information nicht ermittelt werden kann.

...

Mit diesen Funktionen kann Ihr Programm eindeutig den Benutzer identifizieren, der ausgeführt wird (cuserid()) oder der sich in dieser Sitzung angemeldet hat (getlogin()). (Diese können abweichen, wenn Set-User-ID-Programme beteiligt sind.)

verwandte Informationen