비대화형으로 루트로 실행되도록 스크립트를 어떻게 설정합니까?

비대화형으로 루트로 실행되도록 스크립트를 어떻게 설정합니까?

실행하려면 다음 스크립트를 설정해야 합니다.루트 사용자로로그인할 때마다:

#!/bin/zsh
truncate -s 0 ~yourstruly/.juniper_networks/network_connect/ncsvc.log

스크립트를 루트로 대화형으로 실행하는 방법을 알고 있지만(예: 를 통해 sudo) 스크립트를 루트로 실행하는 방법을 모르겠습니다.비대화형으로로그인할 때마다.

어떻게 해야 하나요?

FWIW: 스크립트는 현재 권한 6755를 가진 루트가 소유하고 있으며 잘린 파일도 권한 0644를 가진 루트가 소유하고 있지만 스크립트를 실행하면 truncate"권한 거부" 오류와 함께 호출이 실패합니다.

답변1

스크립트 권한은 관련이 없습니다.스크립트의 Setuid 및 setgid 비트는 무시됩니다.Linux 및 대부분의 다른 unice에서.

비밀번호를 지정하지 않고 레이블을 사용하여 이 스크립트를 실행할 수 있도록 sudo를 구성할 수 있습니다 NOPASSWD. sudo터미널에 연결할 필요가 없는지 확인하십시오 .requiretty이 옵션 을 끄세요. 첫 번째 일치 항목이 적용되므로 -tagged 규칙 은 NOPASSWD비밀번호 프롬프트에서 명령을 실행할 수 있는 다른 규칙보다 앞에 있어야 합니다. 따라서 다음을 실행하십시오 visudo.

Defaults !requiretty
kjo ALL = NOPASSWD: /path/to/nc-logs-truncate
kjo ALL = (ALL) ALL

스크립트의 첫 번째 줄을 로 변경합니다 #!/bin/zsh -f. 그렇지 않으면 zsh가 로드됩니다 ~/.zshenv. 이는 바람직하지 않습니다.

이제 귀하의 질문에 대한 답변을 마쳤으니 아마도 이것이 최선의 접근 방식은 아닐 것입니다. 이를 수행하는 쉬운 방법은 chown kjo ~/.juniper_networks/network_connect/ncsvc.log로그 파일이 자신의 소유인지 확인하여 마음대로 자를 수 있도록 하는 것입니다.

더 나은 방법은 로그 파일을 자르는 대신 이동하는 것입니다. 가장 최근 로그를 유지하는 것이 유용한 경우가 많습니다(예를 들어 nc가 실패한 경우 작업 로그와 작동하지 않는 로그를 비교하는 경우). 자신에게 디렉토리에 대한 쓰기 권한을 부여하고(아마도 이미 소유하고 있을 것입니다)

mv -f ~/.juniper_networks/network_connect/ncsvc.log ~/.juniper_networks/network_connect/ncsvc.log.0
touch ~/.juniper_networks/network_connect/ncsvc.log

ncsvc또는 로그를 작성하도록 지시하는 좀 더 유니크한 NC 패키지를 만들고 /var/log해당 로그를 logrotate구성에 포함하세요.

관련 정보