我想build立一个服务器与很多用户,以便(按重要性):
last
用户 write
wall
第1点很容易通过wtmp
和utmp
上的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
的文件属于组tty
。 write
命令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包装,并在那里设置你的控制。