写,墙,谁和mesg

我想build立一个服务器与很多用户,以便(按重要性):

  1. 用户不能获得其他用户的IP地址,或者last用户
  2. 用户可以互相write
  3. 用户能够select性地向其他用户发送消息,而不是简单地阻止每个人
  4. [可选]用户不能wall

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

服务器运行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 

write命令本质上写入设备文件,例如/dev/pts/1 。 它似乎咨询utmp为了弄清楚用户和ttys之间的对应关系。 我们可以通过简单地列出/dev/pts的内容来解决这个问题: ls -lh /dev/pts (尽pipe这很可能是不需要的,见下文)。

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

 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的文件属于组ttywrite命令setgids到这个组以写入他们。 因此,为了得到第(2)点的工作,应该可以使用ACL使utmp可以被tty组读取:

 setfacl -mg:tty:r /var/run/utmp 

(改变utmp使其组是tty也可以,但是谁知道这可能有什么副作用。)

为了得到point(3)的工作(假设/dev/pts文件系统不支持ACL),我相信你需要修改write和实现它的function(例如,读取文件“allow_mesg”目标用户的主目录并查看消息传递用户是否在那里列出)。

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

你也可以强制他们进入一个shell包装,并在那里设置你的控制。