🍺

cron万事屋話

2021/12/02に公開

きっかけ

Spring Boot の @Scheduled アノテーション、なんでcron言うん? スケジュール関連の意味のある単語なんか? linuxのcrontabに登録されると勘違いしても仕方ないやつじゃん? って旨の疑問を持ったら、以下のページを紹介されました。

(なおSpring Bootのcronに関しては当記事では以後触れません)

よろず話というタイトルのつもりでしたが誤変換が掛かってまぁいいかなってそのままにしましたので、万事屋話で「よろずばなし」と読んでください。

cronの由来

https://www.quora.com/What-is-the-etymology-of-cron/answer/Kah-Seng-Tay

chronos(クロノス)からtypo込みでcronos,cronみたいになったらしい。
(The quick and definitive answer (as a TL;DR): Cron comes from chronos, misspelled as cron.ってそういうことよね?)

https://ejje.weblio.jp/content/chrono

真偽は別として、クロノ、もしくはクロノスが語源と覚えておくと、うっかり「くーろん」と読んで恥をかかなくて済みます。

けど、逆に通じない事もあるから会話の際は「くろん? くーろん? の設定確認して」みたく下手な鉄砲も数撃ちゃ当たる戦法の事が多いです。ぴえん

他の由来も出自等も含めいくつか書いてありましたが特に琴線に触れなかったのでここでは割愛します。

cronのインストール

Dockerでイメージ触っていると、入っていない事もあると思います。
とはいえDocker内でcronを実行する事自体がレアな気もします。

Debian / Ubuntu

apt-get install cron

centos

yum install cronie

alpine

完全に入ってる?

ツール

crontab guru

https://crontab.guru

スケジュール時刻を文章化できるので設定のチェックに使えそう。ぶっちゃけcronのツール探すと大体これ系なので必要になったら適当に検索してでてきたのを使えばいいと思います。

Cron監視ツール「Cronitor」も便利そう。なんだけどネットワークしんだら巻き添えとか無い? 大丈夫?

cronv

https://github.com/takumakanari/cronv

最近のバージョンのGoのイメージで使ってみた際はInstallationの通りにしても進みませんでしたが、

go install github.com/takumakanari/cronv/cronv

のみで実行可能な状態になった気がします。

crontabのスケジュールをhtmlに出力してくれるのでぶつかりそうな処理を探すのに便利でした。

セキュリティ

CronRAT

https://japan.zdnet.com/article/35180063/

ツールじゃないです。たまたまなのか、意外と多いのかわかりませんがcron調べてたらこんな記事が飛び込んできました。

存在しない2月31日に実行されるよう設定されており、Linuxサーバーのスケジュールされたタスク内に身を隠す

ほとんどのウイルス対策ベンダーは依然としてこのマルウェアを検出できていない

「自己破壊、タイミング変調、外部の制御サーバーと通信するためのカスタムバイナリプロトコルを備えた高度な『BASH』プログラム」をドロップする

らしいので、一度は確認した方がよいかもしれません。

ところで存在しない2月31日に実行されるよう設定されるとどうなるのでしょう? これ普通に考えると単独だと一生実行されませんよね?
これは実行されないことを逆手にとって、任意のコードを文字列化して埋め込んでおくためのテクニックみたいです。むしろcronがこれを実行しちゃうと無効なコマンドとしてエラーすると思います。
大元としてこれを取り出して再構成する仕組みも必要でしょうけど、crontabの情報を読み込みしてデコードしてそれを実行する程度の処理だと見つけ辛そうです。

通常のファイル読み込み手段ではなく

crontab -l

で内容が読み込みできることがポイントな気がします。

目から鱗です。けどその発想力をもっと良い事に使ってほしいです。

まとめ

最後のマルウェアを自分なりに理解するのにくろん(苦労)した。

お疲れさまでした。

Discussion