Quais são as permissões corretas para / tmp? Involuntariamente, defini tudo público recursivamente

78

Eu abusei sudo.

Criei um diretório temporário de vida muito curta que gostaria de compartilhar entre alguns usuários por algumas horas ... e nomeei esse diretório /some/path/tmp

Infelizmente, eu lancei em sudo chown 777 -R /tmpvez de sudo chown 777 -R tmp, então meu /tmparquivo agora é completamente público.

Eu uso o comum com /tmpbastante frequência (todos os dias, quase todas as horas) pessoalmente para arquivos de vida curta, scripts, muitos scripts.

É uma preocupação de segurança agora que está completamente definida para o público? Devo alterá-lo de volta para configurações mais seguras ou como configurações padrão comuns para uma distribuição Debian ou Ubuntu - (não sei quais eram)? Quais são as permissões corretas para /tmp?

Stephane Rolland
fonte
Lembre-se de que eu esqueci algo importante na minha resposta inicial: o soquete X11 precisa estar acessível ao público, caso contrário você não poderá iniciar novos aplicativos GUI. Eu atualizei minha resposta.
Gilles
Foi chownou chmod?
Melebius 26/07
@ Melebius Estou um pouco intrigado com a sua pergunta: eu não mencionei chmod. chown (como ch - own), é sobre propriedade de arquivos, cujo usuário possui um arquivo. chmod (como ch - modifify) é mais sobre quem pode executar, escrever dentro ou ler o conteúdo de um arquivo.
Stephane Rolland
2
@StephaneRolland Sim, foi isso que me confundiu. Você pode usar o chown 777que define a propriedade de um arquivo para o usuário com o ID 777. No entanto, todas as respostas, incluindo a aceita, funcionam chmod. Como todos eles definem a permissão com o mesmo valor para todos os usuários (proprietário, grupo, outros), a maioria dos efeitos da propriedade do arquivo se torna irrelevante. No entanto, o comando correto para corrigir o resultado sudo chown 777 -R /tmpdeve ser sudo chown root -R /tmp.
Melebius 29/07

Respostas:

117

As configurações normais para /tmp1777 são lsmostradas como drwxrwxrwt. Ou seja: bem aberto, exceto que apenas o proprietário de um arquivo pode removê-lo (é o que esse tbit extra significa para um diretório).

O problema com o /tmpmodo 777 é que outro usuário pode remover um arquivo que você criou e substituir o conteúdo de sua escolha.

Se você /tmpé um sistema de arquivos tmpfs, uma reinicialização restaurará tudo. Caso contrário, execute chmod 1777 /tmp.

Além disso, muitos arquivos /tmpprecisam ser privados. No entanto, pelo menos um diretório precisa criticamente ser legível pelo mundo: /tmp/.X11-unixe possivelmente outros diretórios similares ( /tmp/.XIM-unix, etc.). O comando a seguir deve principalmente corrigir as coisas:

chmod 1777 /tmp
find /tmp -mindepth 1 -name '.*-unix' -exec chmod 1777 {} + -prune -o -exec chmod go-rwx {} +

Ou seja, torne todos os arquivos e diretórios privados (remova todas as permissões para grupos e outros), mas torne os soquetes X11 acessíveis a todos. O controle de acesso nesses soquetes é imposto pelo servidor, não pelas permissões de arquivo. Pode haver outros soquetes que precisam estar disponíveis ao público. Corra find /tmp -type s -user 0para descobrir soquetes de propriedade raiz que talvez você precise tornar acessíveis ao mundo. Também pode haver soquetes pertencentes a outros usuários do sistema (por exemplo, para se comunicar com um barramento do sistema); explore com find /tmp -type s ! -user $UID(onde $UIDestá seu ID de usuário).

Gilles
fonte
1
você poderia explicar mais o segundo chmod?
Bartlomiej Lewandowski
@ BartlomiejLewandowski go-rwx: sem permissões para grupos e outros. Isso define as permissões para rwx------(exceto que os arquivos criados desde o chmodfinal podem ter menos permissões, por exemplo rw-------). Em outras palavras, os arquivos serão acessíveis apenas pelo proprietário. /tmp/.[!.]*é incluir arquivos de ponto, que geralmente existem no /tmp.
Gilles
@BartlomiejLewandowski: chmod -go-rwx: defina os direitos "rwx" para Proprietário e Grupo. r = leitura, w = gravação, x = execução (para arquivo) ou digite / atravessar (para diretório). 777 = rwxrwxrwx (a parte direita pode ser vista como: "definir 'r' definir 'w' definir 'x', definir 'r' definir 'w' definir 'x', definir 'r' definir 'w' definir 'x '", que em binário é representado como" 111111111 "(1 para definir, 0 para desabilitar). E" 111111111 "em binário é representado em octal como" 777 "(octal = grupos de 3 bits, cada grupo com valor de 0 a 7) .se "rwxr-xr--" seria "111101100", que no octal é "754" #
Olivier Dulac
2
O + t é referido como o bit adesivo. É isso que impede que qualquer pessoa que não seja o proprietário possa remover arquivos, mesmo que as permissões sejam 777. A parte complicada era originalmente fazer com que o kernel deixasse os programas comuns na memória quando eles saíssem, para que não precisassem ser buscados no disco na próxima execução. Estamos falando PDP11 dias ....
kurtm
1
@ GabrielFair Substituí o comando usando curingas por um usando find que não vai encontrar esse problema.
Gilles
10

/tmpe /var/tmpdeveria ter lido, gravado e executado direitos para todos; mas você também adicionaria o sticky-bit ( o+t), para impedir que os usuários removam arquivos / diretórios pertencentes a outros usuários. Então chmod a=rwx,o+t /tmpdeve funcionar.

Quanto à alteração recursiva das permissões ... Enquanto o proprietário / grupo permanecer como é para os arquivos e diretórios, isso não deve ser um problema. Mas você pode alterar a permissão de tudo em /tmp(não o / tmp propriamente dito) para garantir a privacidade dos usuários, removendo os rxdireitos de outras pessoas e talvez do grupo.

Encontrar é uma boa maneira de fazer isso. Como root, faça:

cd /tmp
find . -type f -exec chmod u=rw,go= {} \;   # (or u=rw,g=r,o= {})
find . -type d -exec chmod u=rwx,go= {} \;  # (or u=rwx,g=rx,o= {})
Baard Kopperud
fonte
Em um sistema de desktop típico, é melhor também tornar /tmp/.X11-unix/*legível para o mundo ou não será mais possível iniciar aplicativos X.
Gilles
chmod a=rwX,o+t /tmp -Rdeve fazer a findmágica.
dhill
3
[root@Niflheim tmp]# ls -alF .
total 1632
drwxrwxrwt 15 root root    4096 Apr  7 04:24 ./
drwxr-xr-x 28 root root    4096 Apr  2 21:02 ../
[root@Niflheim tmp]# stat -c '%A %a %n' .
drwxrwxrwt 1777 .

De uma máquina CentOS 5.9.

Aaron D. Marasco
fonte