sudoers 라인은
%game_servers ALL= NOPASSWD:/usr/bin/renice
그룹 구성원은 비밀번호 없이 모든 사용자가 모든 프로세스를 실행할 수 있도록 허용 하지만 음수 값을 사용하여 그룹 구성원의 자체 프로세스만 허용 renice
하고 싶습니다 .renice
man sudoers
변경하려고 생각한 곳 에서 ALL=(root:root)
답을 찾을 수 없습니다 ALL=
. 나쁜 생각이었습니다.
ALL=()
문법 오류입니다.
답변1
renice
그룹 구성원이 자신의 프로세스 만 실행할 수 있기를 원합니다 . 이는 항목이 없는 기본 동작입니다 sudoers
. 기본적으로 renice
자신의 프로세스 범위 내에서 좋은 값을 설정할 수 있습니다 0 - 19
.
sudo
액세스 권한이 있으면 범위 와 자신의 것이 아닌 프로세스를 renice
확장할 수 있습니다 .-20 to 19
renice
를 실행할 때 man renice
원하는 작업을 수행할 수 있는 옵션이 표시되지 않습니다. 사용자가 명령 sudo
에 액세스할 수 있는 경우 모든 프로세스를 실행할 수 있는 옵션을 renice
추가할 수 있습니다 .renice
귀하의 해결책은 파일 renice
의 항목을 삭제하는 것입니다 sudoers
. 그러면 사용자는 renice
자신의 프로세스만 사용할 수 있습니다. 그들은 좋은 값을 사이의 값으로 설정하는 능력을 잃게 되지만 -20 and -1
, 이것이 여기서 요구되는 절충안입니다.
답변2
다음과 같은 래퍼를 사용하세요 renice
.
#!/bin/sh
priority="$1"
pid="$2"
owner=`ps -h -o uid $pid`
if [ $owner != ${SUDO_UID} ]; then
echo "Only your own processes can be reniced" >&2
exit 1
fi
renice $priority $pid
이 예는 취약하며 소유권 확인과 우선순위 변경 사이의 지연으로 인해 경쟁 조건이 발생하기 쉽습니다.