Hola, acabo de completar una prueba técnica en Ubuntu y encontré un problema en el que necesitaba cambiar el usuario del proceso PHP para arreglar un sitio web roto. Creo que el usuario era "foo" pero necesitaba ser "www-data". Al final me dijeron que "controlar el proceso" era la solución, sólo quiero saber cómo hacerlo para referencia futura.
De la misma manera elegirías el usuario de un archivo (supongo) pero solo para un proceso. He buscado y buscado pero me pregunto si estoy buscando el comando incorrecto. ¿O tal vez esto se cambiaría en un archivo de configuración en algún lugar?
¡Gracias de antemano!
Respuesta1
No es posible cambiar externamente el usuario o grupo de un proceso en ejecución en Linux. Lo que puedes hacer es cambiar la configuración de lo que estés ejecutando para usar el nuevo usuario la próxima vez que se ejecute. Eso depende de cómo haya instalado y configurado PHP (o más bien, lo que sea que esté ejecutando PHP para usted: Apache, php-fpm, etc.).
Respuesta2
No puedes hacerlo, hombre, si tienes la amabilidad de compartirlo con nosotros. revisa este enlace: https://stackoverflow.com/questions/37401774/change-owner-of-a-currently-running-process
Respuesta3
En realidad, esto es un defecto de diseño del kernel de Linux: los cambios de credenciales ocurren sólo en el disco pero no en la memoria. Para decirlo específicamente, cuando se cambian las credenciales (UID, GID o lista de grupos suplementarios), todos los procesos existentes continuarán usando sus credenciales anteriores y disfrutarán de acceso a los datos previamente otorgados. Y no existe una única función API para propagar el cambio de credenciales en todo el sistema (es decir, en todos los procesos). Como resultado de este defecto, ningún programa a nivel de usuario puede hacer lo que usted desea. Necesitas un módulo del kernel para hacer eso. Acabo de intentar hacer uno y funciona en programas simples. (https://github.com/xuancong84/supgroup)
Sin embargo, en general no es una buena idea hacerlo porque en general un programa puede tener muchas interacciones, por ejemplo, identificadores de archivos abiertos, procesos/hilos secundarios ejecutándose en otros núcleos de CPU, tuberías vinculadas, dispositivos abiertos, etc. cambiar el UID/GID durante la ejecución puede generar muchos comportamientos indefinidos, entre los cuales algunos pueden causar errores (por ejemplo, tubería rota, comunicación de E/S cancelada), otros pueden resultar peligrosos (por ejemplo, falla del sistema). He probado que este programa funciona en programas simples (como nc -l 8080
), pero en un programa complejo mucho más grande que ejecuta muchos subprocesos en muchos núcleos de CPU y núcleos CUDA de GPU, que tiene una gran actividad de red y actividad de E/S de disco, no estoy seguro de qué pasará.