¿Cómo puedo ejecutar una aplicación con una GUI como administrador desde una sesión de usuario no administrador?

33

Definí 2 cuentas de usuario:

  • uno con privilegio de administrador (con sudoderecho) => vamos a llamarlo adminuser.
  • un segundo sin ningún privilegio => vamos a llamarlo y configuro el inicio de sesión automático en este segundo usuario . normaluser
    normaluser

Entonces, cuando abro una normalusersesión y quiero ejecutar una aplicación con privilegios de administrador,
abro un terminal Ctrl+ Alt+ Ty:

su adminuser
sudo anyapplication ...

Funciona bien, sin tener que salir de la normalusersesión (no es necesario abrir una adminusersesión).


Pero, ¿qué debo hacer si la aplicación necesita ejecutarse con una GUI (interfaz gráfica de usuario)?
Pensé en eso:

su adminuser
gksu anyapplication ...

pero consigo

** (gksu:9122): WARNING **: the connexion is closed
No protocol specified
No protocol specified
(gksu:9122): Gtk-WARNING **: cannot open display: :0.0
Boris
fuente
Entonces la pregunta es: ¿por qué configuró su sistema de esta manera? ¿Crees que mejora la seguridad? No lo es :) En cambio, podría haber configurado el inicio de sesión automático en su cuenta de "administrador" para que no le pida una contraseña cuando inicie sesión; de todos modos, necesitará una contraseña cuando realice tareas administrativas.
Sergey
55
@Sergey Si a normaluserveces lo usa alguien que no debería poder ejecutar comandos como root, hacer que normaluserun no administrador definitivamente mejore la seguridad . Los peligros de darle a alguien una cuenta de usuario pero no dejarle saber su propia contraseña van mucho más allá de la situación de Boris en problemas y complejidad. Si desea una explicación completa de por qué eso es problemático, sugiero publicar una nueva pregunta, pero 3 de las razones son que un usuario debería poder bloquear y desbloquear la pantalla, cerrar sesión y volver a iniciar sesión con un tipo de sesión diferente, y descifrar ecryptfsdatos.
Eliah Kagan
2
exactamente, para mí no tiene sentido usar la PC de mi familia para que todos sepan la contraseña de administrador para desbloquear la pantalla. Esto normalusery la adminuserconfiguración es la regla de oro.
Boris
1
Es justo que me diera la impresión de que OP estaba usando la normalusercuenta para el trabajo diario y la admincuenta para realizar tareas administrativas, lo que realmente no mejora nada. En una máquina multiusuario, esto tiene mucho sentido.
Sergey

Respuestas:

5

PAM puede cuidarlo

Esto funciona para mí en Ubuntu 16.04 (editar: también funciona en 18.04 LTS):

pon la linea:

session optional pam_xauth.so

en algún lugar de:

/etc/pam.d/su

y / o

/etc/pam.d/sudo

y luego haciendo "su -" o "sudo su -" Puedo usar aplicaciones gráficas como root.

Gerben
fuente
Confirmando que esto también funciona en Kubuntu 16.04. ¡Gracias!
akhmed
¡Gracias, a mí también me funciona el 18.04! parece ser la mejor alternativa para suxy gksuque no están disponibles ya.
Boris
29

Terminología

En esta respuesta:

  • normaluseres un usuario normal que no es administrador y no puede ejecutar comandos como rootcon sudo.
  • admines un administrador que puede ejecutar comandos como rootcon sudo. (Por supuesto, cualquier comando gráfico debe usar una interfaz gráfica como gksu/gksudo , y no sudodirectamente).
  • anyapplicationes el nombre de la aplicación gráfica que normaluserquiere ejecutarse como root. normaluserconoce adminla contraseña y se le ha dicho (presumiblemente) que puede usarla para este propósito.

El problema

La causa de su problema, y ​​la razón por la cual la mayoría de las otras respuestas hasta ahora no funcionan (con la excepción de la excelente respuesta de Marty Fried ), es:

  • gksuse puede configurar para usar sudo o su como su backend. El comportamiento predeterminado de gksuen Ubuntu es actuar como una interfaz para sudo, no para su. Es decir, por defecto, gksuy gksudocomportarse exactamente igual . Ver la página de manual .
  • normaluserno es administrador y, por lo tanto, no puede ejecutar comandos como rootcon sudo. sudosolicita la contraseña del usuario que la ejecuta , no la contraseña del usuario en el que desea convertirse . No poder usar su contraseña para realizar acciones como personas que no son usted es lo que significa no ser administrador .
  • normaluser, Siempre que no sea una cuenta de invitado, puede ejecutar comandos como otro usuario consu , poniendo en la contraseña de otro usuario . Pero gksuactúa como una interfaz para sudo, no su.
  • normaluser no poder directamente ejecutar cualquier comando como root, porque normaluserno se puede utilizar sudo, y nadie puede llegar a ser rootcon suporque no hay ninguna rootcontraseña .

