sudoコマンドを使用してcronジョブを実行する方法


118

sudoコマンドが必要なcronジョブを実行することはできますか?

好む:

 sudo rm somefile

Sayem Siamへようこそ、この質問に対する回答をご覧くださいaskubuntu.com/questions/2368/how-do-i-setup-cron-job。私はあなたの質問がここAU前に尋ねられたと思うので
-stephenmyall

1
私はパスワードを必要とsudoを実行しようとしていますが、どのように私は、cronのファイルからパスワードをGIVすることができます
sayemサイアム

3
@sayemsiam sudoを置く必要はありません。ルートcrontabを編集するだけです。
Braiam

この回答をご覧ください。
サンパブロクパー

回答:


240

これがどれほど悪い考えなのかは説明しません。簡単に言えばsudo、crontab で実行するには、パスワードをプレーンテキストのどこかに保存する必要があります。

それは悪い考えです。


以下は、cronを介して管理タスクを実行する推奨方法です。ルートのcrontabを変更する場合、crontabに実際に書き込む必要はありませんsudo

ルートのcrontabを使用する

次のコマンドを実行します。

sudo crontab -e

これによりrootのcrontab が開きます。とにかくsudo呼び出されるので、このコンテキストでコマンドを実行する必要はありませrootん。

したがって、ルートのcrontabに次を追加するだけです。

@hourly rm somefile

これで、絶対に安全でなく、パスワードでリスクを取りたい場合は、次のコマンドを実行すると、独自のcrontabからコマンドが実行され、のプロンプトに従ってパスワードが自動的に入力されsudoます。

繰り返しますが、これは推奨されません


独自のcrontabで、次のようにコマンドを記述します。

@hourly echo "password" | sudo -S rm somefile

ここでの明らかな欠点は、もし誰かがあなたのcrontabにアクセスした場合、パスワードは平文で読めるということです。

これはすべきではありません。


1
嬉しいです!あなたが残したセキュリティホールに注意してください。彼らはあなたに出没するために後で戻ってくるかもしれません。
サーチャーロ

1
@SirCharloなぜ使用rootのユーザーのcrontabの代わりに、システム全体のcrontab /etc/crontab
エリアケイガン

1
@Elijahどうして?
サーチャーロ

2
この答えは、sudoersパスワード要件のないsudoグループのように、ファイルで利用できる微妙な点を明らかにするため、マークを逃しています。
ブレント

非常に有用な点、多大な助けをありがとう。
ナセルマンスーリ

33

cronディレクトリ(/etc/cron.*)の1つからスクリプトを配置する場合、sudoがrootとして実行されているため、sudoを使用する必要はありません。

crontabを使用している場合は、ルートのcrontabを使用する必要があります。これにより、rootとして実行され、sudoも必要ありません。

sudo crontab -e

1
また、コマンドを/etc/cron.hourly/somethingに配置します。それがこれらのディレクトリの目的です。
ジョンSグルーバー

3
いいえ。/etc/cron.SOMETHING/SCRIPTに入れることはできますが、私は両方を行いません。どちらもおおよそ同じ機能を提供しますが、crontabを使用することで、実行の頻度/実行時間に対してもう少し強力になります。
tgm4883

1
代替手段としてそれを意味することを明確にすべきでした。ありがとう。
ジョンSグルーバー

3

ターミナルで次のコマンドを実行します

sudo visudo

ファイルの最後に次の行を追加しました。

vidyadhar  ALL= NOPASSWD: /bin/rm

上記の例では、vidyadharがユーザー名であり、vidyadharを介してrmコマンドを実行している場合、パスワードを要求しません。


17
うーん..そして、任意の悪意のあるコマンド、のようなsudo rm -rf 'slash'そのコマンドを実行していないというユーザーから実行、)、..私は、いや、それは危険な感じ、知らないパスワードを必要としないのでしょうか?
サーチャーロ

わかった。あなたのアプローチは良いです。しかし、他のユーザーに特定のサービスを停止/開始する権利を与えるために上記のアプローチを使用しています。
-Vidyadhar

24
これは非常に悪い考えです。これをしないでください。
bkanuka 14年

2
おそらくvidyadhar ALL= NOPASSWD: /bin/rm somefileより安全だろう。
Wernfried Domscheit

これはひどい考えです。あなたは与えたブランケットのsudo権限を RMに。代わりに、コマンドにrmなどを含めてコマンドにスクリプトにsudoパーミッションを付与し、実行可能にしてから、そのスクリプトにsudoパーミッションを付与します。 <username> ALL=(ALL) NOPASSWD: /home/<username>/bin/<script>、これははるかに安全です。
RJ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.