Por que não consigo escrever um arquivo em / tmp / mesmo quando ele é root: root e tem sinalizador “t”?

2

Estou usando o usuário postgres para executar alguns comandos especiais. Para isso, estou tentando o seguinte:

$ sudo su - postgres  
postgres$ ls -l /tmp
drwxrwxrwt  13 root root  4096 jun  8 12:20 tmp  
PGPASSWORD=mypasswordhere time pg_dump --username=postgres --no-password -f /tmp/myfilehere.sql mydatabasehere
pg_dump: [archiver] could not open output file "/tmp/myfilehere.sql": Permiso denegado  
Command exited with non-zero status 1  
0.25user 0.06system 0:02.04elapsed 15%CPU (0avgtext+0avgdata 58064maxresident)k  
0inputs+0outputs (0major+5110minor)pagefaults 0swaps

Pergunta: Por que não consigo escrever em /tmp com o usuário postgres ? Percebendo que o flag pegajoso está definido em /tmp .

    
por Luis Masuelli 08.06.2015 / 19:45

1 resposta

3

O bit pegajoso impedirá que qualquer usuário que não seja o proprietário do arquivo (e proprietário do diretório e raiz) remova / renomeie qualquer arquivo dentro do diretório que contenha um bit adesivo. Se algum usuário não tiver permissão para gravar, ele não poderá criar nenhum arquivo em /tmp ou qualquer outro diretório com bit fixos, o mesmo vale para operações de leitura e execução.

No seu caso, se postgres tiver permissão suficiente para ler / gravar / executar arquivos em /tmp , ele poderá fazer isso. Caso contrário, será necessário definir as permissões apropriadas manualmente.

Exemplo:

drwxrwxrwt   7 root   root    4096 Jun  9 00:41 tmp

$ sudo chmod o-rwx /tmp

drwxrwx--T   7 root   root    4096 Jun  9 00:41 tmp

$ touch /tmp/foo.txt
touch: cannot touch ‘/tmp/foo.txt’: Permission denied

$ sudo chmod o+rwx /tmp

$ touch /tmp/foo.txt

$ ls -l /tmp/
-rw-rw-r-- 1 user user    0 Jun  9 00:50 foo.txt
    
por heemayl 08.06.2015 / 20:42