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 .