非対話型でrootとして実行するようにスクリプトをどのように設定しますか?

非対話型でrootとして実行するようにスクリプトをどのように設定しますか?

実行するには、次のスクリプトを設定する必要があります。rootユーザーとしてログインするたびに:

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

スクリプトをrootとしてインタラクティブに実行する方法を知っていますが(たとえば経由でsudo)、スクリプトをrootとして実行する方法がわかりません。非対話型ログインするたびに。

どうすればいいですか?

FWIW:スクリプトは現在権限6755を持つルートによって所有されており、切り捨てられたファイルも権限0644を持つルートによって所有されていますが、スクリプトを実行するとtruncate「許可拒否」エラーで呼び出しが失敗します。

答え1

スクリプト権限は関係ありません。スクリプトの Setuid および setgid ビットは無視されます。Linuxと他のほとんどのuniceで。

パスワードを指定せずにラベルを使用してこのスクリプトを実行できるようにsudoを設定できますNOPASSWDsudo端末に接続する必要がないことを確認してください。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設定に含めます。

関連情報