Estoy tratando de trabajar con grupos de control en dos sistemas operativos diferentes (Ubuntu y CentOS). Hay pocas preocupaciones que me gustaría preguntar.
Estoy tratando de crear un grupo de control usando el cgcreate
comando, y parece que requiere acceso de root en la máquina. Todos los ejemplos que he visto hasta ahora no dicen nada sobre la necesidad de ser el usuario raíz para crear o modificar grupos de control.
¿Es realmente necesario ser el usuario root? El objetivo final es escribir una aplicación C ++ que cree y administre grupos de control para controlar recursos utilizando la API libcgroup. Pero la aplicación C ++ no será ejecutada por ningún usuario root. Podría ser cualquier usuario normal.
Respuestas:
El escenario normal es que se establece
cgcreate
,cgset
,cgdelete
,cgget
, etc., hasta que la raíz . Eventualmente, el programa / script destinado a restringir la succión de muchos recursos se ejecutará como un usuario normal. Entonces, configurar como root, usar y ejecutar como usuario.Esto se está haciendo con los parámetros
-a
y-t
delcgcreate
comando (ejecutado como root). Entonces ya cuando estableces un grupo. En mi caso:donde monero es el nombre de usuario del futuro usuario que ejecutará y ejecutará el programa con las restricciones de cgroup. Para la fina diferencia entre los subparámetros
-a
y-t
consulte las páginas de manual decgcreate
.En la mayoría de los casos, es el mismo usuario.
Luego, configure las restricciones (aún como root):
Verifique sus entradas si desea:
Y luego eventualmente cambiar de usuario, en mi caso usuario monero, y de la carpeta correcta:
El usuario no tendrá ninguna dificultad con los permisos más o menos, ya que lo configura específicamente para él.
fuente
Implicaciones de seguridad de este lado, se puede establecer el
setuid
bitdar a los usuarios no root que ejecutan ese programa poder raíz.
La recomendación sería eliminar el acceso normal del usuario.
y cree un grupo especial que desee permitir que use cgcreate IE
cgusers
,y cambie la membresía del grupo en esos archivos a ese grupo:
Todo eso se ejecutará por root, después de eso, todos los usuarios del
cgusers
grupo se ejecutaráncgcreate
ycgdelete
como root en lugar de como ellos mismos. Solo necesitaría tener miembros a los que les gustaría tener este poder bajo el grupo correcto.fuente
Los grupos C se manejan en última instancia a través de los sistemas de archivos cgroup. La capacidad de crear cgroups debería ser simplemente la capacidad de crear directorios bajo esos / ellos y escribir en archivos. Si monta los FS de cgroup con permisos más elaborados, o si cambia sus permisos sobre la marcha, entonces ciertos usuarios deberían poder hacer cosas. Obviamente, no podrá agregar las ID de proceso del proceso de otros usuarios al archivo de tareas. Solo podrá agregar su usuario.
Dicho esto, no estoy seguro de que lo anterior sea global. Es decir, existe la posibilidad de que ciertos grupos c no admitan esto.
En general, el mejor enfoque es usar un administrador de cgroup que luego pueda recibir instrucciones para asociar tareas a un cgroup. Creo que cgmanager hace algo como esto.
fuente
La respuesta corta es no.
Para la creación y la asignación de propiedad de un cgroup, depende de los privilegios de root. No hay una forma confiable de evitarlo.
Sin embargo, puede crear un cgroup y asignar la propiedad a un determinado usuario o grupo.
Usuario
Grupo
fuente