cgroup을 관리하려면 루트 액세스가 필요합니까?


12

두 개의 다른 운영 체제 (Ubuntu 및 CentOS)에서 제어 그룹으로 작업하려고합니다. 묻고 싶은 것이 거의 없습니다.

cgcreate명령을 사용하여 제어 그룹을 작성하려고 하는데 시스템에 대한 루트 액세스가 필요한 것 같습니다. 지금까지 본 모든 예제는 컨트롤 그룹을 만들거나 수정하기 위해 루트 사용자가 될 필요는 없습니다.

루트 사용자 여야합니까? 최종 목표는 libcgroup API를 사용하여 제어 그룹을 작성하고 관리하여 자원을 제어하는 ​​C ++ 애플리케이션을 작성하는 것입니다. 그러나 C ++ 응용 프로그램은 루트 사용자가 실행하지 않습니다. 일반 사용자 일 수 있습니다.


1
wiki.archlinux.org/index.php/Cgroups는 약간의 정보를 가지고, 당신은해야합니다 일부 (이 자신이 아직 cgroup을에서 자세히보고하지 않음) 분명히 루트로 설정합니다.
Mat

그 웹 사이트는 세부 사항에 도움이되지 않습니다. 그것은 단지 높은 수준의 개요입니다.
Rambo

1
루트는 루트가 아닌 사용자가 관리 할 수있는 그룹을 설정할 수 있다는 것을 알려줍니다.
Mat

나는 얼마 전에 cgroup을 광범위하게 조사 했다. 그 정보는 당신에게 유용 할 수 있습니다. 그러나 나는 루트로 모든 것을하고 있었 으므로이 특정 질문에 대한 답이 없습니다.
와일드 카드

'editcgroup'그룹을 만든 다음 해당 그룹의 모든 사람이 'sudo cgcreate'및 'sudo cgdelete'를 수행하도록 허용
John Militer

답변:


4

일반적인 시나리오는 설정이다 cgcreate, cgset, cgdelete, cgget로 등을 루트 . 결국 많은 리소스를 빨아들이는 것을 막기위한 프로그램 / 스크립트는 일반 사용자로 실행됩니다. 따라서 루트로 설정하고 사용자로 사용 및 실행하십시오.

이것은 명령 의 -a-t매개 변수를 사용하여 cgcreate수행됩니다 (루트로 실행). 이미 그룹을 설정할 때 나의 경우에는:

cgcreate -t ​​monero : monero -a monero : monero -g 메모리, cpu : monerogroup

여기서 monero는 cgroup 제한 사항으로 프로그램을 실행하고 실행할 미래 사용자의 사용자 이름입니다. 하위 매개 변수 -a-t하위 매개 변수 의 미세한 차이는 의 매뉴얼 페이지를 참조하십시오 cgcreate.

남자 cgcreate

대부분의 경우 동일한 사용자입니다.

그런 다음 제한 사항을 설정하십시오 (여전히 root로).

cgset -r memory.limit_in_bytes = $ ((4 * 1024 * 1024 * 1024)) monerogroup

cgset -r cpu.shares = 128 monerogroup

다음을 원할 경우 입력 내용을 확인하십시오.

cgget -g 메모리 : / monerogroup | grep 바이트

그런 다음 궁극적으로 사용자, 내 경우에는 monero 및 올바른 폴더에서 사용자를 전환하십시오.

cgexec -g 메모리, cpu : monerogroup ./monerod

사용자가 특별히 권한을 설정함에 따라 권한에 어려움이 없습니다.


2

이것의 보안 영향을 제쳐두고 setuid비트를 설정할 수 있습니다

chmod +s /bin/cgcreate
chmod +s /bin/cgdelete

해당 프로그램을 실행하는 루트 사용자가 아닌 사용자에게 루트 권한을 부여합니다.

권장 사항은 정상적인 사용자 액세스를 제거하는 것입니다.

chmod 550 /bin/cgcreate
chmod 550 /bin/cgdelete

당신이 cgcreate IE를 사용할 수 있도록하고자하는 특별한 그룹을 생성 cgusers,

groupadd cgusers

해당 파일의 그룹 멤버쉽을 해당 그룹으로 변경하십시오.

chgrp cgusers /bin/cgcreate
chgrp cgusers /bin/cgdelete

그 모두는 모든 사용자 후 것을, 루트에 의해 운영 될 cgusers그룹, 실행 cgcreatecgdelete루트로 대신 자신있다. 당신은 당신이 올바른 그룹 아래 에이 힘을 갖고 싶어 회원이 필요합니다.


1

Cgroup은 궁극적으로 cgroup 파일 시스템을 통해 처리됩니다. cgroup을 생성하는 능력은 단지 그 / 그 아래에 디렉토리를 생성하고 파일에 쓸 수있는 능력이어야합니다. 보다 정교한 권한으로 cgroup FS를 마운트하거나 즉시 권한을 변경하면 특정 사용자가 작업을 수행 할 수 있어야합니다. 분명히 다른 사용자 프로세스의 프로세스 ID를 작업 파일에 추가 할 수 없습니다. 사용자 만 추가 할 수 있습니다.

나는 위의 것이 전 세계적이라고 확신하지 못한다. 즉, 특정 cgroup이이를 지원하지 않을 가능성이 있습니다.

전체적으로 가장 좋은 방법은 작업을 cgroup에 연결하도록 지시 할 수있는 cgroup 관리자를 사용하는 것입니다. cgmanager가 이와 같은 작업을 수행한다고 생각합니다.


1

짧은 대답은 '아니요'입니다.

cgroup의 생성 및 소유권 할당을 위해서는 루트 권한에 의존합니다. 그것을 해결할 수있는 확실한 방법은 없습니다.

그러나 cgroup을 만들고 특정 사용자 나 그룹에 소유권을 할당 할 수 있습니다.

사용자

$ u=$(whoami)
$ sudo mkdir /sys/fs/cgroup/cpuset/${u}
$ sudo chown -R ${u}: /sys/fs/cgroup/cpuset/${u}

그룹

$ g=MYGROUP && grep ^${g}: /etc/group || echo "Your group doesn't exist. Run \"mkgroup $g\" and repeat this command before you continue." 
$ sudo mkdir /sys/fs/cgroup/cpuset/${g}
$ sudo chgrp -R ${g} /sys/fs/cgroup/cpuset/${g}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.