web-dev-qa-db-ja.com

crontabを使用してスクリプトを誰も実行しないようにする方法

これはCentOSマシン上にあります。毎日特定の時間に、ユーザーnobody(または最小限の権限を持つユーザー)としてスクリプトを実行しようとしています。ここに誰もいません:

[root@CentOS % ~] grep "^nobody" /etc/passwd  
nobody:x:99:99:Nobody:/:/sbin/nologin  

これが私がrootのcrontabで試したことです:

環境変数の設定Sudo_USER = nobody
15 17 * * * Sudo -u nobody/bin/bash /usr/local/bin/bashscript.sh
15 17 * * * su -c /usr/local/bin/bashscript.sh nobody

可能であれば、ルートのcrontabにcrontabエントリを保持したいと思います。また、これらの設定に依存する可能性のある他の何かを壊したくないので、ユーザーの誰のアカウントにもだまされたくないです。私は、別の非特権アカウントを作成し、それが問題である場合は、実際のシェルを提供することに反対していません。

また、少し当惑していることも認めます。 google-fuの茶色の帯があまり役に立たないことを除いて、これは日常の問題だと思います。

3
pica

crontab -eまたはcrontab -lのコンテンツを投稿していると思いますか?

これは、ユーザー「root」に属するcrontabファイルであり、このファイルは、コマンドを実行するユーザーの指定をサポートしていません(通常、個人ジョブのスケジューリングに使用されるファイルであるため) 。
代わりに/etc/crontabを見てください。これは、システム全体のcrontabであり、追加のフィールドserフィールドがあります。このような行を/etc/crontabに追加してみてください。

15 17 * * * nobody /usr/local/bin/bashscript.sh
5
Simon Lindgren

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

私のために動作し、「このアカウントは現在利用できません」をスローしません。ユーザーが有効なログインシェルを持っていない場合でもエラー

2
Kitty

実際にはclawspoon答えに私を導きますが、それが上に浮かぶことができるように、私自身のより完全な答えを作成させてください。

それがどれほど一般的かはわかりませんが、Ubuntuのオンラインドキュメントの中には、アップグレード時に/ etc/crontabを上書きできると書かれているものがあります。推奨される解決策は、/ etc/cron.d/anythingというファイルを作成することです(どこでも可能です)。 、まあ、何でも。任意のファイル名)

/etc/cron.d/nobodyというファイルを作成し、非特権ユーザーとしてスクリプトを実行します。行の例:

# run the following every day at 01:02 AM
02 01 *  *  *  nobody /usr/local/bin/script-to-run-as-nobody.sh

現在、毎日のcrontabジョブはすべてそこから実行されているため、他のユーザーがフォローできるようにrootのcrontabにコメントを付けました。正確にはベストプラクティスではありません。

また、テストの目的で、最初にコマンドラインからジョブを実行する必要があります。私はSudoの特権を持っているので、以下を使用します。

$ Sudo -u root Sudo -u nobody /usr/local/bin/script-to-run-as-nobody.sh

そのスクリプトを/ dev/stderrまたは/ dev/stdoutに出力する必要がある場合は、次のようにします。

$ chmod o+w /dev/ttyp1

そして行う:

$ chmod o-w /dev/ttyp1 

テストが終了したら、だれかが端末画面にジャンクを送信しないようにします。 (実際に使用している端末は/ dev/tty1とは異なる場合があるため、$ ls -ltr/dev/tty * | grep usernameを実行して、どちらがあなたのもの)。

1
pica

実際の答えの代わりに回避策:

Crontabにコメントを追加できます

**#see crontab -u nobody -l for something that runs everyday at 1:15 AM**

次に、ユーザー「nobody」crontabにエントリを追加するだけです。私が使用した:

**15 1 *  *  *   /usr/local/bin/script.sh #comment**
0
pica

回避策#2

/ etc/passwdにログインシェルを持つ非特権ユーザーを作成できます

たとえば、「somebody」というユーザーを作成し、Sudoを拒否しますが、シェルを提供します。

次に、rootのcrontabで以下が機能するはずです。

15 1  *  *  *  su -c /usr/local/bin/bashscript.sh somebody

ただし、clawspoonによる/ etc/crontabの回答の方が好きです。

0
pica