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