Executando um script de shell com os privilégios de seu dono

1

Em um servidor Debian (5.0.3) eu tenho um usuário svnsync que possui um script de shell:

-rwsrwsr-x 1 svnsync users  119 Dec 21 13:45 mirror-svn.sh

Gostaria que todos no grupo users pudessem executar este script com os privilégios de svnsync . Isso está relacionado ao acionamento dos comandos " svnsync synchorize " dos scripts de pós-commit; citando svnbook :

[...] you might wish to have your primary repository push changes to one or more blessed mirrors as part of its post-commit and post-revprop-change hook implementations. This would enable the mirror to be up to date in as near to real time as is likely possible.

De qualquer forma, não consigo trabalhar com o SUID, aparentemente porque Linux / Debian é um dos sistemas Unix modernos referenciados a aqui :

Some modern UNIX systems ignore the SUID and SGID bits on shell scripts for this reason.

Esta pergunta do SF sugere a mesma coisa: "você não pode usar o SUID root para scripts de shell ". Então, aqui está minha pergunta de acompanhamento:

Se eu realmente realmente quiser executar um script com os privilégios de seu proprietário, independentemente de quaisquer riscos potenciais, há alguma maneira livre de problemas para fazer isso? o script em um binário era sugerido , mas eu prefira um modo mais simples, se for possível. Que tal chamar o script de shell de, e. um script em Perl (eu realmente tentei isso, mas não consegui fazê-lo funcionar)? Adicionar todos ao arquivo sudoers também não é uma boa opção .

Atualização : funcionou instalando perl-suid como 0x89 sugerido e usando um script de wrapper Perl como o seguinte.

#!/usr/bin/suidperl -T
$ENV{PATH} = "/bin:/usr/bin";
system("/path/to/mirror-svn.sh");

chmod +s está definido neste script de wrapper. Observe também que $ENV{PATH} precisa ser definido no script; caso contrário, você receberá uma queixa de que é inseguro .

    
por Jonik 21.12.2009 / 15:00

1 resposta

2

Em versões mais recentes do debian, existe um pacote chamado perl-suid que endereça este problema para scripts perl, talvez também esteja disponível em 5.0.3.

O problema de segurança de fornecer scripts ao bit SUID não se limita a scripts de shell, mas afeta qualquer idioma interpretado. É por isso que sua tentativa inicial de chamar o script do perl não funcionou. Parece que é possível definir o bit SUID em scripts no solaris, mas eu acho que como você não quer escrever um wrapper C em torno do seu script, migrar para o solaris não é uma opção para você? ; -).

    
por 21.12.2009 / 15:18