Permitir que o usuário execute um script de shell sem ver seu conteúdo?

1

Gostaria de ter um gancho hg que envia e-mails usando uma conta do Gmail. Obviamente, eu não quero que ninguém possa ler o script de envio de e-mail, exceto eu ou root, já que ele tem uma senha, então aqui está o que eu tentei:

-rwsr-xr-x  1 james james   58 Feb 18 12:05 incoming.email.sh
-rwx--x--x  1 james james  262 Feb 18 12:04 send-incoming-email.sh

onde incoming.email.sh é o arquivo executado como o gancho:

#! /bin/bash
/path/to/send-incoming-email.sh

No entanto, quando tento executar como outro usuário, recebo o erro:

/bin/bash: /path/to/send-incoming-email.sh: Permission denied

O arquivo send-incoming-email.sh funciona bem quando eu corro como eu mesmo.

É o que estou tentando fazer, ou o setuid não se propaga para comandos executados a partir de um script de shell?

O sistema é o Ubuntu 10.04.2 LTS.

    
por James 18.02.2011 / 13:15

2 respostas

3

Se você precisa que sua solução funcione como está, um simples truque seria usar um programa C curto em vez de um script de shell:

int main(){
setuid(geteuid());
system("/path/to/send-incoming-email.sh");
}

E tenha esse setuid, evitando assim a condição de corrida e, ao mesmo tempo, permitindo que você passe a execução do script como root.

Esta não é a melhor solução, de longe, mas resolverá o problema conforme descrito.

    
por 18.02.2011 / 15:07
2

O Linux irá ignorar o setuid bit para shell scripts para evitar possíveis condições de corrida.

A maneira "correta" de enviar e-mail em sistemas Unix / Linux é configurar um MTA como Postfix , Exim4 ou Sendmail e deixe lidar com a confusão de autenticação SMTP. Existem também MTAs "somente de retransmissão" - esmtp , msmtp , ssmtp . Todos estes podem fazer a retransmissão SMTP ("smarthost") com autenticação, por exemplo, através de servidores do Gmail. Torna-se mais complicado em uma máquina multiusuário, mas ainda é possível.

(Quando um MTA é configurado, o envio de um email é feito passando os dados para /usr/sbin/sendmail rcpt@address .)

    
por 18.02.2011 / 14:46