예를 들어, Ubuntu 서버에서 비밀리에 백그라운드에서 프로세스를 실행하고 싶지만 나를 제외한 다른 사람이 서버에 로그인할 때마다 해당 사용자가 프로세스를 종료해야 합니다. 이런 프로세스를 만드는 것이 가능합니까? (계정이 있고 sudo
수정할 수 있습니다 /etc/bash.bashrc
.)
감사해요!
답변1
다음 내용은 다양한 방식으로 시스템 보안을 손상시킬 수 있습니다.
해당 프로세스를 종료하는 스크립트를 작성하십시오(프로세스 P라고 부르겠습니다). 그런 다음 모든 사용자에게 sudoers에서 이 스크립트를 실행할 수 있는 권한을 부여하십시오. 마지막으로 sudo into 를 사용하여 이 스크립트에 적합한 호출을 추가합니다 /etc/bashrc
.
예를 들어 프로세스가 시작되었음을 알고 있고 /usr/local/sbin/myproc
누군가 로그인하는 즉시 모든 프로세스를 종료하려고 한다고 가정합니다. 따라서 간단한 grep 및 kill 전략을 사용하여 종료할 것입니다.
따라서 먼저 다음을 입력하십시오 /usr/local/sbin/killmyprocs
.
#!/bin/sh
ps auxw|grep [m]yproc|awk '{ print $2 }'|xargs kill -TERM > /dev/null 2>&1
# end of file.
실제로 이것을 진행하고 구현한다면 약간 더 정교한 것을 원할 것입니다. 따라서 적절한 신호를 포착하고 일반적으로 안전한 방식으로 작업을 수행하는 스크립트를 작성하십시오.
/etc/sudoers
두 번째로 다음 을 추가하여 모든 사용자에게 이 스크립트를 실행할 수 있는 권한을 부여하십시오 .
ALL ALL = (root) NOPASSWD: /usr/local/sbin/killmyprocs
세 번째이자 마지막 단계는 다음에서 스크립트에 sudo 호출을 추가하는 것입니다 /etc/bashrc
.
[ "`id -n -u`" != "<my_username>" ] && sudo /usr/local/sbin/killmyprocs
직접 로그인할 때 "비밀" 프로세스가 종료되는 것을 방지하려면 자신의 계정으로 바꾸십시오.
요약하자면: 1) 출력은 생성하지 않지만 종료하려는 프로세스를 종료하는 스크립트를 생성합니다. 2) /etc/sudoers
시스템의 모든 사용자가 해당 스크립트를 루트로 실행할 수 있도록 적절한 항목을 추가합니다. 3) 다음에 대한 호출을 추가합니다. sudo를 통해 /etc/bashrc
(또는 /etc/profile
) 스크립트를 실행하세요.
주의 사항: /etc/bashrc
(또는 /etc/profile
그 문제에 대해서는) 대화형 쉘에 대해서만 소스를 얻으십시오. 이는 사용자가 ssh yourhost 'ps auxw'를 수행하고 프로세스 테이블에서 프로세스를 찾는 것이 다소 쉽다는 것을 의미합니다. 쉘 초기화 파일을 참조하지 않기 때문에 위에 소개된 메커니즘으로 프로세스가 종료되지 않습니다. 'sshd_config'를 사용하여 이를 해결할 수 있는 방법이 있지만 ForceCommand
이는 독자의 연습용으로 남겨 둡니다.
결론적으로 나는 이것이 보안에 명백한 영향을 미친다는 점을 다시 한 번 상기시키고 싶습니다. 이것은 또한 완전한 액세스 권한이 없는 시스템을 백도어하려는 것처럼 들리지만 여기서는 실제로 그것이 내 관심사가 아닙니다(수퍼유저에게 이러한 질문을 해야 한다면 어쨌든 곧 잡힐 것입니다). .
답변2
"해당 사용자가 프로세스를 종료해야 합니다"는 무슨 뜻인가요?
A) 사용자가 자신이 소유하지 않은 프로세스를 종료하기를 원하십니까?
프로세스를 종료하는 스크립트를 만든 다음 setuid를 설정합니다 chmod u+s
(무엇을 하고 있는지 알지 못한다면 이는 큰 보안 허점이 될 수 있습니다).
또는
B) 프로세스가 사용자 로그인을 알리고 스스로 종료되기를 원하십니까?
글쎄, 그게 당신이 할 일입니다.