我想建立一个拥有大量用户的服务器,以便(按重要性顺序):
>用户无法获取具有who或last的其他用户的ip地址
>用户可以互相写信
>用户可以选择性地消除其他用户,而不是简单地阻止
大家
> [可选]用户无法挂墙
点1可以通过wtmp和utmp上的chmod 660轻松解决,但我不知道如何实现其他点
服务器运行Gentoo Linux
最后的输出是:
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之间的对应关系.可以通过简单地用ls -lh / dev / pts列出/ dev / pts的内容来解决这个问题(虽然它很可能不需要 – 见下文).
除了从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到该组以便写入它们.因此,为了使point(2)工作,应该可以使用ACL来使utmp组读取utmp:
setfacl -m g:tty:r /var/run/utmp
(改变utmp以使其组合tty也可能有效,但是谁知道这可能产生什么副作用.)
为了使point(3)工作(假设/ dev / pts文件系统不支持ACL),我相信您需要修改write并在其中实现其功能(例如,读取文件“allow_mesg”in目标用户的主目录,并查看消息用户是否列在其中).