我想设置一个有很多用户的服务器,以便(按重要性排序):
who, 或lastwrite互相mesg n其他用户,而不是简单地阻止所有人wall第 1 点很容易通过chmod 660on wtmpand解决utmp,但我不知道如何实现其他点
服务器运行 Gentoo Linux
的输出last是:
last: /var/log/wtmp: Permission denied
Run Code Online (Sandbox Code Playgroud)
的输出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
Run Code Online (Sandbox Code Playgroud)
该write命令基本上写入设备文件,例如/dev/pts/1. 好像utmp是为了搞清楚users和ttys的对应关系而咨询的。人们可以通过简单地列出/dev/ptswith的内容来解决这个问题ls -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
Run Code Online (Sandbox Code Playgroud)
中的文件/dev/pts属于组tty。该write命令setgids这组以写信给他们。因此,为了使第 (2) 点起作用,应该可以使用 ACL 使utmp组可读tty:
setfacl -m g:tty:r /var/run/utmp
Run Code Online (Sandbox Code Playgroud)
(改变utmp它的组也tty可能起作用,但谁知道这可能有什么副作用。)
为了让 (3) 点工作(假设/dev/pts文件系统不支持 ACL),我相信您需要修改write并实现其中的功能(例如,读取目标用户主目录中的文件“allow_mesg”并查看消息传递用户是否列在其中)。
| 归档时间: |
|
| 查看次数: |
1965 次 |
| 最近记录: |