无法写入其他用户“您已关闭写权限”

无法写入其他用户“您已关闭写权限”

由于某种原因,我无法写信给系统上的其他用户。

[root@hostname ~]# write
write: you have write permission turned off.
[root@hostname ~]# mesg y
[root@hostname ~]# mesg
is y
[root@hostname ~]# write
write: you have write permission turned off.

为了实现此功能还需要启用/更正什么?

答案1

测试strace writestrace mesg揭示它们在识别您的 tty 的方式上有细微的差别。

write首先会readlink("/proc/self/fd/0", ...)找到的名称tty,然后stat对结果路径进行调用。

mesg另一方面将调用fstat(1, ...)跳过使用步骤readlink并且不依赖于/proc文件系统。

请注意,它们还会查看不同的文件描述符01。通常,交互式 shell 的文件描述符 012均引用相同的 tty。如果您以某种方式让 shell 运行0并引用其他内容(例如,如果您重定向了其中一个),则这可以解释和1的输出之间的差异。mesgwrite

如果文件描述符都引用同一个 tty,则出现差异的另一个可能原因可能是您的/proc挂载行为未按预期运行,或者您的 tty 的字符设备 inode 已被替换。

答案2

当以 root 身份运行并mesg禁用(返回n)时,我得到了与您相同的错误。运行该命令mesg y使我能够运行写入。以 root 身份运行,root我可以写入已mesg禁用的用户,而以非 root 身份运行则无法执行此操作。

有多个实用程序提供此write功能。它们都需要能够写入终端。但是,由于您以root权限身份运行,因此权限不应该成为问题。

答案3

我不得不编辑/etc/login.defs并更改TTYPERM 0600TTYPERM 0620

相关内容