주어진 사용자의 모든 프로세스를 누구나 죽일 수있게한다


15

공유 서버에서 다른 사용자 (루트 권한이없는)가 리소스를 필요로 할 때마다 낮은 우선 순위의 사용자 프로세스를 종료 할 수 있도록 우선 순위가 매우 낮은 사용자를 원합니다.

그런 것을 허용 할 수 있습니까?


1
그룹에 필요한 모든 사용자에게 sudo -u user kill 권한을 부여하십시오
Kiwy

4
우선 순위가 낮은이 사용자가 실제 사용자이고, 귀하와 귀하의 친구가 BOFH 가되기를 바랍니다 . 그것은 질문을 훨씬 더 흥미롭게 만듭니다.
파이프

@DavidFoerster, 하나의 문제는 CPU가 100 % 낮은 우선 순위 프로세스가 아니더라도 프로세서 캐시 등을 채울 수 있다는 것입니다. 마찬가지로 디스크 액세스 등
Ian Ringrose

답변:


24

다른 사용자에게 우선 순위가 낮은 사용자 로서 프로세스를 종료 할 수있는 권한을 부여하십시오.

sudo -u lowpriouser /bin/kill PID

루트 권한이 없으면 사용자는 자신의 프로세스에만 신호를 보낼 수 있습니다. 파일 sudo -u에서 올바른 설정을 가진 사용자 를 사용 하면 sudoers우선 순위가 낮은 사용자의 신원을 가정하여 프로세스를 종료 할 수 있습니다.

예를 들면 다음과 같습니다.

%killers ALL = (lowpriouser) /bin/kill

이렇게하면 그룹의 모든 사용자가 killers로 실행될 수 /bin/kill있습니다 lowpriouser.

sudoers시스템 설명서 도 참조하십시오 .


OpenBSD 시스템에서는 다음과 같은 doas구성으로 원시 유틸리티를 통해 동일한 작업을 수행 할 수 있습니다.

permit :killers as lowpriouser cmd /bin/kill

그때

doas -u lowpriouser /bin/kill PID

doas및 설명서를 참조하십시오 doas.conf.


kill 명령 을 허용하면 해당 명령을 남용하여 종료와 관련이없는 신호를 임의의 프로세스로 보내 보안 문제가 될 수 있습니다.

@forest이 때문에 모든 사람에게 루트 계정을 사용하여 실행할 수있는 기능을 제공하지 않는 것이 좋습니다 kill. killers모든 사용자가 아닌 사용자 그룹 ( )을 사용하는 것이 좋습니다 .
Kusalananda

그러나 내가 의미하는 바는 그 그룹이 kill -HUP단지 kill -TERM.

@forest 예. 소유 한 프로세스에 신호를 보낼 수 있습니다 lowpriouser. 신호를로 제한하려면 TERM래퍼 셸 스크립트를 작성하여 /bin/kill사람들이 대신 사용할 수 있도록 /bin/kill합니다.
Kusalananda

1
%killers ALL = (lowpriouser) /bin/kill -(9, 15) [0-9 ]*

5

프로세스의 우선 순위가 낮 으면 리소스를 거의 소비하지 않으므로 프로세스를 종료해서는 안됩니다.

실제로 우선 순위를 낮게하려면 우선 순위를 수동으로 변경하거나 autonice오랜 세월 (1994 년경)에 DEC OSF / 1 용으로 작성한 데몬을 사용하여 장기 실행 작업을 찾고 실행 시간이 길어질수록 우선 순위를 점차적으로 줄입니다. .

편집 라는 패키지 거기에 and현대적인 유닉스에 대한 이벤트가이 기능을 제공합니다.


한 가지 문제는 CPU가 100 %가 아니더라도 우선 순위가 낮은 프로세스가 프로세서 캐시 등을 채울 수 있다는 것입니다. 마찬가지로 디스크 액세스 등
Ian Ringrose

@IanRingrose는 실행 예약 된 작업 만 캐시를 차지하거나 디스크 액세스를 수행 할 수 있습니다.
Alnitak

4

프로세스가 낮은 우선 순위 설정 (CPU, I / O)으로 실행되면 실행 예약되지 않기 때문에 다른 프로세스에 큰 영향을 미치지 않아야합니다. 메모리 사용량과 관련하여 메인 메모리가 부족하고 프로세스가 오랜 시간 (예 : CPU 및 I / O 제한으로 인해) 실행되도록 예약되지 않은 경우 "정리"페이지가 삭제되고 "더러운"페이지가 커밋됩니다. 다른 프로세스의 성능에 더 이상 영향을 미치지 않습니다.

결론 : 올바른 우선 순위 설정과 충분한 스왑 공간을 사용하면 우선 순위가 낮은 작업을 종료하여 더 중요한 작업을위한 "룸"을 만들 필요가 없습니다. 대신 커널은 전자가 후자를 위해 잠들도록주의를 기울일 것이다.


1
"낮은 우선 순위"는 "낮은 CPU 우선 순위로 실행"을 암시하지 않고 "중요하지 않음"을 의미 할 수도 있습니다. 이것은 질문에 명시 적으로 제시되지 않았습니다.
Kusalananda

@ Kusalananda : 나는 이것이 질문에 명시 적이 지 않다는 것에 동의하지만, 내 대답은 그것이 현실이어야한다고 말합니다.
David Foerster

1
그렇게 간단하지 않습니다. 우선 순위가 낮은 프로세스조차도 특히 메모리 제한이있는 경우 시스템이 중단 될 수 있습니다 . 설정 방법에 따라 프로세스가 스왑됩니다. 스와핑은 I / O (프로세스의 I / O 할당량에 포함되지 않을 수 있음)를 유발하며 시스템의 규모에 따라 응답 성이 떨어집니다. 그런 다음 일반적으로 (다른 사람들은 리소스를 필요로하지 않지만) 우선 순위가 낮은 프로세스는 실제로 필요한 모든 리소스를 얻을 수 있기를 원할 것입니다 (일반적인 메모리 제한은 적용 할 수 없음). 여기에서 CPU 공유가 도움이됩니다.
조나스 셰퍼

완전한 프로세스를 교체하는 오래된 "유닉스 방식"인 @JonasWielicki는 그 장점을 가지고있었습니다. 올바르게 기억한다면 HPUX는 1990 년대에이 문제를 해결하기위한 몇 가지 도구를 제공 할 수 있습니다.
Ian Ringrose
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.