写信、留言、谁和消息

写信、留言、谁和消息

我想设置一个拥有大量用户的服务器,以便(按重要性顺序):

  1. who用户无法通过或获取其他用户的 IP 地址last
  2. 用户可以write互相
  3. 用户可以选择性地屏蔽mesg n其他用户,而不是简单地屏蔽所有人
  4. [可选] 用户不能wall

第 1 点很容易通过和chmod 660来解决,但我不知道如何实现其他要点wtmputmp

服务器运行 Gentoo Linux

的输出last为:

last: /var/log/wtmp: Permission denied

的输出w为:

 17:04:45 up 36 days,  2:51,  0 users,  load average: 2.34, 2.96, 2.12
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT

答案1

write命令本质上是写入设备文件,例如/dev/pts/1。它似乎在进行查询utmp,以便找出用户和 tty 之间的对应关系。可以通过简单地列出 的内容来解决此问题/dev/ptsls -lh /dev/pts尽管很可能不需要 - 请参阅下文)。

mesg除了设置或删除 tty 设备文件的组写权限之外似乎没有做任何事情:

anthony@laura:~$ who am i
anthony  pts/6        Jun 11 17:06 (:0:S.5)
anthony@laura:~$ mesg
is n
anthony@laura:~$ chmod g+w /dev/pts/6
anthony@laura:~$ mesg
is y

中的文件/dev/pts属于组ttywritesetgids 命令将文件设置为该组以便对其进行写入。因此,为了使第 (2) 点发挥作用,应该可以使用 ACL 使utmp组 可以读取tty

setfacl -m g:tty:r /var/run/utmp

(改变utmp它的组tty也许会起作用,但谁知道这可能会产生什么副作用。)

为了使点 (3) 发挥作用(假设/dev/pts文件系统不支持 ACL),我相信您需要修改write并实现其中的功能(例如,读取目标用户主目录中的文件“allow_mesg”并查看消息传递用户是否列在其中)。

答案2

您可以使用 chroot 并将用户锁定到自定义根目录中。通过这样做,您可以将他们指向 mesg、wall、who 等的任何版本。

您还可以强制将它们放入 shell 包装器中,然后在那里设置控件。

相关内容