web-dev-qa-db-ja.com

ルートcronジョブとは別のユーザーとしてコマンドを実行するにはどうすればよいですか?

NFSの制限とCronの制限の間に立ち往生しているようです。

そのため、シェルスクリプトを実行しているroot cron(RHEL5上)があります。これは、特に、NFSマウントを介していくつかのファイルをrsyncする必要があります。また、NFSマウント上のファイルはモード700のApacheユーザーが所有しているため、rsyncコマンドを実行できるのはApacheユーザーのみです。rootとして実行すると権限エラーが発生します(NFSはまれなケースであり、rootユーザーが全能ではありませんか?)

Rsyncを手動で実行したい場合は、「Sudo -u Apache rsync ...」を使用できますが、cronでSudoが機能しません。「Sudo:申し訳ありませんが、Sudoを実行するにはttyが必要です」と表示されます。

スクリプト全体をApacheとして(つまり、Apacheのcrontabから)実行したくないのは、スクリプトの他の部分がrootを必要とするためです。つまり、Apacheとして実行する必要があるのはその1つのコマンドだけです。また、ファイルのモードを変更したくないのは、他のアプリケーションに大幅な変更が加えられるためです。

Cronから「Sudo-uApache」を実現する方法はありますか?

ありがとう!奪う

21
rob

su --Shell =/bin/bash --session-command = "/ path/to/command -argument = something"ユーザー名&

私のために働く(CentOS)

17
Kitty

suの代わりにSudoを使用します。

su -c "rsync ..." Apache
7

RHELのデフォルトでは、ターミナル(tty)のないプロセスではSudoは許可されていません。それは/etc/sudoersで設定されます。

次の手順で、特定のユーザーにttyなしのSudoを許可できます。

https://serverfault.com/questions/111064/sudoers-how-to-disable-requiretty-per-user

3
Chris

Apacheとしていじることを永続的に可能にしたい場合:

chsh Apache

これにより、ユーザーのシェルを変更できます

1
Jaap

/ etc/crontabに配置し、ユーザーフィールドにrootではなくApacheを指定します

1
Robert Foreman