Я хочу настроить сервер с большим количеством пользователей, чтобы (в порядке важности):
who
, или last
write
друг другуmesg n
другие пользователи, а не просто блокировать всехwall
Пункт 1 легко решается chmod 660
на wtmp
и utmp
, но я не знаю, как достичь других точек
Сервер работает под управлением 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
(хотя, скорее всего, в этом нет необходимости - см. ниже).
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
Файлы в /dev/pts
принадлежать к группе tty
. В write
команда setgids в эту группу, чтобы писать им. Следовательно, чтобы точка (2) работала, должна быть возможность использовать ACL для создания utmp
читается группой tty
:
setfacl -m g:tty:r /var/run/utmp
(Изменение utmp
так что его группа tty
тоже может сработать, но кто знает, какие побочные эффекты это может иметь.)
Чтобы точка (3) работала (при условии, что /dev/pts
файловая система не поддерживает ACL), я считаю, что вам нужно изменить write
и реализовать в нем функции (например, прочитать файл «allow_mesg» в домашнем каталоге целевого пользователя и посмотреть, указан ли там пользователь обмена сообщениями).
Вы можете использовать chroot и заблокировать пользователей в настраиваемом корневом каталоге. Делая это, вы можете указать им на любые версии mesg, wall, who и т. Д.
Вы также можете поместить их в оболочку оболочки и установить там свои элементы управления.