사용하는 코드가 있습니다sched_setscheduler
~에서sched.h
sched_param sched;
sched.sched_priority = 70;
sched_setscheduler(getpid(), SCHED_FIFO, &sched);
하지만 sudo
.root
전체 루트 권한을 부여하지 않고 사용자나 프로세스에 이 기능에 대한 액세스 권한을 부여할 수 있는 방법이 있습니까?
- 편집하다 -
드 로버트하나를 주었다좋은 대답사용 능력에 대해. 에서는 postinst
간단히 다음을 추가합니다.
setcap cap_sys_nice+ep /path/to/myapp
여기서 문제는 다음과 같습니다.
bin$ ./myapp
./myapp error while loading shared libraries: libmylib.so: cannot open shared object file: No such file or directory
$LD_LIBRARY_PATH
프로그램은 rpath
. 그것은 것 같다예상되는 동작. 해결책이 있나요?
setcap cap_setpcap+ep myapp
동적 로딩을 수행하기 전에 사용해 보았지만 prctl(PR_CAPBSET_DROP, CAP_SETPCAP);
도움이 되지 않는 것 같습니다.
답변1
스케줄러와 우선순위를 변경하려면 이 CAP_SYS_NICE
기능만 필요합니다.sched(7)에 대한 권한 및 리소스 제한. 맨페이지를 볼 수도 있습니다.sched_setscheduler
, sched(7)를 언급합니다.
프로그램에 이 기능을 제공하는 방법에는 여러 가지가 있습니다. 가장 간단한 방법은 아마도 다음과 같습니다.세트 캡:
# setcap cap_sys_nice=ep /usr/local/bin/your-program
이는 set-user-id와 유사하게 작동하지만 더 제한적입니다(하나의 기능만 제공하므로). 물론 CAP_SYS_NICE는 프로그램에 시스템을 정지할 수 있는 권한을 효과적으로 부여합니다(실시간 작업으로 모든 CPU 시간을 차지함).
다른 방법으로는 루트로 실행 래퍼(다른 모든 권한을 제거함)를 사용하거나 RealtimeKit/PolicyKit 등을 사용하여 권한을 높이는 방법이 있습니다.
(기능에 대한 자세한 내용을 보려면 다음에서 시작하는 것이 좋습니다.능력(7)).
답변2
약간 이상하고 운영 체제의 취약점을 노출시키기는 하지만 해결책이 있습니다.
이 기간 동안 postinst
나는 다음을 수행합니다.
cp $(which chrt) bin/chrt
setcap cap_sys_nice+ep bin/chrt
그런 다음 코드에서 프로세스를 시작합니다.
bin/chrt -o -p 70 getpid()
방금 공개한 취약점은 이 버전을 사용하는 사람은 누구나 chrt
관리자 권한 없이 이 작업을 수행할 수 있다는 것입니다. 엄격하게 제어되는 대상 환경을 실행하고 있기 때문에 이 취약점은 괜찮지만 대상 환경을 제어할 수 없는 사람에게는 권장하지 않습니다.