由于某种原因,我无法写信给系统上的其他用户。
[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 write
并strace mesg
揭示它们在识别您的 tty 的方式上有细微的差别。
write
首先会readlink("/proc/self/fd/0", ...)
找到的名称tty
,然后stat
对结果路径进行调用。
mesg
另一方面将调用fstat(1, ...)
跳过使用步骤readlink
并且不依赖于/proc
文件系统。
请注意,它们还会查看不同的文件描述符0
和1
。通常,交互式 shell 的文件描述符 0
、1
和2
均引用相同的 tty。如果您以某种方式让 shell 运行0
并引用其他内容(例如,如果您重定向了其中一个),则这可以解释和1
的输出之间的差异。mesg
write
如果文件描述符都引用同一个 tty,则出现差异的另一个可能原因可能是您的/proc
挂载行为未按预期运行,或者您的 tty 的字符设备 inode 已被替换。
答案2
当以 root 身份运行并mesg
禁用(返回n
)时,我得到了与您相同的错误。运行该命令mesg y
使我能够运行写入。以 root 身份运行,root
我可以写入已mesg
禁用的用户,而以非 root 身份运行则无法执行此操作。
有多个实用程序提供此write
功能。它们都需要能够写入终端。但是,由于您以root
权限身份运行,因此权限不应该成为问题。
答案3
我不得不编辑/etc/login.defs
并更改TTYPERM 0600
为TTYPERM 0620
。