O Apache CGI Script não pode sobrescrever um arquivo em um diretório em que ele possui permissões completas

2

Tendo um problema estranho em uma caixa do Solaris 10. Eu tenho um script cgi (perl) que precisa substituir um arquivo. Nós não temos o suexec rodando no Apache para que o diretório de destino tenha acesso completo (777) para que o Apache possa gravar nele.

O problema é que o script CGI é capaz de gravar um novo arquivo no diretório, mas não sobrescrever um arquivo existente.

**Directory permissions for file destination:** 

drwxrwxrwx 146 myuser white      32768 Jun  2 20:46 dest-dir

**File Permissions of file that needs to be over written:** 

-rw-r--r--   1 myuser white      0 Jun  2 20:50 cgitestfile

Alguém conhece uma solução simples para resolver isso?

Parece que o apache só pode sobrescrever um arquivo se for o proprietário dele.

    
por user770395 02.06.2011 / 23:24

3 respostas

1

-rw-r - r-- 1 myuser branco 0 2 de junho 20:50 cgitestfile

Você só tem permissões de gravação no arquivo para o proprietário (myuser) O apache está sendo executado como usuário myuser? ou como apache ou www.data ou algo parecido? Talvez você precise adicionar acesso de gravação para outro?

    
por 02.06.2011 / 23:30
1

No Solaris 10, o padrão é que o apache seja executado como User nobody , Group nobody (verifique as diretivas /etc/apache/httpd.conf User e Group ). Dado o seu exemplo, o apache não poderá gravar no cgitestfile , pois não tem acesso de gravação a ele.

Altere o proprietário: grupo de dest-dir e os arquivos que você deseja que o apache substitua por nobody

    
por 03.06.2011 / 00:10
0

Corri para isso devido à configuração do "SELinux". Se o SELinux estiver em execução, você precisa habilitar explicitamente a capacidade do Apache de gravar em arquivos. Para usar isso, você também precisa definir permissões adicionais nos diretórios e arquivos para os quais você está concedendo acesso de gravação.

Para determinar se o SELinux está ativado, execute:

sestatus

Para ativar as booleanas do SE que permitiram que o cgi gravasse em arquivos:

sudo setsebool -P allow_httpd_anon_write 1
sudo setsebool -P allow_httpd_sys_script_anon_write 1

Então, finalmente para definir o arquivo / diretório "tipo de contexto de segurança SELinux" para um arquivo / diretório de leitura / gravação "sistema" (você também pode torná-lo um tipo "público" - Google "chcon" para informações), execute isso:

sudo chcon -R -t httpd_sys_rw_content_t /some/write/path

(Mude / algum / escreva / caminho para o seu caminho.)

    
por 16.12.2015 / 23:00