私は 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デスクトップに必要なサービスですか、それともシステムから完全に削除できますか?
注:これは、年間数百万ドルの運営予算を持つ企業向けです。セットアップには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サブシステム)に適したプロジェクトである場合とそうでない場合があります。
はい。しかし、システム上でアクティブなタスクがいくつかあり、それらも停止します。
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から処理されることはないと思います)。