É possível fazer com que o usuário do servidor web, lighttpd
no meu caso, acione um script específico que precisa ser executado com sudo
permissões?
Eu só quero que o lighttpd
usuário seja capaz de acionar esse script com sudo
permissões.
O script, vamos chamá-lo createFolder.sh
, cria uma pasta a partir de um modelo no nível superior de um compartilhamento. Os usuários não têm permissão de gravação no nível superior do compartilhamento, mas devem ter permissão de gravação na estrutura de pastas recém-criada. Portanto, o script configura as permissões corretas nas subpastas e é daí que sudo
vem a necessidade de usar ( chown
, chmod
e setfacl
).
A razão pela qual eu gostaria de usar uma interface web para isso é para que os usuários possam inserir os dados para o nome da pasta e as configurações que definirão a estrutura exata da pasta.
Achei que seria tão simples quanto adicionar uma entrada /etc/sudoers
para permitir que o lighttpd
usuário executasse createFolder.sh
sem senha. Parece que eu estava errado quando recebo o seguinte erro:
sudo: não foi possível mkdir /var/db/sudo/lighttpd: Permissão negada
Esperamos que você tenha recebido a palestra habitual do administrador do sistema local. Geralmente se resume a estas três coisas:
1) Respeite a privacidade dos outros.
2) Pense antes de digitar.
3) Com grande poder vem uma grande responsabilidade.sudo: nenhum tty presente e nenhum programa askpass especificado
Se fosse possível definir o script para sempre ser executado como um usuário com as permissões corretas, isso resolveria o problema, mas não consegui descobrir como fazê-lo ou se é possível.
Como observação lateral, aprendi Linux sozinho e, mesmo que me sinta confiante em minhas habilidades, não sou especialista e estou sempre em busca de melhorar.
Estou executando uma caixa CentOS 7.
EDITAR: Resolvi o problema usando o inotify para acionar meu createFolder.sh
script quando um arquivo de texto é modificado. Veja a resposta correta e seus comentários. Obrigado por me apontar na direção certa, pessoal.
Responder1
Você deve fazer com que o script raiz "puxe" do regular, em vez de fazer com que o último "empurre" para o primeiro. Como exemplo ilustrativo:
- Crie um cron job que verifique uma lista de pastas a serem criadas em um arquivo de texto
- Faça com que o script do usuário lighttpd anexe a pasta desejada a esse arquivo de texto
Você pode fazer isso de maneira mais elegante com um sistema de filas/mensagens, mas isso depende de você.