As permissões do script são irrelevantes. Setuid e setgid bits são ignorados nos scripts no Linux e na maioria dos outros unices.
Você pode configurar o sudo para permitir a execução deste script sem especificar uma senha, com a tag NOPASSWD
. Certifique-se de que sudo
não precise estar conectado a um terminal: turno fora da opção requiretty
. Observe que a regra NOPASSWD
-tagged deve vir antes de qualquer outra regra que permita executar o comando com um prompt de senha, porque a primeira correspondência se aplica. Então, execute visudo
:
Defaults !requiretty
kjo ALL = NOPASSWD: /path/to/nc-logs-truncate
kjo ALL = (ALL) ALL
Altere a primeira linha do script para #!/bin/zsh -f
, caso contrário, o zsh carregará ~/.zshenv
, o que não é desejável aqui.
Agora que respondi a sua pergunta literal, esse provavelmente não é o melhor método. Um chown kjo ~/.juniper_networks/network_connect/ncsvc.log
simples garantiria que o arquivo de log pertence a você para que você possa truncá-lo à vontade.
Melhor, mova o arquivo de log em vez de truncá-lo: geralmente é útil manter os logs recentes (por exemplo, comparar os logs de trabalho aos logs que não funcionam se nc falhar). Dê a você mesmo permissão de escrita no diretório (você já pode possuir) e
mv -f ~/.juniper_networks/network_connect/ncsvc.log ~/.juniper_networks/network_connect/ncsvc.log.0
touch ~/.juniper_networks/network_connect/ncsvc.log
Como alternativa, faça um pacote NC mais unixy, diga a ncsvc
para gravar seus logs em /var/log
e inclua seu log na configuração logrotate
.