테스트 목적으로 .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에서 차단되거나 쫓겨날 수 있습니다. 주의해서 사용하세요.