hacer que todos los procesos de un usuario dado puedan ser eliminados por cualquier persona

15

En un servidor compartido, me gustaría tener algunos usuarios de muy baja prioridad, de modo que cada vez que otro usuario (también sin privilegios de root) necesite los recursos, pueda eliminar cualquiera de los procesos de los usuarios de baja prioridad.

¿Es posible permitir algo así?

Aslan986
fuente
1
Dar sudo -u usuario kill derecho a todos los usuarios necesarios posiblemente en un grupo
Kiwy
44
Realmente espero que estos usuarios de baja prioridad sean usuarios humanos reales, y que usted y sus amigos sean BOFH de pura raza . Hace la pregunta mucho más intrigante.
tubería
@DavidFoerster, un problema es que incluso cuando la CPU no está al 100%, el proceso de baja prioridad puede llenar el caché del procesador, etc. Del mismo modo con acceso al disco, etc.
Ian Ringrose

Respuestas:

24

Otorgue a los otros usuarios permiso para eliminar los procesos como el usuario de baja prioridad a través de

sudo -u lowpriouser /bin/kill PID

Un usuario solo puede señalar sus propios procesos, a menos que tenga privilegios de root. Al utilizar sudo -uun usuario con la configuración correcta en el sudoersarchivo, puede asumir la identidad del usuario de baja prioridad y anular el proceso.

Por ejemplo:

%killers ALL = (lowpriouser) /bin/kill

Esto permitiría que todos los usuarios del grupo se killersejecuten /bin/killcomo lowpriouser.

Consulte también el sudoersmanual de su sistema.


En un sistema OpenBSD, lo mismo se puede hacer a través de la doasutilidad nativa con una configuración como

permit :killers as lowpriouser cmd /bin/kill

Luego

doas -u lowpriouser /bin/kill PID

Consulte los manuales para doasy doas.conf.

Kusalananda
fuente
Si permite cualquier comando de matar, puede abusar de él para enviar señales no relacionadas con la finalización de procesos arbitrarios, lo que puede ser un problema de seguridad.
bosque
@forest Es por eso que no sugiero que todos puedan usar la cuenta raíz para ejecutar kill. Tenga en cuenta también que sugiero usar un grupo de usuarios ( killers), no todos los usuarios.
Kusalananda
Pero lo que quiero decir es que eso permitiría que ese grupo envíe kill -HUP, no solo kill -TERM.
bosque
@forest Sí. Permite enviar señales a procesos de su propiedad lowpriouser. Si desea restringir las señales TERM, escriba un script de shell envolvente /bin/killy permita que las personas lo usen en lugar de hacerlo /bin/kill.
Kusalananda
1
%killers ALL = (lowpriouser) /bin/kill -(9, 15) [0-9 ]*
bosque
5

No debe matar los procesos, si son de baja prioridad consumirán pocos recursos.

Para que sean de baja prioridad, cambie su prioridad manualmente o use un demonio como el autoniceque escribí para DEC OSF / 1 hace muchos años (c. 1994) que busca trabajos de larga duración y reduce progresivamente su prioridad cuanto más tiempo se ejecutan .

EDITAR hay un paquete llamado andque ofrece esta funcionalidad para los Unices modernos.

Alnitak
fuente
Una cuestión es que incluso cuando la CPU no está al 100% proceso de baja prioridad puede llenar el procesador caché, etc. Lo mismo sucede con el acceso a disco etc
Ian Ringrose
@IanRingrose solo las tareas que se han programado para ejecutarse pueden ocupar caché o realizar accesos a disco.
Alnitak
4

Creo que aborda el problema desde un ángulo incorrecto: si un proceso se ejecuta con una configuración de baja prioridad (CPU, E / S), no debería afectar mucho a otros procesos porque no se programará para ejecutarse. En cuanto al uso de la memoria, si la memoria principal es escasa y el proceso no se programó para ejecutarse en mucho tiempo (por ejemplo, debido a restricciones de CPU y E / S), sus páginas "limpias" se descartan y sus páginas "sucias" se comprometen o intercambiados y ya no afectan el rendimiento de otros procesos.

Conclusión: con la configuración de prioridad correcta y suficiente espacio de intercambio, debería ser innecesario eliminar trabajos de baja prioridad para hacer "espacio" para tareas más importantes; en cambio, el núcleo se encargará de poner el primero en reposo a favor del segundo.

David Foerster
fuente
1
"Baja prioridad" también podría significar "no importante" sin el significado implícito "ejecutar con prioridad de CPU disminuida". Sin embargo, esto no se hace explícito en la pregunta.
Kusalananda
@Kusalananda: Estoy de acuerdo en que esto no es explícito en la pregunta, pero mi respuesta dice que debería ser en realidad.
David Foerster
1
Sin embargo, no es tan simple. Incluso un proceso de baja prioridad puede detener el sistema, especialmente si tiene restricciones de memoria: dependiendo de cómo estén configuradas, hará que el proceso se intercambie. El intercambio causa E / S (que puede no estar incluida en la cuota de E / S del proceso) y también hará que el sistema sea menos sensible por órdenes de magnitud. Entonces, probablemente también desee eso en general (mientras que otros no necesitan los recursos), el proceso de baja prioridad puede obtener todos los recursos que necesita (lo que hace que los límites de memoria típicos sean inaplicables). Las acciones de CPU ayudan aquí.
Jonas Schäfer
@JonasWielicki, la antigua "forma unix" de intercambiar el proceso completo tenía su ventaja. Si recuerdo correctamente, HPUX puede algunas herramientas para resolver este problema en la década de 1990.
Ian Ringrose