Eu experimento um comportamento estranho no meu diretório /tmp. Embora um usuário pertença a um grupo tenha permissão para ler/escrever um arquivo, ele não pode fazê-lo.
Neste exemplo, crio um novo arquivo /tmp/test.txt
como user max
. Eu dou as permissões 777 e faço o arquivo pertencer ao grupo root
, mas o usuário root
ainda não pode editá-lo.
su max
touch /tmp/test.txt
chmod 777 /tmp/test.txt
su root
chown max:root /tmp/test.txt
# ls -l /tmp/test.txt
-rwxrwxrwx 1 max root 0 26. Feb 12:08 test.txt
# echo "foobar" > /tmp/test.txt
bash: /tmp/test.txt: Permission denied
Ao mover test.txt
para um diretório diferente, tudo funciona conforme o esperado.
/tmp
é um tmpfs montado via fstab através das seguintes opções:
tmpfs /tmp tmpfs nodev,nosuid,size=5G 0 0
Ao executar ls -l /
, a pasta tmp se parece com o seguinte:
drwxrwxrwt 20 root root 640 26. Feb 12:01 tmp/
Estou executando o Manjaro, um derivado do Arch Linux.
Eu fiz algo errado ao montar tmpfs?
O comportamento que você está mostrando parece depender do
fs.protected_regular
parâmetro do kernel do Linux, introduzido junto comfs.protected_fifos
este commit (convergido na versão 4.19, acredito), com o objetivo de corrigir vulnerabilidades de segurança.Trecho da mensagem do commit (ênfase minha):
A mesma mensagem de confirmação também relata uma lista de números de Vulnerabilidades e Exposições Comuns (CVE) relacionados.
Assim, desde que
userX
sejaroot
ou seja concedido acesso de gravação para/tmp/file
, e que/tmp
seja um diretório gravável mundial com o sticky bit definido, eles podem ser abertosfile
para gravação somente se:userX
é proprietário defile
; oufile
e o diretório/tmp
são de propriedade do mesmo usuário.No seu teste,
root
tem permissões de escrita em/tmp/test.txt
, mas não é o dono do arquivo, nem tem/tmp/test.txt
e/tmp
o mesmo dono (respectivamentemax
eroot
).O problema parece ser totalmente alheio à forma como
/tmp
é montado.A documentação relevante está em Documentation/sysctl/fs.txt :
Ou seja, a proteção descrita acima pode ser desabilitada com o comando:
Um pouco de teste para apoiar nossa hipótese:
Ao contrário de
fs.protected_hardlinks
efs.protected_symlinks
,fs.protected_regular
efs.protected_fifos
não são habilitados por padrão no código do kernel.Habilitá-los é uma mudança incompatível com versões anteriores (como o exemplo que você forneceu neste comentário aponta) e, até onde eu sei,
systemd
fiz isso na versão 241, com este commit recente .Créditos: obrigado ao JdeBP por apontar na direção certa com um comentário à pergunta.