web-dev-qa-db-ja.com

デスクトップでcronサービスを無効にできますか?

私は EvilGnome とそれがシステムを乗っ取る方法について読んでいました。私が読んだ興味深いことの1つは、crontabの使い方です。

Linuxインプラントは、Windowsタスクスケジューラと同様に、crontabを使用してターゲットシステム上で永続性を獲得し、盗まれたユーザーデータを攻撃者が制御するリモートサーバーに送信します。

私のubuntuデスクトップには、カスタムcronジョブはありませんが、service cron statusを実行すると、いくつかの結果が返されました。

systemd[1]: Started Regular background program processing daemon. 
cron[916]: (CRON) INFO (pidfile fd = 3)
cron[916]: (CRON) INFO (Running @reboot jobs)
CRON[19931]: pam_unix(cron:session): session opened for user root by (uid=0)
CRON[19932]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
CRON[19931]: pam_unix(cron:session): session closed for user root

私の質問は、Sudo systemctl disable cron.serviceのようなcronジョブを無効にできるかどうかです。 cronはubuntuデスクトップに必要なサービスですか、それともシステムから完全に削除できますか?

2
Eka

注:これは、年間数百万ドルの運営予算を持つ企業向けです。セットアップには1週間かかり、監査にはアップグレード後1〜2時間、アップグレードからの新しいスクリプトを組み込むにはさらに時間が必要です。

コメントでlogrotateが毎日呼び出されると述べました。これは、ログファイルのサイズを抑えるためのUbuntuの重要な部分です。 cronについて非常に心配している場合は、mserviceからプルして、cronを模倣した独自のスクリプトを作成する必要があります。このスクリプトをcronyと呼びます。あなたはハッカーがそれを探すことを考えない場所にそれを閉じ込めておくことができます。

/etc/cron.dailyのファイルを見てみましょう。

-rwxr-xr-x   1 root root   311 Feb 19  2014 0anacron*
-rwxr-xr-x   1 root root   376 Apr  4  2014 apport*
-rwxr-xr-x   1 root root  1474 Oct 31  2016 apt-compat*
-rwxr-xr-x   1 root root   314 Nov 26  2015 aptitude*
-rwxr-xr-x   1 root root   355 Jun  4  2013 bsdmainutils*
-rwxr-xr-x   1 root root   384 Mar 23  2014 cracklib-runtime*
-rwxr-xr-x   1 root root  1597 Nov 26  2015 dpkg*
lrwxrwxrwx   1 root root    37 Jun  4 01:43 google-chrome -> /opt/google/chrome/cron/google-chrome*
-rwxr-xr-x   1 root root  7613 Jan 17  2017 google-earth*
-rwxr-xr-x   1 root root 13944 Mar  4 17:48 google-earth-pro*
-rwxr-xr-x   1 root root   372 Jan 22  2014 logrotate*
-rwxr-xr-x   1 root root  1293 Nov  6  2015 man-db*
-rwxr-xr-x   1 root root   435 Jun 20  2013 mlocate*
-rwxr-xr-x   1 root root   249 Feb 16  2014 passwd*
-rw-r--r--   1 root root   102 Feb  9  2013 .placeholder
-rwxr-xr-x   1 root root  3449 Feb 26  2016 popularity-contest*
-rwxr-xr-x   1 root root   383 Mar  7  2016 samba*
-rwxr-xr-x   1 root root   214 Apr  9  2014 update-notifier-common*
-rwxr-xr-x   1 root root  1046 May 19  2016 upstart*

スクリプトmlocate私は毎日さえ使用していません。 15分ごとに実行していますが、毎日では十分ではありません。スクリプトpopularity-contestスパイウェアのようなもの なので、cronyを置き換える場合、cronで呼び出さないでください。

私はすべてのcronyスクリプトを/etc/rc.localから呼び出しますが、それを行う方法は他にもあります。

形式は次のようになります。

$ cat /etc/rc.local

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Jan 05 2018 - Reload Logitech Unifying Receiver to get Mouse in Power Stats
modprobe -r hid_logitech_dj
modprobe    hid_logitech_dj

