procmail로 시작된 작업은 ps-output에 표시되지 않으며 재부팅 후에도 중지할 수 없습니다.

procmail로 시작된 작업은 ps-output에 표시되지 않으며 재부팅 후에도 중지할 수 없습니다.

테스트 목적으로 .forward 파일을 통해 procmail을 호출합니다.

|/usr/bin/procmail

.procmailrc의 규칙에 따라 무한 루프인 "start"라는 작업을 시작합니다.

while true
do
 date>>logfile
 sleep 300
done

놀랍게도 이 작업(또는 procmail 또는 .forward와 관련된 다른 작업)은 ps -ef 출력에 별도의 프로세스(나 자신이나 다른 사람의 프로세스가 아님)로 표시되지 않으므로 죽일 수 없습니다. 5분마다 로그에 타임스탬프를 기록합니다. 쉘 스크립트를 제거해도 작동하지 않습니다. 분명히 이미 메모리에 있으므로 다시 읽을 필요가 없습니다. 이제는 적어도 작업을 다시 시작하면 종료될 것이라고 생각했지만 그렇지 않았습니다. 출력을 중지하기 위해 할 수 있는 유일한 방법은 로그 파일을 모든 사람이 쓸 수 없게 만드는 것입니다. 하지만 그런 경우에도 작업은 계속 실행됩니다(파일을 다시 읽을 수 있게 만들 때 확인하겠습니다).

이제 내 질문은: 루트가 아닌 사용자로서 이 스크립트를 어떻게 종료할 수 있습니까? 아니면 전혀 그렇지 않은 경우: 내가 무엇을 잘못했나요? ps 출력에 표시되고 (더 중요한 것은) 내가 죽일 수 있도록 procmail을 통해 스크립트를 호출하려면 어떻게 해야 합니까?

머신에 대한 루트 액세스 권한은 없지만 재부팅할 수 있도록 물리적 액세스 권한이 있습니다. OS는 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
}
}

이것이 왜 필요한지 묻는다면: 외부 무료 메일 계정으로 메일을 받을 때마다 호스트 시스템의 작업(Payload.sh라고 부르겠습니다)이(no cron및 no 없이 at) 실행되는지 확인하고 싶습니다. 6 시간. 그래서 나는 외부 메일 계정의 메일을 호스트로 전달하고 procmail은 새 메일이 도착할 때마다 내 스크립트 "start"를 시작합니다. 시작에서는 이전 시작 스크립트가 아직 실행 중인지 확인하겠습니다. 그렇다면 새로운 두 번째 "start"를 종료하고, 그렇지 않은 경우(아마도 호스트 종료로 인해) "start"는 6시간마다 Payload.sh를 호출합니다. 이 문제에 대한 더 간단한 해결책을 알고 있다면 여기에 자유롭게 적어주세요.

답변1

위의 주석 스레드에서 발견된 것처럼 Procmail은 로그인한 호스트가 아닌 다른 호스트에서 실행되고 있다는 설명이 있습니다. 일반적으로 이는 관리자가 메일 전달 호스트를 일반 프로덕션 시스템과 분리하기로 결정할 때 발생합니다. 일반적인 배열은 메일 전달 호스트가 홈 디렉토리를 NFS에 마운트하여 메시지를 읽을 수 있는 위치로 전달하지만 그렇지 않으면 사용자가 액세스할 수 없지만 읽을 수 있는 별도의 로컬 파일 시스템으로 전달하는 것입니다. .)

메일 처리 호스트에 로그인할 수 있는 권한이 있는 경우 로그인하여 불필요한 프로세스를 종료하면 됩니다.

로그인 액세스 권한이 없는 경우 .procmailrc메일 처리 호스트에 스크립트를 추가하고 이 코드를 실행하기 위한 조건을 트리거하는 이메일을 자신에게 보내 메일 처리 호스트에서 임의의 코드 조각을 실행할 수 있습니다.

예를 들어,

:0
* ^Subject: secret sauce
| ps -wallx >ps.out

(물론, 다른 사람들이 귀하의 실험을 쉽게 방해할 수 없도록 다른 트리거를 사용하십시오.)

kill트리거되면 종료하려는 프로세스의 PID가 있는 명령으로 작업을 변경하는 데 필요한 정보가 있어야 합니다 .

(완료되면 이 레시피를 삭제해야 합니다 .procmailrc..)

편집증적인 관리자는 Procmail이 이런 일을 하는 것을 좋아하지 않습니다. 이 기능을 사용하여 "창의적인" 작업을 수행하면 Procmail에서 차단되거나 쫓겨날 수 있습니다. 주의해서 사용하세요.

관련 정보