Esse diretório existe, para que programas em execução possam criar arquivos temporários. Esses arquivos são criados como uma área de trânsito para dados que estão indo de um lado para outro do sistema. Caso esses programas não pudessem criar arquivos temporários em disco, eles fariam isso na memória RAM.
A necessidade de área para arquivos temporários, é muito maior que o tamanho da RAM. Assim, entenda que não faz sentido criar o diretório temporário na RAM. Por exemplo, enquanto copia um DVD, um programa pode criar um buffer (memória temporária) dos dados copiados para aumentar a velocidade da cópia.
O tamanho de um DVD é de até 8 GB. Não há como armazenar isso em RAM, então, esse cache ou buffer temporário é feito em
/tmp. Não há degradação do sistema, apesar da cópia ser feita em disco, pois um cache não precisa ser tão rápido, uma vez que o dado está em trânsito de um dispositivo para outro.
A ideia não é acelerar o processo, mas torná-lo constante e seguro como uma caixa de água que retém e libera água na medida certa. A criação de uma tabela temporária por um banco de dados, é outro exemplo de criação de arquivos temporários.
Enquanto reorganiza os dados de uma tabela grande, são criados vários arquivos temporários. Isso é feito como buffer ou cache de modo temporário. Quando a operação termina, os dados temporários devem ser removidos.
O diretório temporário é especial, pois TODOS os usuários possuem permissão de gravação nele. Essa característica é ativada através da permissão especial de bit sticky (drwxrwxrwt) que em octal é lida como 1777.
Observe que, no campo referente a OUTROS, a permissão de execução é substituída por uma letra
t minúscula, isso indica o bit sticky ativado. O bit sticky para arquivos, está obsoleto e não é utilizado nos sistemas
GNU/Linux.
# ls -ld /tmp
drwxrwxrwt 2 root root 4096 Mai 10 21:17 /tmp
O bit sticky para diretórios, indica que TODOS podem criar arquivos neste diretório, porém, apenas o dono do arquivo pode modificar ou remover esse arquivo. Em função disso, o diretório
/tmp em um sistema de produção, DEVE ser uma partição.
Se você ainda não percebeu a gravidade da questão de segurança aqui envolvida, imagine um usuário que resolva criar infinitos arquivos em
/tmp. Ele pode fazer isso sem qualquer problema de permissão, e irá fazê-lo até lotar o disco rígido ou ocupar todos os inodes (o que acontecer primeiro ou for mais fácil), travando todo o sistema por falta de inodes e gerando uma série de negação de serviços, lentidões e travamentos.
Se
/tmp for uma partição, seu uso pode ser controlado por cota (quota), pois a cota somente pode ser implantada em partições e nunca na raiz do sistema.
O diretório
/tmp é uma área de armazenamento provisório, os dados são salvos temporariamente e estão em movimento, isso significa que os programas que colocam dados em
/tmp estão SEMPRE em execução.
Quando a execução termina, é obrigatório que o programa que criou o arquivo temporário faça a sua remoção antes de finalizar. Muitas vezes, isso não acontece e deixa algum lixo para trás. Esse lixo é sempre removido quando o sistema é reiniciado para garantir uma área de troca sempre limpa. Esse é um comportamento padrão em vários sistemas GNU/Linux.
É muito comum um administrador novato, guardar algo em
/tmp e após um reinício (boot), perceber que perdeu TUDO que guardou em
/tmp. Cuidado com isso! Essa não é uma área para cópias de segurança.
Uma vez que TODOS os usuários podem gravar em
/tmp, é muito difícil calcular o tamanho ideal dessa partição. Em média, o valor de 5 GB por usuário é razoável. Mas, dependo do tipo de utilização de cada usuário, esse valor pode subir muito.
Outra questão importante para o
/tmp, são as opções de montagem. É recomendado desativar a execução de binários (noexec) e proibir a criação de arquivos especiais como pipes, sockets ou devices (nodev) nessa partição. Isso aumenta a segurança do sistema e pode ser definido nas opções de montagem em
/etc/fstab.
Existe outro diretório temporário no sistema que poucas pessoas falam dele. O diretório presente em
/var/tmp. Esse diretório possui as mesmas características de
/tmp. Se você pretende fechar todas as brechas de segurança, deve fazer
/var/tmp em uma partição e aplicar cota. Normalmente, como
/var já é uma partição, neste caso, basta aplicar uma cota em
/var para evitar problemas.