Escrever, parede, quem e mesg

5

Eu quero configurar um servidor com muitos usuários para que (em ordem de importância):

  1. Os usuários não podem obter endereços IP de outros usuários com who ou last
  2. Os usuários podem write entre si
  3. Os usuários podem selecionar mesg n de outros usuários seletivamente, em vez de simplesmente bloquear todos
  4. [opcional] Os usuários não podem wall

O ponto 1 é facilmente resolvido por chmod 660 on wtmp e utmp , mas não sei como alcançar os outros pontos

O servidor roda o Gentoo Linux

A saída de last é:

last: /var/log/wtmp: Permission denied

A saída de 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
    
por miniBill 08.06.2012 / 10:25

2 respostas

6

O comando write essencialmente grava em um arquivo de dispositivo, como /dev/pts/1 . Parece consultar utmp para descobrir a correspondência entre usuários e ttys. Pode-se contornar isso simplesmente listando o conteúdo de /dev/pts com ls -lh /dev/pts (embora provavelmente não seja necessário - veja abaixo).

mesg parece não fazer nada além de definir ou remover a permissão de gravação do grupo do arquivo de dispositivo 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

Os arquivos em /dev/pts pertencem ao grupo tty . O comando write é setado para este grupo para escrever para eles. Portanto, para que o point (2) funcione, deve ser possível usar as ACLs para tornar utmp legível pelo grupo tty :

setfacl -m g:tty:r /var/run/utmp

(Alterar utmp para que seu grupo seja tty também funcione, mas quem sabe quais efeitos colaterais isso pode ter.)

Para que o point (3) funcione (dado que o sistema de arquivos /dev/pts não suporta ACLs), acredito que você precisaria modificar o write e implementar a funcionalidade nele (por exemplo, ler um arquivo "allow_mesg" no diretório inicial do usuário de destino e veja se o usuário do sistema de mensagens está listado lá).

    
por 11.06.2012 / 16:42
1

Você pode usar o chroot e bloquear os usuários em um diretório-raiz personalizado. Ao fazer isso, você poderia apontá-los para qualquer versão de mesg, wall, who, etc.

Você também poderia forçá-los a um wrapper de shell e definir seus controles lá.

    
por 15.06.2012 / 23:10