%20%E3%81%A7%E5%88%A5%E3%81%AE%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%A8%E3%81%97%E3%81%A6%20wall%20%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95.png)
元のユーザーを識別せずに、ルート (または他のユーザー) としてウォール メッセージを送信するにはどうすればよいですか?
下を見ると壁にメッセージが表示されると予想されますルートからしかし、それはまだ表示されます管理者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);
man ページからgetlogin
:
getlogin() は、プロセスの制御端末にログインしているユーザーの名前を含む文字列へのポインターを返します。この情報を特定できない場合は NULL ポインターを返します。
...
これらの関数を使用すると、プログラムで実行中のユーザー (cuserid()) またはこのセッションにログインしたユーザー (getlogin()) を確実に識別できます。(set-user-ID プログラムが関係する場合は、これらが異なる場合があります。)