2008-09-15 8 views
8

Quiero un proceso con privilegios de usuario (no raíz) para iniciar nuevos procesos como usuario nobody. He intentado una llamada directamente a setuid que falla con -1 en EPERMUbuntu 8.04:¿Cómo ejecuto un programa como nadie?

#include <sys/types.h> 
#include <unistd.h> 

int main() { 
     setuid(65534); 
     while (1); 
     return 0; 
} 

¿cómo debo hacer esto en su lugar?

Respuesta

14

requieren asistencia y mucha confianza del administrador del sistema. Los usuarios ordinarios no pueden ejecutar el ejecutable que elijan en nombre de otros usuarios, punto.

Puede agregar su aplicación al /etc/sudoers con la configuración adecuada y podrá ejecutarla como con sudo -u nobody. Esto funcionará tanto para scripts como para ejecutables binarios.

Otra opción es que ella hará chown nobody y chmod +s en su ejecutable binario y podrá ejecutarlo directamente. Esta tarea debe repetirse cada vez que cambie su ejecutable.

Esto también podría funcionar para las secuencias de comandos si va a crear un pequeño ejecutable auxiliar que simplemente hace exec("/home/you/bin/your-application"). Este ejecutable puede hacerse suid-nobody (ver arriba) y puede modificar libremente your-application.

creo que sirve,

+1

Gracias. Un comentario adicional: parece que también necesita usar seteuid(), ya que setuid está reservado para root. Administro mi propio escritorio de Ubuntu, pero agradezco la preocupación de quienes no lo hacen. – jldugger

+0

seteuid() también tiene un uso muy limitado por parte del usuario no root. Las páginas Man en seteuid() y setreuid() tienen casi todos los detalles. – squadette

+0

Marque la respuesta como "aceptada" si es así. Gracias, – squadette

1

Por lo que yo sé, no puedes hacerlo a menos que seas root o hayas configurado sudo para poder cambiar de usuario. O bien, puede hacer que su ejecutable tenga configurado el bit de suid y que nadie lo tenga. Pero eso también requiere acceso a la raíz.

0

calife es una alternativa a sudo.

Calife es pequeño programa que permite al administrador del sistema UNIX para convertirse en root (u otro usuario) en su/sus máquinas sin dar la contraseña de root pero su/su propio.

0

El usuario "nobody" sigue siendo un usuario. No estoy seguro de cuál es su razonamiento para que el programa se ejecute como nadie, no va a agregar seguridad adicional. Es más probable que te abres a otros problemas.

Seguiría la recomendación de squadette de usar una aplicación de ayuda.

+0

Esta pregunta fue inspirada por el navegador Google Chrome, que utiliza una curiosa tecnología de Vista para mejorar la seguridad. El principio de privilegio mínimo se aplica aquí; nadie es un usuario, pero tiene poco o ningún permiso de escritura. – jldugger

0

Hoy me encontré con el proyecto setuid-sandbox mientras leía LWN, que hace lo que estoy buscando de la manera adecuada.

Cuestiones relacionadas