🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

1回答

27875閲覧

crontabでの実行ユーザーと権限について

enigumalu

総合スコア192

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2017/08/23 02:41

crontabに実行するシェルを設定した場合そのshの実行ユーザーは誰になるのでしょうか?
確認方法を教えていただきたいです。
パーミッション644で実行できる認識なのですが他のファイルは755や777になっているため、rootが実行した場合
下記のshの所有者が私の場合実行できないのでしょうか?実行する環境がなく困っています。

00 01 * * * /home/common/bin/test/export_01.sh > /dev/null 2>&1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

2つの物事を一度に解釈されようとしています。

まず crontab ですが /etc/cron.d (cron の実装により変わります) などを直接変更せずに

$ crontab -e

を実行されたのなら、それはそのコマンドを実行したユーザが実行ユーザになります。

パーミッション644で実行できる認識なのですが他のファイルは755や777になっているため、rootが実行した場合

下記のshの所有者が私の場合実行できないのでしょうか?実行する環境がなく困っています。

またこれはファイルのパーミッションの話です。実行権限はマスクのビットを確認します。例えば 640 であれば

6: 自信
4: 同じグループのユーザ
0: その他のユーザ

となっており、かつその値は

4: 参照権限
2: 書き込み権限
1: 実行権限

の論理和の値となります。6 は 2(書き込み) と 4(参照) の論理和、つまり「自信は参照と書き込み」を許可し「同じグループのユーザは参照権限のみ」を許可し、他のユーザには何れも許可しないという権限設定を行ったファイルの事を意味します。つまり実行は許可されていません。実行されたいのであれば

$ chmod 755 /path/to/the/file

の様にマスク値を直接指定して実行するか

$ chmod +x /path/to/the/file

実行権限だけ付与する様に実行します。その他のユーザに実行許可を付けるかはご自身で検討下さい。

質問の内容の、crontab を設定したユーザがそのファイルを実行できるかという話ですが 750 は同じグループであれば実行可能です。これは 5 が 1(実行) と 4(参照) の論理和だからです。
もしコマンドがファイルを出力する様な物なのであれば、出力ディレクトリもグループで書き込み許可を付けておくべきです。その場合、実行ユーザが所有者となりますのでご注意ください。

投稿2017/08/23 02:54

編集2017/08/23 04:06
mattn

総合スコア5030

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

enigumalu

2017/08/23 05:31

cronはユーザーrootグループrootで行われていて、shの実行他は1限管理課したユーザー便宜的にユーザーctグループctとしていたためクーロンからshを実行しようとすると権限644で実行できなかったという認識であっていますでしょうか?
mattn

2017/08/23 05:45 編集

実行の仕方によります。 sh /path/to/script.sh の様に実行しているのであれば 644 でも実行可能です。 /path/to/script.sh の様に shebang を付けた状態で実行されておられるなら 755 の権限でないと起動できません。前者であれば 644 で実行できなかったという事はないと思います。
enigumalu

2017/08/23 06:13 編集

完全に後者です 設定ファイルexport_01.shから実行ファイルを./exep_1.shのように読んでいます ちなみにユーザーctグループctで作成した場合とグループのみ異なる場合も644でもshコマンドなしで実行できますでしょうか?
mattn

2017/08/23 06:17

別グループでも実行出来る様にしたいのであらば 755 にすべきです。回答に書いた様にこの場合は3つめの数字を見ます。755 であれば最後の 5 です。 R(4):参照できないとだめ(スクリプトファイルが読める) W(2):スクリプトファイルは書き込めなくてもよい X(1):実行できないといけない ですので 4 と 1 の論理和、つまり 5 であればいいのです。
mattn

2017/08/23 06:17

もし現状ファイルが 644 なのであれば cron の方も動いてないと思いますよ。
enigumalu

2017/08/23 06:23

ありがとうございます。再調査していたんですがcrontabに記載されているshが755(export_01.sh)でそこから644(exep_1.sh)を読んでいました
mattn

2017/08/23 06:34

exep_1.sh は実行するスクリプトでしょうか?それとも export_01.sh で使用する設定類が書かれたファイルでしょうか。前者であれば exep_1.sh に実行権限を付けて下さい。 chmod 755 /path/to/the/exep_1.sh を実行して下さい。後者であれば export_01.sh で exep_1.sh を起動していると思われる箇所を以下の様にして下さい。 . /path/to/the/exep_1.sh ※先頭にドットと空白がある事に注意。
enigumalu

2017/08/23 07:05

前者のため権限を与えます。すいません最後に1つshをつけている場合とつけない場合で違うのは何が異なるのでしょうか?全てshは記載されてないのですが理由がわからず… ./path/to/script.sh
mattn

2017/08/23 07:23

この会話の中で出てきた2つの実行方法を以下にまとめておきます。 1. "sh /path/to/script.sh" プログラム sh の引数としてスクリプトファイルを指定しているので、shebang が無くても動作します。実行権限がなくても起動出来ます。いわゆる python foo.py とやっているのと同じです。 2. "/path/to/script.sh" 実行権限が必要です。また shebang も必要です。 shebang とは .sh ファイルの先頭についている #!/bin/sh もしくは #!/bin/bash という行の事で、これがあると UNIX はそのコマンドを使って対象のファイルを実行する様になっています。
enigumalu

2017/08/23 07:39

なるほど大変勉強になりましたありがとうございまた
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問