Eu posso criar um arquivo mas não consigo ler dele

2

Eu tenho usado o linux por um tempo, mas sempre tive acesso root, então os problemas de permissão não eram grandes problemas. Mas agora eu não tenho acesso root e isso está me enlouquecendo.

Eu tenho acesso ssh a um servidor web. Isso significa que eu tenho acesso ao meu usuário gabitoptalentro e também ao usuário apache através de backticks do PHP. Eu tenho problemas com alguma pasta tmp ( não /tmp ). ls -l diz isto:

drwxrwxrwx  2 gabitoptalentro toptalentro   4096 Jun 15 19:15 tmp

Quando tento touch um arquivo ( touch tmp/QQ ) para criá-lo nesta pasta, ele funciona (o arquivo é criado), mas ele não aparece em ls -l . Aqui está a entrada da minha conta ssh :

-rw-r--r-- 1 apache apache   0 Jun 15 19:37 QQ

Portanto, o arquivo realmente pertence a apache , mas apache não pode lê-lo.

Eu também tentei chown da pasta inteira para apache , mas isso não me permite ( chown: changing ownership of ...: Operation not permitted ). Wtf, isso não me deixa dar minhas próprias pastas para outra pessoa?

Então, você tem alguma ideia de como eu posso sair dessa confusão e ajudar apache a ler seus próprios arquivos?

    
por Gabi Purcaru 15.06.2011 / 18:43

2 respostas

1

É possível que o servidor esteja configurado para usar listas de controle de acesso, que é uma extensão das permissões normais de arquivos Unix ou funções baseadas no SELinux.

Você pode verificar a ACL no diretório como este ...

> getfacl /path/to/your/tmp

Você deve ter algo assim se tudo estiver normal ...

# file: tmp
# owner: apache
# group: apache
user::rw-
group::r--
other::r--

Se você vir linhas como as seguintes ...

user:someotheruser:---
group:someothergroup:---

... você está lidando com um arquivo / dir da ACL. Como você provavelmente pode imaginar, isso permite que você defina direitos para usuários e grupos específicos. Você pode alterá-los (permissões permitindo) com o comando setfacl . Há também uma variedade de padrões possíveis na ACL no diretório que faria com que novos arquivos fossem criados com permissões inesperadas.

Se isso não for feito para você, você pode estar lidando com segurança baseada em funções no SELinux. Execute o comando getenforce . Se estiver configurado para aplicar o Apache, só poderá ler arquivos no contexto HTTP.

> /usr/sbin/getenforce
Enforcing

Você precisaria chcon (alterar contexto) seu diretório tmp ...

> chcon -R -t httpd_sys_content_t /path/to/your/tmp

Aqui está uma boa FAQ do SELinux

Espero que ajude!

    
por 16.07.2011 / 10:52
0

As permissões para arquivos recém-criados são definidas com umask . Mas o umask neste caso parece OK.

-rw-r--r-- 1 apache apache 0 Jun 15 19:37 QQ

Os sinais 2,3,4 são permissões para o proprietário e são rw- , o que significa que o apache pode ler e gravar esses arquivos.

Verifique se você está logado como apache quando está tentando ler e escrever.

    
por 15.06.2011 / 18:50