# Call crony to mimick cron's duties
# daemonize job   boot delay   sleep interval
crony /etc/cron.daily/mlocate 1m 15m &
crony /etc/cron.daily/logrotate 30m d &
crony /mnt/e/usr/local/bin/daily-backup 5m d &
corny /usr/local/bin/eyesome-Sun.sh 1m d &

exit 0

これは、/etc/rc.localですでにセットアップされているエントリと、その後に新しいcronyエントリがある場合の一般的なインストールの場合です。 cronyエントリの最後の2つは、私のマシンが/etc/cron.dailyに持っているカスタムスクリプトです

#!/bin/bash

# NAME: crony
# PATH: /usr/local/bin
# DATE: July 17, 2019
# NOTE: For Ask Ubuntu: https://askubuntu.com/questions/1159014/can-we-disable-cron-services-in-desktop

logger "$0"

sleep "$2"

while true; do
    "$1"
    # If if parameter 2 is "d" for 1 day interval we can't sleep for a day
    # because laptop may have been suspended. Use 10 minutes to minimize resources
    sleep 10m
    # Check if time to process job again. If not continue
    continue

done

cronyスクリプトはさらに作業が必要ですが、一般的な考え方は理解できます。これはWSL(LinuxのWindowsサブシステム)に適したプロジェクトである場合とそうでない場合があります。

2

はい。しかし、システム上でアクティブなタスクがいくつかあり、それらも停止します。

Cronはubuntuデスクトップに必要なサービスですか、それともシステムから完全に削除できますか?

私はそれが必要であることを示唆しますが、いつものようにLinuxで...決定するあなたの選択:)別の方法を提案するかもしれません:なぜ/ etc/cron * /、/ etc/crontabおよび/ var/spool/cron /への変更にフラグを立てないのですか? crontabs//?通常のcronジョブをアクティブに保つことができるので、問題が大幅に軽減される可能性があります。ウォッチドッグを作成し、それらのディレクトリに設定するだけです。

私のシステムからのcronの実行(あなたのシステムはより多く、同じまたはより少ないアクションを持っているかもしれません)...

$ ls /etc/cron.daily/
0anacron      cracklib-runtime  man-db              samba
apport        dpkg              mlocate             update-notifier-common
apt-compat    google-chrome     passwd
bsdmainutils  logrotate         popularity-contest


$ ls /etc/cron.weekly/
0anacron  man-db  update-notifier-common

$ ls /etc/cron.monthly/
0anacron

したがって、一般的にはこれらのいずれかを調査します(ポピュラーコンテストはすべて順調でダンディですが、それなしで生活することもできます)。 mlocateが問題になる可能性があります。locateコマンドが更新されるので、便利な場合があります。等々。これらのそれぞれを手動で実行できます。

各ファイルには説明があります。

rinzwind@schijfwereld:~$ more /etc/cron.monthly/0anacron 
#!/bin/sh
#
# anacron's cron script
#
# This script updates anacron time stamps. It is called through run-parts
# either by anacron itself or by cron.
#
# The script is called "0anacron" to assure that it will be executed
# _before_ all other scripts.

test -x /usr/sbin/anacron || exit 0
anacron -u cron.monthly

anacronには独自のサービスがあります。

$ systemctl list-unit-files | grep cron
anacron.service                            enabled        
cron.service                               enabled        
anacron.timer                              enabled        

次に、コマンド(停止および開始)について説明します。

Sudo systemctl stop crond.service
Sudo systemctl start crond.service
Sudo systemctl stop anacron.service
Sudo systemctl start anacron.service
Sudo systemctl stop anacron.timer
Sudo systemctl start anacron.timer

(私はそれらのそれぞれをテストしませんでした;))

さらに、それだけではありません。ユーザーcronもアクティブです。あなたはそれらを無効にすることができます...

Sudo touch /var/spool/cron/crontabs/$USER
Sudo chmod 0 /var/spool/cron/crontabs/$USER

システム上のすべてのユーザー(ファイルのコピーを作成して、復元したい場合は復元できるようにしてください)(奇妙なことに、ユーザーcronのsystemdサービスが見つかりません。cron.serviceから処理されることはないと思います)。

2
Rinzwind