Назад | Перейти на главную страницу

Пишите, стена, кто и сетка

Я хочу настроить сервер с большим количеством пользователей, чтобы (в порядке важности):

  1. Пользователи не могут получить IP-адреса других пользователей с who, или last
  2. Пользователи могут write друг другу
  3. Пользователи могут выборочно mesg n другие пользователи, а не просто блокировать всех
  4. [необязательно] Пользователи не могут 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 и т. Д.

Вы также можете поместить их в оболочку оболочки и установить там свои элементы управления.