2011-10-03 15 views
6

내 프로그램은 리눅스 시스템 호출 setpriority()을 사용하여 자신이 만든 스레드의 우선 순위를 변경합니다. 부정적인 우선 순위 (-10)를 설정해야하지만 문서에서 언급했듯이 일반 사용자로 실행하면 실패합니다.CAP_SYS_NICE 기능을 Linux 사용자에게 설정하는 방법은 무엇입니까?

사용자가 원하는대로 우선 순위를 설정할 수있는 기능이 있어야하지만이 기능을 사용자에게 제공하는 방법을 모릅니다.

내 질문 : 리눅스 사용자에게 CAP_SYS_NICE 기능을 설정하는 방법?

+0

니스 -10은 우선 순위가 높지만 원격에서도 실시간으로 볼 수 있습니다. –

+0

포인터 일 뿐이므로 주석을 추가합니다.이 답변을 확인하십시오 : http://stackoverflow.com/a/17685265/6899 – tzot

답변

2

Jan Hudec은 프로세스 자체가 기능을 제공 할 수 없으며 setuid 래퍼가 기능을 얻는 확실한 방법이라는 것이 맞습니다. 또한 루트를 삭제할 때 prctl(PR_SET_KEEPCAPS, ...)이 필요함을 명심하십시오. 자세한 내용은 prctl 매뉴얼 페이지를 참조하십시오. 그렇지 않으면 루트가 아닌 실제 사용자 ID로 전환 할 때 권한을 삭제합니다. 당신은 정말 다른 수 좋은 수준의 사용자 세션을 시작하려는 경우 pam_limits 모듈은 하드 좋은 제한을 변경할 수 있습니다로

, 당신은 pam_limitslimits.conf 설명서 페이지를 볼 수 있습니다. 그것은 라인처럼 될 수있다 :

yourspecialusername hard nice -10 
+2

이 답변은 흙보다 오래되었지만 읽을 수있는 pam_cap.so 모듈이 있습니다. '/ etc/security/capability.conf'와 그에 맞는 능력을 설정하십시오. – Bratchley

0

AFAIK 기능을 사용할 수 없습니다. 루트 프로세스는 모든 기능을 갖추고 있으며이를 포기할 수는 있지만 일단 포기되면 다시 얻을 수 없습니다. 따라서 다른 모든 기능을 포기하고 프로세스를 실행하는 suid-root 래퍼가 필요합니다.

4

이 좋은 편리한 유틸리티입니다 바이너리의 능력을 설정하는 경우 : setcap. 이것은 응용 프로그램 바이너리에서 루트로 실행해야하지만 일단 설정되면 일반 사용자로 실행할 수 있습니다. 예 :

$ sudo setcap 'cap_sys_nice=eip' <application> 

당신은 getcap를 사용하여 응용 프로그램에 어떤 기능을 확인할 수 있습니다

나는 일반적으로 얘기 할 루트로 실행되는 설치 라인에서 메이크에 기능을 통합하는 게 좋을 것
$ getcap <application> 
<application> = cap_sys_nice+eip 

. 기능은 TAR 파일 또는 파생 패키지 형식으로 저장할 수 없습니다. 나중에 응용 프로그램을 패키징하는 경우 배포시 기능을 적용하려면 스크립트 (Debian 패키지의 postinst)가 필요합니다.

+0

명령이 작동하지만'cap_sys_nice = eip', 특히'= eip' 부분을 어디서 발견했는지 물어볼 수 있습니까? 나는'man setcap'이나'man capabilities'에서 그것을 볼 수 없습니다. – elmicha

+1

@elmicha 필자의 시스템에는 man setcap 페이지에 다음 줄이 포함되어 있습니다. _ 기능은 cap_from_text (3) _에 설명 된 형식으로 지정됩니다. cap_from_text 맨 페이지는 setcap이있는 경우에도 기본적으로 사용하지 못할 수 있습니다.예를 들어 CentOS의 경우 libcap-devel 패키지에서 사용할 수 있습니다. 추가 문자를 '연산자 플래그'로 설명합니다. 여기서 e = effective, i = inheritable 및 p = permitted입니다. –

관련 문제