como posso configurar o Apache para que os scripts PHP sejam executados com permissões do proprietário do script?

1

Eu tenho um servidor web Apache. Eu tenho alguns scripts PHP nele. Os scripts são executados como o usuário www-data - é como o usuário que executa o Apache. Eu quero configurar o Apache para que os scripts PHP sejam executados com permissões do proprietário do script. No passado eu poderia usar suphp, mas agora ele é órfão e morto, então o Debian decidiu removê-lo ( porque eu não tenho suphp no teste do debian ). Nesta situação, o que devo usar em vez disso? Existe algum módulo morto do Apache fazendo o mesmo?

    
por user983447 01.07.2015 / 12:50

2 respostas

2

Eu não usei PHP, mas eu usei o FastCGI para realizar algo similar com outros lanaguages, e essa é a abordagem que eu recomendaria, especialmente desde que o PHP 5.3.3 e o mais novo tem uma implementação embutida, PHP-FPM . Você pode encontrar documentação sobre como usar isso no site oficial do PHP: FastCGI Process Manager (FPM) .

Isso tem muitos recursos, mas o mais relevante é que os funcionários podem ter IDs de usuário e grupo diferentes (e diferentes php.ini s, para esse assunto).

    
por 02.07.2015 / 22:27
0

Você não pode. O Apache é executado sob uma conta de baixo privilégio - geralmente chamada apache ou httpd - de propósito. A única maneira de o Apache ser configurado como você propõe é se ele for executado como root , o que tornaria o Apache um enorme risco de segurança.

Você precisará usar o recurso de bit suid bit do sistema operacional para obter o efeito desejado.

Você não diz qual SO está usando; isso importa.

Alguns SOs sabem como executar scripts (significando qualquer coisa com uma linha shebang no topo neste contexto ) com o bit suid definido, com segurança. Isso inclui BSDs modernos e algumas variantes do SVR4.

Nesse caso, a solução é simples. Primeiro, mova os comandos que precisam ser executados como outro usuário para um script separado com uma linha PHP shebang no topo:

#!/usr/bin/php
your commands here

Em seguida, defina-o para ser executado como o outro usuário:

$ sudo chown otheruser myscript.php
$ sudo chmod u+s otheruser myscript.php

Se você estiver executando o Linux, há uma excelente chance de que o sistema operacional bloqueie os scripts. Você pode encontrar referências a soluções alternativas como perl -wT , mas alguns sistemas operacionais ou modos de configuração nesses sistemas operacionais também o bloqueiam. Esse não é o lugar para catalogar todas as soluções alternativas e todas as maneiras pelas quais essas soluções alternativas podem ser bloqueadas. Basta dizer que, se o seu sistema operacional não tiver especificamente um recurso principal que permita a execução segura de scripts suid, você não poderá fazê-lo.

A solução padrão é criar um wrapper suid em C, assim:

int main(int argc, char* argv[])
{
     execv("/full/path/to/my-script.php", argv);
}

Em seguida, execute esses comandos nesta ordem para criar o wrapper e defina suas permissões para permitir que ele seja executado como o outro usuário:

$ make my-script-wrapper
$ sudo chown otheruser my-script-wrapper
$ sudo chmod u+s my-script-wrapper

(O pedido é importante porque, toda vez que um arquivo com o bit suid é alterado, a maioria dos SOs limpa o bit suid. Não há ordenação alternativa dos três comandos que farão o que você deseja.)

Agora, quando você executar my-script-wrapper , ele será executado como otheruser , de modo que, quando lançar my-script.php , esse script será executado com os privilégios de otheruser .

O wrapper é intencionalmente extremamente simples, para evitar a introdução de falhas de segurança. Eu posso pensar em várias maneiras de torná-lo mais complicado e útil, mas cuidado com isso que você compra um pilha inteira de problemas .

Você pode querer usar apenas sudo . Ele pode ser configurado para executar um script como um usuário diferente de root e para ignorar a necessidade de uma senha.

    
por 01.07.2015 / 13:09