由 procmail 啟動的作業不會出現在 ps-output 中並且無法停止,即使重新啟動後也不會
出於測試目的,我通過我的 .forward 文件呼叫了 procmail
|/usr/bin/procmail
根據 .procmailrc 中的規則,它啟動了一個名為“start”的作業,這只是一個無限循環
while true do date>>logfile sleep 300 done
令我驚訝的是,這項工作(或與 procmail 或 .forward 相關的任何其他工作)在 ps -ef 的輸出中並未作為單獨的程序出現(不是我自己的程序,也不是其他任何人的程序),所以我無法殺死它它每 5 分鐘將一個時間戳寫入日誌。即使刪除shell腳本也不起作用,顯然它已經在記憶體中,不需要再次讀取。現在我想,至少這項工作會在重新啟動後終止,但事實並非如此。為了停止輸出,我唯一能做的就是使日誌文件對所有人都不可寫,但即便如此,作業仍會繼續執行(當我再次使文件可讀時,我會看到它)。
現在我的問題是:如何以非 root 使用者身份終止此腳本?或者如果根本沒有:我做錯了什麼?我如何必須通過 procmail 呼叫腳本才能顯示在 ps 輸出中並且(更重要的是)讓它對我來說可以殺死?
我沒有對機器的 root 訪問權限,但我有物理訪問權限,所以我可以重新啟動它。作業系統似乎是 x86_64-suse-linux,uname -a 顯示 Linux 3.11.10-7-default #1 SMP。我的外殼是 bash。
@Anthon:mailq 顯示一個空的郵件隊列。重命名 start、.procmailrc 和 .forward 不會改變任何東西。
@EightBitTony:
nameofpc:~ > ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 Apr24 ? 00:00:13 /sbin/init showopts root 2 0 0 Apr24 ? 00:00:00 [kthreadd] root 3 2 0 Apr24 ? 00:00:00 [ksoftirqd/0] root 5 2 0 Apr24 ? 00:00:00 [kworker/0:0H] root 7 2 0 Apr24 ? 00:00:00 [migration/0] root 8 2 0 Apr24 ? 00:00:00 [rcu_bh] root 9 2 0 Apr24 ? 00:00:00 [rcuob/0] root 10 2 0 Apr24 ? 00:00:00 [rcuob/1] root 11 2 0 Apr24 ? 00:00:00 [rcuob/2] root 12 2 0 Apr24 ? 00:00:00 [rcuob/3] root 13 2 0 Apr24 ? 00:00:11 [rcu_sched] root 14 2 0 Apr24 ? 00:00:07 [rcuos/0] root 15 2 0 Apr24 ? 00:00:04 [rcuos/1] root 16 2 0 Apr24 ? 00:00:04 [rcuos/2] root 17 2 0 Apr24 ? 00:00:03 [rcuos/3] root 18 2 0 Apr24 ? 00:00:01 [watchdog/0] root 19 2 0 Apr24 ? 00:00:01 [watchdog/1] root 20 2 0 Apr24 ? 00:00:00 [migration/1] root 21 2 0 Apr24 ? 00:00:00 [ksoftirqd/1] root 23 2 0 Apr24 ? 00:00:00 [kworker/1:0H] root 24 2 0 Apr24 ? 00:00:01 [watchdog/2] root 25 2 0 Apr24 ? 00:00:00 [migration/2] root 26 2 0 Apr24 ? 00:00:00 [ksoftirqd/2] root 28 2 0 Apr24 ? 00:00:00 [kworker/2:0H] root 29 2 0 Apr24 ? 00:00:01 [watchdog/3] root 30 2 0 Apr24 ? 00:00:00 [migration/3] root 31 2 0 Apr24 ? 00:00:00 [ksoftirqd/3] root 33 2 0 Apr24 ? 00:00:00 [kworker/3:0H] root 34 2 0 Apr24 ? 00:00:00 [khelper] root 35 2 0 Apr24 ? 00:00:00 [kdevtmpfs] root 36 2 0 Apr24 ? 00:00:00 [netns] root 37 2 0 Apr24 ? 00:00:00 [writeback] root 38 2 0 Apr24 ? 00:00:00 [kintegrityd] root 39 2 0 Apr24 ? 00:00:00 [bioset] root 40 2 0 Apr24 ? 00:00:00 [kblockd] root 41 2 0 Apr24 ? 00:00:00 [ata_sff] root 42 2 0 Apr24 ? 00:00:00 [md] root 44 2 0 Apr24 ? 00:00:00 [khungtaskd] root 45 2 0 Apr24 ? 00:00:00 [kswapd0] root 46 2 0 Apr24 ? 00:00:00 [ksmd] root 47 2 0 Apr24 ? 00:00:01 [khugepaged] root 48 2 0 Apr24 ? 00:00:00 [fsnotify_mark] root 49 2 0 Apr24 ? 00:00:00 [crypto] root 54 2 0 Apr24 ? 00:00:00 [kthrotld] root 55 2 0 Apr24 ? 00:00:00 [scsi_eh_0] root 56 2 0 Apr24 ? 00:00:00 [scsi_eh_1] root 57 2 0 Apr24 ? 00:00:00 [scsi_eh_2] root 58 2 0 Apr24 ? 00:00:00 [scsi_eh_3] root 59 2 0 Apr24 ? 00:00:00 [scsi_eh_4] root 60 2 0 Apr24 ? 00:00:00 [scsi_eh_5] root 68 2 0 Apr24 ? 00:00:00 [kpsmoused] root 72 2 0 Apr24 ? 00:00:01 [kworker/0:1H] root 73 2 0 Apr24 ? 00:00:00 [deferwq] root 114 2 0 Apr24 ? 00:00:00 [kmpath_rdacd] root 141 2 0 Apr24 ? 00:00:00 [khubd] root 151 2 0 Apr24 ? 00:00:00 [kworker/1:1H] root 152 2 0 Apr24 ? 00:00:00 [kworker/2:1H] root 154 2 0 Apr24 ? 00:00:00 [kworker/3:1H] root 220 2 0 Apr24 ? 00:00:00 [jbd2/sda5-8] root 221 2 0 Apr24 ? 00:00:00 [ext4-rsv-conver] root 222 2 0 Apr24 ? 00:00:00 [ext4-unrsv-conv] root 260 1 0 Apr24 ? 00:00:11 /usr/lib/systemd/systemd-journald root 261 2 0 Apr24 ? 00:00:00 [kauditd] root 296 1 0 Apr24 ? 00:00:00 /usr/lib/systemd/systemd-udevd root 381 2 0 Apr24 ? 00:00:00 [irq/46-mei_me] root 382 2 0 Apr24 ? 00:00:00 [hd-audio0] root 387 2 0 Apr24 ? 00:00:00 [kvm-irqfd-clean] root 426 2 0 Apr24 ? 00:00:00 [jbd2/sda7-8] root 427 2 0 Apr24 ? 00:00:00 [ext4-rsv-conver] root 428 2 0 Apr24 ? 00:00:00 [ext4-unrsv-conv] root 430 2 0 Apr24 ? 00:00:00 [jbd2/sda9-8] root 431 2 0 Apr24 ? 00:00:00 [ext4-rsv-conver] root 432 2 0 Apr24 ? 00:00:00 [ext4-unrsv-conv] root 438 2 0 Apr24 ? 00:00:01 [jbd2/sda6-8] root 439 2 0 Apr24 ? 00:00:00 [ext4-rsv-conver] root 440 2 0 Apr24 ? 00:00:00 [ext4-unrsv-conv] avahi 624 1 0 Apr24 ? 00:01:38 avahi-daemon: running [fphct03.local] root 625 1 0 Apr24 ? 00:00:00 /sbin/rpcbind -w -f nscd 628 1 0 Apr24 ? 00:00:07 /usr/sbin/nscd --foreground message+ 631 1 0 Apr24 ? 00:00:10 /bin/dbus-daemon --system --address=systemd: -- root 642 1 0 Apr24 ? 00:00:04 /usr/lib/systemd/systemd-logind root 644 1 0 Apr24 ? 00:00:07 /usr/local/natinst/nisvcloc/bin/nisvcloc -D root 647 1 0 Apr24 ? 00:00:03 /usr/sbin/rsyslogd -n root 1233 1 0 Apr24 ? 00:00:00 /usr/sbin/sshd -D root 1241 1 0 Apr24 ? 00:00:01 /usr/sbin/ypbind -n -no-dbus root 1246 2 0 Apr24 ? 00:00:00 [rpciod] root 1247 2 0 Apr24 ? 00:00:00 [nfsiod] root 1255 1 0 Apr24 ? 00:00:00 /usr/sbin/rpc.gssd -D -p /var/lib/nfs/rpc_pipef root 1261 1 0 Apr24 ? 00:00:00 /usr/sbin/rpc.idmapd -p /var/lib/nfs/rpc_pipefs root 1264 2 0 Apr25 ? 00:00:00 [kworker/u8:2] root 1276 2 0 Apr24 ? 00:00:00 [nfsv4.0-svc] root 1298 1 0 Apr24 tty1 00:00:00 /sbin/agetty --noclear tty1 linux ntp 1319 1 0 Apr24 ? 00:00:11 /usr/sbin/ntpd -p /var/run/ntp/ntpd.pid -g -u n root 1351 1 0 Apr24 ? 00:00:00 /usr/bin/kdm root 1395 1 0 Apr24 ? 00:00:29 /usr/bin/python /usr/sbin/denyhosts --daemon -- root 1437 1 0 Apr24 ? 00:00:00 /usr/lib/postfix/master root 1450 1 0 Apr24 ? 00:00:00 /usr/sbin/cron -n postfix 1460 1437 0 Apr24 ? 00:00:00 qmgr -l -t fifo -u root 1633 1 0 Apr24 ? 00:00:02 /usr/lib/upower/upowerd polkitd 1638 1 0 Apr24 ? 00:00:09 /usr/lib/polkit-1/polkitd --no-debug root 1678 1 0 Apr24 ? 00:00:41 /usr/lib/udisks2/udisksd --no-debug rtkit 1748 1 0 Apr24 ? 00:00:02 /usr/lib/rtkit/rtkit-daemon root 1777 1 0 Apr24 ? 00:00:00 /usr/lib/bluetooth/bluetoothd root 1789 1 0 Apr24 ? 00:00:00 /usr/lib/systemd/systemd-hostnamed root 1979 1351 0 Apr25 tty7 00:00:48 /usr/bin/Xorg -br :0 vt7 -nolisten tcp -auth /v root 1987 1351 0 Apr25 ? 00:00:00 -:0 kdm 1988 1987 0 Apr25 ? 00:02:09 /usr/lib64/kde4/libexec/kdm_greet root 17533 2 0 Apr26 ? 00:00:00 [kworker/u8:1] root 21461 2 0 08:20 ? 00:00:00 [kworker/2:1] root 22873 2 0 12:10 ? 00:00:00 [kworker/1:1] postfix 23129 1437 0 12:47 ? 00:00:00 pickup -l -t fifo -u root 23171 2 0 12:50 ? 00:00:00 [kworker/2:2] root 23266 2 0 13:05 ? 00:00:00 [kworker/3:1] root 23300 2 0 13:11 ? 00:00:00 [kworker/0:2] root 23393 2 0 13:20 ? 00:00:00 [kworker/3:2] root 23407 2 0 13:22 ? 00:00:00 [kworker/0:0] root 23428 2 0 13:26 ? 00:00:00 [kworker/1:0] root 23481 1233 0 13:34 ? 00:00:00 sshd: myuserid [priv] myuserid 23484 1 0 13:34 ? 00:00:00 /usr/lib/systemd/systemd --user myuserid 23485 23484 0 13:34 ? 00:00:00 (sd-pam) myuserid 23486 23481 0 13:34 ? 00:00:00 sshd: myuserid@pts/2 myuserid 23487 23486 0 13:34 pts/2 00:00:00 -bash root 23547 2 0 13:35 ? 00:00:00 [kworker/2:0] root 23561 2 0 13:35 ? 00:00:00 [kworker/0:1] myuserid 23595 23487 0 13:37 pts/2 00:00:00 ps -ef nameofpc:~ >
@tripleee:.procmailrc(是的,我知道裡面有一些垃圾)就像
# .procmailrc # routes incoming mail to appropriate mailboxes PATH=/usr/local/bin:/usr/bin:/bin MAILDIR=$HOME/.mailspool # all mailboxes are in .mailspool/ #DEFAULT=$HOME/.mailspool/mbox DEFAULT=/var/spool/mail/myuserid LOGFILE=/dev/null SHELL=/bin/bash { :0 * ^From myemail@myexternalfreemailprovider\.com { :0 | /home/myuserid/start >/dev/null } }
如果你問我為什麼需要這個:我想確保每次在我的外部 freemail 帳戶上收到郵件時,主機上的作業(我們稱之為 payload.sh )每 6 次執行一次(它有 no
cron
和 no )at
小時。所以我將郵件從我的外部郵件帳戶轉發到主機,每次有新郵件到達時,procmail 都會在主機上啟動我的腳本“start”。在“開始”中,我會檢查早期的“開始”腳本是否仍在執行。如果是,則退出新的第二個“start”,如果不是(可能是由於主機關閉),那麼“start”將每 6 小時呼叫一次 payload.sh。如果您知道此問題的更簡單解決方案,請隨時在此處編寫。
正如上面的評論執行緒中所揭示的那樣,解釋是 Procmail 執行在與您登錄的主機不同的主機上。通常,當管理員決定他們希望郵件傳遞主機與正常生產機器等分開時,就會發生這種情況。一種常見的安排是郵件傳遞主機將您的主目錄掛載到 NFS 上,以便它可以將郵件傳遞到您可以閱讀的位置,但另外一個單獨的本地文件系統,使用者無權訪問(但請繼續閱讀……)
如果您對郵件處理主機具有登錄訪問權,只需登錄它並終止不需要的程序。
如果您沒有登錄權限,您可以在郵件處理主機上執行任意程式碼片段,方法是向您添加一個腳本並向您
.procmailrc
自己發送一封電子郵件,觸發執行此程式碼的條件。例如,
:0 * ^Subject: secret sauce | ps -wallx >ps.out
(顯然,使用不同的觸發器,這樣其他人就不會輕易地擾亂你的實驗。)
一旦觸發,您應該擁有將操作更改為
kill
具有要終止程序的 PID 的命令所需的東西。(一旦你完成了,你會想要從你的食譜中清除這個食譜
.procmailrc.
)偏執的管理員不喜歡 Procmail 可以做到這一點。用這個工具做“創造性”的事情可能會導致 Procmail 被禁止,或者你被淘汰。小心使用。