La solución

La solución requiere escribir un comando que realice dos pasos de autenticación:

  • normaluser debe convertirse admin para ejecutar un comando gráfico. Para hacer esto, normaluserdebe ejecutarse gksucon el -windicador para que se ejecute en modo su en lugar del modo sudo predeterminado , y el -uindicador para ejecutar el comando como en adminlugar de root.
  • El comando se ejecuta como admindebe invocar gksu sin la -wbandera a utilizar sudopara convertirse root.

Aquí está el comando (sí, lo he probado ;-) ):

gksu -w -u admin gksu anyapplication

Se le pedirá una contraseña dos veces :

  1. Primero, debe ingresar adminla contraseña para poder normaluserejecutar un comando como adminen el subackend.
  2. Segundo, debes ingresar admin la contraseña para poder adminejecutar un comando como rooten el sudobackend.

Está bien. Ingresa adminla contraseña dos veces.

Notas misceláneas:

  • Si lo desea, puede reemplazar el segundo gksu con gksudopara que sea menos confuso. En Ubuntu, son equivalentes. (También puede reemplazar el primero gksucon gksudo, pero eso sería extremadamente contradictorio y confuso).
  • -wes la forma corta de --su-mode.
  • -Ses la forma abreviada de --sudo-modepero no tiene que usarse porque sudo-mode es el valor predeterminado.
  • Es posible que desee probar esto con un comando bastante inofensivo primero, para asegurarse de que haga lo que desea. (Lo hará, pero no es necesario que confíes en mí en eso). Por ejemplo:
    gksu -w -u admin gksu xclock
    xclock es una buena aplicación simple de ventana de reloj.
Eliah Kagan
fuente
1
PERFECTO, agrego un alias en mi .bashrc de inmediato para evitar olvidar este consejo inteligente
Boris
No sé por qué, pero ahora (con ubuntu 14.04) tengo que comenzar sudopara que funcione. Ejemplo:sudo gksu -w -u thedude gksu xclock
Boris el
FYI: kdesudoparece funcionar de manera más limpia, al menos en KUbuntu.
MDTech.us_MAN
desafortunadamente, parece que gksuya no está disponible
Boris
11

Una forma que probablemente funcionará es usar "sux" en lugar de "su" cuando cambie por primera vez al usuario administrador. sux soluciona el problema de ejecutar aplicaciones x del usuario falso. Está en el repositorio estándar y se puede instalar ingresando sudo apt-get install suxen una línea de comandos.

Luego, simplemente use "sux" en lugar de "su" y debería funcionar de la manera esperada.

Reutilicemos el ejemplo de la aplicación xclock:

