2010-07-06 12 views
6

Esto se trata de que yo esté estresado jugando el juego "escriba una orden y recuerde que debe preceder al sudo o se abofetearán sus dedos".Invocación automática de gksudo como UAC

Me pregunto si es posible de alguna manera configurar mi sistema Linux o shell de modo que cuando me olvidé de escribir, p. "sudo apt-get install emacs", en lugar de simplemente decirme que hice algo mal, se lanzaría gksudo, lo que me permitiría reconocer mis credenciales y seguir moviéndome. Al igual que UAC lo hace en Windows.

googlear no me ha ayudado todavía ..

Así es esto posible? ¿Me he perdido algo? ¿O estoy pidiendo un círculo cuadrado?

Editar 2010 25 de julio: Gracias a todos por su interés. Desafortunadamente, las respuestas y las explicaciones de Daenyth y bmargulies son lo que anticipé/temía, ya que me era imposible buscar en Google una solución antes de enviar esta pregunta. Espero que alguna persona agradable algún día brinde una solución efectiva para esto.

BR, Cristiano

+0

Algunos programas devuelven 'errno' como el código de salida, en este caso, cualquier programa que sale con' EACCESS' sería un candidato. De lo contrario, es posible que desee reemplazar glibc con una versión que verifique los resultados de las llamadas al sistema para 'EACCESS' y ofrezca elevación. –

+0

Para el registro, Windows no tiene aquí la funcionalidad que le pedía a Linux. En Windows salida cosas con ERROR_ACCESS_DENIED y no quedar relanzado automáticamente - es sólo que en Windows, hay convenciones que las aplicaciones deben relanzar si no tienen los permisos correctos. aptitude en Debian también lo hace, por ejemplo. Además, hay una bandera en los binarios de Windows que solicita elevación cuando se ejecuta a través del shell, pero una vez más eso no cubre su caso de línea de comandos. –

Respuesta

0

No hay manera de hacer esto da la pila de software de Linux actual. Además, MS has a patent on this behavior-present a user interface identifying an account having a right to permit a task in response to the task being prohibited based on a user's current account not having that right.

+0

IANAL, pero parece que si la ventana emergente no pre-seleccionar una cuenta a 'su' para, a continuación, no está cubierto por la patente. La patente también excluye cuentas con 'derechos ilimitados' que parecerían referirse a 'raíz'. –

+0

Es probable que sea válido debido a la técnica de todos modos, pero vale la pena ser consciente de. – Daenyth

0

No creo que esto realmente funciona de una manera general (automáticamente decidir qué aplicación tiene derechos de administrador). Sin embargo, usted podría hacer alias como esto para cada aplicación:

alias alias apt-get='gksudo apt-get' 

Si ahora introduce apt-get install firefox el gnomo pide la contraseña de administrador. Puede almacenar los comandos en ~./bashrc

+0

Lo siento, pero esto no se ajustaba a mis necesidades. Lo que estoy buscando es un botón "Linux decide cuándo preguntar" en algún lugar que lo activará o desactivará para cualquier aplicación. Gracias por la sugerencia. –

0

Se puede usar un script como el siguiente:

#!/bin/bash 
[email protected] 
if [ $? -ne 0 ]; then 
    sudo [email protected] # or "gksudo [email protected]" 
fi 

Esto ejecutará una orden dada en las discusiones con un prefijo sudo si el comando regresó con un no código de retorno cero (es decir, si falló). Úselo como en "SCRIPT_NAME apt-get install emacs", por ejemplo. Puede guardarlo en algún lugar de su $ PATH y configurarlo como un alias como esto (si lo guardó como do_sudo):

alias apt-get='do_sudo apt-get' 

Editar: Eso hace no trabajo para programas como synaptic cuales hacer funciona para usuarios que no son root, pero les dará menos privilegios. Sin embargo, si la aplicación falla cuando se invoca sin privilegios de root (como apt-get), funciona bien.

+1

Esto es extremadamente frágiles y propensos a romperse o hacer lo incorrecto – Daenyth

1

Puede hacer lo que quiera con una función de enlace preexec, similar al paquete de comando no encontrado.

3

Linux no permite esto. A diferencia de Windows, donde cualquier programa puede abrir un cuadro de diálogo y UAC está en el kernel, los programas Linux no son necesariamente compatibles con GUI, y sudo no está, en este sentido, en el kernel. Un programa no puede hacer una llamada para elevar el privilegio (a menos que se haya iniciado con privilegios para comenzar y se haya establecido intencionalmente abajo). sudo es un ejecutable independiente con privilegio de setuid, que verifica el permiso. Si le gusta lo que ve, bifurca el shell para ejecutar la línea de comando. Esto no se puede dar vuelta al revés.

Como se sugirió en otras publicaciones, es posible que pueda encontrar algún 'juego de consola' para organizar la ejecución de sudo para alguna lista enumerada de comandos, pero eso es todo lo que obtendrá.

+0

No es necesario ningún derecho especial a 'gksudo' ejecutivo de embargo. –

+1

Es cierto. Un programa podría relanzarse a través de fork/exec de gksudo. Habría algunos desafíos de seguridad interesantes al escribir el estado para leer en el relanzamiento. – bmargulies

0

En el caso en el que desea que se ejecute siempre un comando como root, pero ya podría ser raíz, se puede resolver esto, envolviendo un poco de escritura del golpe de evitarlo:

#!/bin/bash 
if [ $EUID = 0 ]; then 
    "[email protected]" 
else 
    gksudo "[email protected]" 
fi 

Si se llama a este algo así como alwaysroot.bash y colocarlo en el lugar correcto en su camino, entonces usted puede llamar a su otro programa como este:

alwaysroot.bash otherprogram -arguments... 

incluso se maneja argumen ts con espacios en correctamente.

Cuestiones relacionadas