我想知道是否可以将我的终端的输出重定向到另一个用户(属于我的组)的终端。例如,我希望能够执行此命令:
date > /dev/pts/2
其他用户是否可以授予我使用权限chmod xxx /dev/pts/2
,以及替换 xxx 的值是什么?谢谢!
答案1
介绍
私人有限公司(又称伪终端)用于实现终端仿真器,例如xterm
…它涉及以与真实终端解释数据相同的方式解释传递的数据……这在向程序发送输入时非常重要(例如su
和sudo
) 通常拒绝从管道读取输入。
在 Ubuntu 中(以及许多其他 Linux 发行版), PTY(奴隶是你在这里感兴趣的) 是伪设备,根据/dev/pts
...这些设备文件是由 /dev/ptmx
()动态创建的伪终端多路复用器)在用户登录虚拟终端时,并在用户注销后删除...这些设备文件的默认所有者是登录用户和tty
系统组...该组由write
和wall
实用程序使他们能够写入其他人的虚拟终端,但不打算直接使用。
如何实现
正确的方式
我不会出于安全原因,建议完全更改权限,因为这些是伪设备文件,您可能会弄乱它们...而且它不打算以这种方式工作。
沟通方式如下:
询问其他用户
/dev/pts/2
(可以通过命令找到tty
)以允许使用mesg
命令如下:mesg y yourusername
开始向该用户发送消息,如下所示:
write their_username /dev/pts/2
或者像这样通过管道将输出传送给他们:
date | write their_username /dev/pts/2
或者使用以下方法将输出重定向到它们
bash
的流程替代像这样:date >(write their_username /dev/pts/2)
注意:接收消息的用户必须通过终端登录,而不能仅通过 X 会话登录...即:
$ who
ubuntu :0 2023-01-12 19:48 (:0) <--- Logged-in through X
ubuntu pts/3 2023-01-27 22:50 <--- Logged-in through terminal
不好的方法(响应你的请求)
例如,我希望能够执行此命令:date > /dev/pts/2 其他用户是否可以使用 chmod xxx /dev/pts/2 授予我权限,以及替换 xxx 的值是什么?
以下信息仅供科学参考,不建议尝试:
这仍然是非常糟糕的做法,而是为了知识……
虚拟终端通常由登录用户和tty
组拥有(write
该组由和之类的实用程序使用,wall
并且具有一些默认成员,例如x
和syslog
)...因此,登录用户无需sudo
...即可更改虚拟终端设备文件的所有权和权限。因此,如果其他用户运行:
chown user:group /dev/pts/2
保留其所有者user
并仅将所有者更改group
为您都是其成员的组的名称...并授予该组的写权限(这是默认设置,所以可能不需要,但以防万一)像这样:
chmod g+w /dev/pts/2
然后你就能够将输出重定向到他们的终端,例如像这样:
date > /dev/pts/2
但请记住,这将向所有现有成员授予写权限(以及那些可能同时被添加到组中的人) 并将拒绝原始tty
组的所有权限。
这也将只是暂时的,直到用户注销,然后虚拟终端设备文件应该消失,并且在后续用户登录时应该使用默认的正确权限创建新的虚拟终端设备文件。