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 .