[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Rodar um cgi como usuario diferente do www-data



Ola,
Estou desenvolvendo uma aplicação web de uso interno em que e necessário fazer o upload de um arquivo.
A parte que processar o upload esta em php (devido a ser mais fácil), e funcionando.
O problema e que, o arquivo precisa ser gravado ou ter as permissões de um outro usuário, que não seja o www-data:www-data.
Pelo que me lembre, isso pode ser feito via um suid wrapper.
O webserver e o lighttpd.
Achei duas soluções possíveis:
O Execwrap http://stbuehler.de/debianserver/execwrap.html
Não tem pacote debian, precisaria compilar.
E o pacote debian sbox-dtc, e esse que estou tentando configurar.
O problema e que as configurações exemplo são para o apache, e estou usando o lighttpd.
Pelo que entendi, preciso reescrever a url de /cgi-bin/algo.php para /cgi-bin/sbox/algo.php
E o .php ser interpretado pelo sbox.
A configuração ficou assim:

alias.url += ( "/cgi-bin/" => "/usr/lib/cgi-bin/" )

url.rewrite = ( "^/cgi-bin/(.*)" => "/cgi-bin/sbox/$1" )

$HTTP["url"] =~ "^/cgi-bin/" {
        cgi.assign = ( ".php" => "/usr/lib/cgi-bin/sbox" )
}

Só que, vem vez de executar o sbox, e feito o download arquivo sbox, com o nome do script php.
Ou o sbox reporta o seguinte no log:
[Mon Sep 21 11:23:40 2015] sbox[22024]: Please specify the script to run with the format: "/cgi-bin/sbox/script/to/run".

O exemplo para o apache e esse:

<VirtualHost 10.0.0.1:80>
        ServerName www.example.com
        ScriptAlias /cgi-bin /usr/lib/cgi-bin
        AddHandler php-cgi-wrapper .php
        Action php-cgi-wrapper /cgi-bin/sbox
        AddHandler python-cgi-wrapper .py
        Action python-cgi-wrapper /cgi-bin/sbox
        AddHandler ruby-cgi-wrapper .rb
        Action ruby-cgi-wrapper /cgi-bin/sbox
        AddHandler ruby-cgi-wrapper .pl
        Action ruby-cgi-wrapper /cgi-bin/sbox

        Options +ExecCGI
        DocumentRoot /var/www/example.com/html
        RewriteEngine on
        RewriteCond %{REQUEST_URI} ^!/cgi-bin.*
        RewriteRule ^(.*) /cgi-bin/sbox/$1 [PT]
        DirectoryIndex index.php index.cgi index.pl index.py index.rb index.htm index.html index.php4
</VirtualHost>

Sugestões de como fazer o sbox rodar no lighttpd?

Ou, outra solução para gravar o arquivo.

Outras opções que já considerei, além do wrapper.
fast-cgi (um daemon a mais rodando)
ftp (precisa de um ftpd)
scp (autenticação por chave)
samba (php tem cliente?)
cron copiando o arquivo para o destino final e com as permissões necessárias. (atraso na disponibilidade do arquivo)
mudar o grupo que o ligthttpd roda. (segurança)
Além da mais trabalhosa, um httpd (C, perl, python, php, etc) especifico para a tarefa.


Ainda não tentei com o Execwrap.


--
Paulino Kenji Sato

Reply to: