Pregunta

( Esta pregunta ha título idéntico, pero el cuerpo cuestión se pregunta en el punto de vista de secuencias de comandos, por ejemplo su -c, no engañar a esto a que)

Tengo una aplicación Qt GUI que necesita llevar a cabo algunas operaciones de archivo en / etc basado en la entrada del usuario. Una opción sería, probablemente, utilizar system() con sudo, pero incluso eso requiere jugar con sudoers archivo en algún momento. También me gustaría no hacer system() además de script hacks para modificar los archivos, pero las operaciones de archivo adecuado.

¿Cuál es la mejor manera de elevar mediante programación mis derechos de aplicaciones para hacer esto?

Edit: como un bono, que estaría bien si funcionaría en Maemo / MeeGo / otros dispositivos de mano también (que yo sepa PolicyKit no está disponible allí ..)

¿Fue útil?

Solución

Me gustaría escribir un programa separado por completo. Algo a lo largo de las líneas de este filosofía . Básicamente - escribir un programa simple que hace exactamente lo que necesita, y controlar su comportamiento con los permisos de archivo en el sistema de archivos. Principalmente,

hacer lo menos posible en los programas setuid .

Un programa setuid debe operar en una ambiente muy peligroso: un usuario es bajo el control completo de sus FDS, args, Environ, cwd, TTY, rlimits, temporizadores, señales, y más. Peor aún, la lista de elementos controlados varía desde UNIX de un proveedor a otro, por lo es muy difícil de escribir portátil código que limpia todo.

De los veinte Sendmail más reciente los agujeros de seguridad, sólo trabajaban once porque todo el sistema sendmail es setuid.

Sólo un programa qmail es setuid: qmail-cola. Su único propósito es añadir un nuevo mensaje de correo a la salida cola.

Y,

Do lo menos posible como root .

Todo el sistema se ejecuta como sendmail raíz, por lo que no hay forma de que su los errores pueden ser capturados por la sistema operativo incorporado en protecciones. En contraste, sólo dos programas de qmail, qmail-iniciar y qmail-lspawn, ejecute como root.

Otros consejos

Se puede usar PolicyKit, que está reemplazando gradualmente gksu / su / sudo, especialmente en Ubuntu, por su mayor seguridad y de grano fino control debido a la elevación de Acciones , no todo el programa.

Crear un ayudante setuid programa que hace solamente las cosas que quiere hacer, y < a href = "http://en.wikipedia.org/wiki/Fork-exec" rel = "nofollow noreferrer"> tenedor / exec la aplicación de la misma. A continuación, colocar privilegios en el proceso hijo. Ambas aplicaciones pueden comunicarse a través de tuberías, tomas de corriente, o algo por el estilo.

Tenga en cuenta que los programas setuid son un riesgo para la seguridad y por lo que debe tener mucho cuidado cuando se implementa una.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top