Como permitir que o usuário do servidor da Web acione o script que precisa de permissões sudo?

1

É 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 permissions?

Eu só quero que o usuário lighttpd seja capaz de acionar esse script com sudo de permissões.

O script, vamos chamá-lo de 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ões 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 é aí que a necessidade de usar sudo vem de ( chown , chmod e setfacl ).

O motivo pelo qual eu gostaria de usar uma interface da 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 simples adicionar uma entrada em /etc/sudoers para permitir que o usuário lighttpd executasse o createFolder.sh sem senha. Parece que eu estava errado quando recebi o seguinte erro:

sudo: unable to mkdir /var/db/sudo/lighttpd: Permission denied

We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things:

1) Respect the privacy of others.
2) Think before you type.
3) With great power comes great responsibility.

sudo: no tty present and no askpass program specified

Se fosse possível definir o script para sempre ser executado como um usuário com as permissões corretas, ele seria classificado, mas não consegui encontrar como fazer isso ou se é possível.

Como nota a parte, aprendi Linux por conta própria e, mesmo que me sinta confiante em minhas habilidades, não sou especialista e estou sempre procurando melhorar.

Estou executando uma caixa do CentOS 7.

EDIT : Eu resolvi o problema usando o inotify para acionar meu script createFolder.sh quando um arquivo de texto é modificado. Veja a resposta correta e seus comentários. Obrigado por me apontar na direção certa, pessoal.

    
por Hugo Paiva 19.10.2016 / 17:05

1 resposta

0

Você deve ter o script raiz "pull" do regular, em vez de ter o último "push" para o primeiro. Como exemplo ilustrativo:

  1. Crie uma tarefa cron que verifique uma lista de pastas a serem criadas em um arquivo de texto
  2. Faça com que o script do usuário lighttpd acrescente a pasta desejada a esse arquivo de texto

Você pode fazer isso de maneira mais elegante com um sistema de enfileiramento / mensagens, mas isso é com você.

    
por 19.10.2016 / 18:21