web-dev-qa-db-ja.com

特定のユーザーから/etc/cron.dailyを実行します

任意のユーザーから/etc/cron.daily/myを実行することは不可能であり、/etc/crontabに従ってrootからのみ実行されることを適切に理解していますか?

代わりにcron scripで特定のユーザーにルート権限をドロップできますか?

Cronジョブを/etc/cron.dに配置することをお勧めしますか?好む:

$ cat /etc/cron.d/my
5 0 * * *  user  test -x /usr/bin/my && /usr/bin/my -cfg /etc/my.cfg
3
gavenkoa

あなたは正しい、/etc/cron.daily(および毎週/毎月など)のジョブは常にユーザーrootとして実行されますが、スクリプト内からユーザーを単純に切り替えて、そのスクリプトをそのように再度呼び出すことができます提供されたすべての引数を含む他のユーザー(cron.dailyジョブには含まれません):

ファイル/etc/cron.daily/my

#!/bin/sh

# If started as root, then re-start as user "gavenkoa":
if [ "$(id -u)" -eq 0 ]; then
    exec Sudo -H -u gavenkoa $0 "$@"
    echo "This is never reached.";
fi

echo "This runs as user $(id -un)";
# prints "gavenkoa"

exit 0;

ユーザーrootとしてスクリプトが開始されると、Sudo -H -u gavenkoaを介してそれ自体を検出し、再実行します。つまり、ユーザーgavenkoaとして。 rootは常にすべてのユーザーに切り替えることができるため、/etc/sudoersに特別なエントリは必要ありません。

execreplacesは、新しいSudo …呼び出しで現在のプロセスを返し、戻りません。そのため、else句は必要ありません。

4
PerlDuck