sux admin
gksu xclock
Marty Fried
fuente
3
No hay más versiones de suxUbuntu 14.04 64bits;(
Boris
2
Parece que hay una alternativa
Boris
@Boris Es un script de shell, puede descargarlo de un repositorio histórico y ponerlo en su camino, por ejemplo, de packages.debian.org/source/wheezy/sux
Nadie el
2

pkexec

Hay una alternativa omnipresente a kdesudo y gksu, pkexecque proviene del policykit-1paquete que requieren muchos paquetes.

int_ua
fuente
Recomiendo la expansión de esta respuesta para explicar cómo un usuario normal (que no es un administrador y no puede convertirse en la raíz con sudoo polkit), que conoce la contraseña de un administrador (es decir, de alguien que puede llegar a ser la raíz con sudoo polkit), se puede utilizar pkexecpara ejecuta un programa gráfico como root. Esa es la pregunta que se hace aquí. No es claro para mí que pkexeclo hará, al menos sin necesidad de editar archivos de configuración ampliamente, sobre todo porque pkexecgeneralmente no pueden ser utilizadas para ejecutar programas gráficos arbitrarias (sin perfiles polkit) en absoluto . ¿Hay alguna manera?
Eliah Kagan
@EliahKagan Esto funciona en Ubuntu con la configuración predeterminada, solo ejecuta pkexec commandy funciona. La configuración está en el archivo /usr/share/polkit-1/actions/org.freedesktop.policykit.policyque instala el paquete con nombre. Y en realidad requiere que escriba la contraseña de administrador solo una vez
pqnet
0

En lugar de

su admin
gksu cualquier aplicación ...

Te sugiero que pruebes gksu -u admin anyapplication, donde haces todo usando el gksucomando en sí. También tenga en cuenta que debe ingresar la contraseña del usuario mencionado en el comando, es decir, en este caso debe ingresar la contraseña del administrador .

l0n3sh4rk
fuente
1
En un sistema Ubuntu configurado de manera predeterminada, si se normaluserejecuta gksu -u admin anyapplication, solicitará que normaluserla contraseña se vuelva a adminusar en el sudobackend, al igual que gksu anyapplicationse solicitará que normaluserla contraseña se vuelva a rootusar en el sudobackend. Ambos fallarán por la misma razón normaluser: no tiene el poder para ejecutar comandos sudo.
Eliah Kagan
-1

Aquí está el comando para lograr esto.

gksu app-name

Ejecútalo sin correr suprimero. Solo necesita ejecutar el comando anterior desde una sesión de usuario normal y la aplicación se ejecutará como root.

SirCharlo
fuente
1
no funciona - tenga en cuenta que estoy intentando desde una sesión de usuario sin privilegios
Boris
¿Cuál es el mensaje de error?
SirCharlo
ingresando mi normalcontraseña de usuario - Recibo el mensaje "Imposible iniciar como usuario root"
Boris
ingresando mi superuser/admincontraseña - Recibo el mensaje "contraseña incorrecta, inténtalo de nuevo"
Boris
-1

Deberías usar:

gksudo AppName

Esto abre primero una solicitud de contraseña gráfica (la contraseña de su usuario), y luego inicia la aplicación GUI como root (acabo de intentarlo, realmente lo hace. Algo curioso: lo intenté gksu AppNameinmediatamente después, y eso también funcionó, ya que es probablemente se supone que debe hacerlo, como sugiere el prefijo "gk". Así que no estoy completamente seguro de dónde se puede encontrar su problema).

Izzy
fuente
1
funciona en su caso porque ha intentado desde una sesión de usuario administrador con sudo right. ¿Qué pasa con una sesión de usuario no administrador sin sudo correcto?
Boris
Utilicé gksudo desde una ventana de terminal normal con un usuario no administrador (mi propio usuario). Sin embargo, tienes razón para el segundo intento, ya que todavía tenía permisos de sudo. Pero el problema de Boris es diferente: su aplicación no puede conectarse a X, que en mi caso funcionó las dos veces. Como puede ver en la pregunta original, sudoen modo texto está trabajando para él.
Izzy
-1

Solo hay un superusuario y ese es root.

El usuario 1 es administrador y tiene derechos de sudo.
El usuario 2 no es administrador y no tiene derechos de sudo.

Intente iniciar sesión como usuario 1 y luego use el comando

gksudo app-name  

(reemplazando el nombre de la aplicación con el nombre de la aplicación)
Espero que ayude, hágamelo saber. : o)

EDITAR: Más información según lo solicitado

Si solo eres tú en la computadora,
entonces usar el usuario 1 (que tiene permiso para usar sudo)
no es diferente a usar el usuario 2 (que no tiene permiso para usar sudo).
El usuario 1 tiene los mismos derechos que el usuario 2.
A menos que el usuario 1 emita un comando con el prefijo sudo y / o proporcione su contraseña para permitir que las aplicaciones se ejecuten con privilegios de root.
La única diferencia es que el usuario 2 no puede ejecutar aplicaciones como root.

Espero que eso te lo explique un poco. : o)

Proyecto Fernhill Linux
fuente
gracias por la aclaración entre superusuario y administrador, editaré mi pregunta. ¿Qué quiere decir con "iniciar sesión como usuario 1" => abrir la sesión con el usuario 1? bueno, eso es lo que me gustaría evitar.
Boris
agregó más información para responder según lo solicitado: o)
Proyecto Fernhill Linux
bueno, mi esposa y mis hijos están usando el user2 con el inicio de sesión automático, así que prefiero no tener sudo con ese usuario.
Boris
Suena como una buena idea, yo también tengo hijos; o). ¿Intentó iniciar sesión como usuario1 y ejecutar el comando?
Fernhill Linux Project
1
Sí puedo, pero es doloroso cambiar la sesión del usuario. Por lo general, tengo que hacerlo varias veces: vaya a la sesión de administrador para definir algunas configuraciones, cambie a la sesión de usuario normal para probar y, una y otra vez, es muy bueno poder hacerlo en la sesión normal. La mayoría de las veces lo manejo con su admin+ sudo ...ejemplo sudo vi file, excepto para la aplicación con GUI
Boris