我想设置一个有很多用户的服务器,以便(按重要性排序):
who
, 或last
write
互相mesg n
其他用户,而不是简单地阻止所有人wall
第 1 点很容易通过chmod 660
on wtmp
and解决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/pts
with的内容来解决这个问题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 次 |
最近记录: |