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á).