Necesito un equivalente de gksu en 18.04

23

He leído muchos hilos sobre la eliminación de gksu de muchos sabores de Linux, incluido Ubuntu 18.04. Muchos afirman que gksu es una abominación y que ningún usuario debería necesitar usar algo así. Tengo 2 ejemplos en los que, hasta donde sé, debo tener algo que me permita ejecutar como root (no solo para editar archivos).

Primero, necesito iniciar mysql solo después de abrir una carpeta cifrada en el comando (GUI). Esto significa tener un script ejecutado por el sistema de cifrado que inicia el servicio mysql. Eso tiene que hacerse como root, por lo que uso gksu en ese script de inicio que me pide una contraseña. ¿De qué otra forma puedo iniciar un servicio desde un sistema GUI?

También ejecuto las copias de seguridad del sistema Ubuntu como root, de lo contrario no se pueden hacer copias de seguridad de muchos archivos del sistema. Entonces, el archivo de escritorio usa gksu para iniciar la copia de seguridad.

pkexec parece complicado, necesita archivos de políticas. ¿Es esa la única alternativa, y si es así, por qué es más seguro?

Otras respuestas a preguntas similares no parecen abordar problemas individuales que las personas tienen ahora que gksu ya no existe (o es más difícil de encontrar ...). Creo que tales preguntas de usuarios no expertos se beneficiarían de respuestas más detalladas. Ahora tengo algunos, por lo que me gustaría responder a mi propia pregunta.

pastim
fuente
¿ pkexecFunciona para ti en lugar de gksu?
Thomas Ward
@karel estuvo de acuerdo, aunque esa publicación no establece claramente el "reemplazo" pkexec. (tienes que buscarlo)
Thomas Ward
2
También puede intentar usarlo sudo -H GUI-programy si Wayland tiene este enlace, eso podría ser útil ... hay soluciones, si tiene una herramienta GUI, que funcione bien para usted y necesite permisos elevados.
sudodus
3
Este es un tema controvertido pero, en pocas palabras, ejecutar aplicaciones gráficas como root es un riesgo de seguridad. Aunque usted, y muchos otros, pueden no estar de acuerdo con esto, Ubuntu y muchas otras distribuciones desaconsejan ejecutar aplicaciones gráficas como root. Ubuntu está en proceso de escribir soluciones alternativas, pkexec y otras políticas. Puede presentar un informe de error y los desarrolladores trabajarán en una solución a los programas que consideren que deberían hacerlo, como los administradores de paquetes. Esto es complejo ya que involucra a X y Wayland. Alternativamente, use aplicaciones no gráficas o escriba las suyas propias. El cifrado no requiere una interfaz gráfica de usuario
Panther
Uso gnome-encfs-manager, que proporciona una interfaz gráfica de usuario para montar carpetas cifradas. Proporciona un script que se ejecutará cuando se monte la unidad. En ese script necesito iniciar mysql. ¿De qué otra manera puedo hacer esto? En cuanto a wayland, no permitir guis sinápticos o separados es ridículo desde el punto de vista de un usuario de escritorio doméstico común. Son invaluables. Los sistemas pueden ser tan seguros que nadie quiere usarlos: hay un equilibrio, y en este caso particular (wayland) el usuario debe tener razón.
pastim

Respuestas:

8

Sé que se dice que hay respuestas a esto en otros lugares, pero no he encontrado ninguna de ellas lo suficientemente clara y simple para que pueda resolver este problema. Así que busqué en muchos lugares y se me ocurrió esto. Todavía no entiendo por qué la comunidad Linux ha decidido hacernos la vida tan difícil a los usuarios simples de escritorio (y he tratado de entender muchas explicaciones), pero así es la vida. Uso la GUI para casi todo, solo uso la ventana de terminal cuando es necesario. Por lo que puedo decir, las soluciones que usan opciones de sudo no ayudan con esto. Así que tengo .desktoparchivos y scripts que hacen todos los trabajos que uso regularmente.

Hay dos soluciones básicas.

1. Vuelva a instalar gksu

Esta solución puede o no durar. Los técnicos anti-gksu pueden encontrar una manera de detenerlo. Pero mientras tanto, descargue 2 .debarchivos de libgksu (x64) y gksu (x64) . Instale libgksu2 y luego gksu usando gdebi o cualquier herramienta de instalación que quiera usar. Esto funcionó para mí.

2. Uso pkexec

Como una solución (con suerte) a más largo plazo, logré que pkexec funcione para las herramientas que necesito.

  1. Para iniciar un servicio desde un script. Resulta que ni gksu ni pkexec son necesarios. Justo start service xyzy te pedirá tu contraseña.

  2. Para editar archivos raíz, o para abrir nautilus como root, vea Cómo ejecutar Gedit y Nautilus como root con pkexec en lugar de gksu - Web Upd8 . Esto proporciona dos archivos 'polkit' para pkexec, que le permiten usar un script que contiene pkexec geditpara editar un archivo raíz, y de manera similar para nautilus. Las instrucciones están todas en esa página web. Ahora estoy usando 'filemanager-actions' para proporcionar acciones de clic derecho para ejecutar gedit o nautilus como root.

  3. Ejecuto deja-dup como root para copias de seguridad del sistema central. Hago esto con poca frecuencia, excluyendo /home(porque /homehago copias de seguridad frecuentes que no necesitan acceso root). Para que esto funcione, tomé una copia del archivo utilizado en el paso 2 para gedit y lo edité para deja-dup. Realmente no entiendo el contenido, pero funciona, tanto para copias de seguridad como para restaurar archivos, utilizando pkexec backupun script iniciado desde un archivo .desktop. Agregué este nuevo archivo a /usr/share/polkit-1/actionscontener:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD polkit Policy Configuration 1.0//EN" "http://www.freedesktop.org/software/polkit/policyconfig-1.dtd">
    
    <policyconfig>
      <icon_name>deja-dup</icon_name>
    
      <action id="org.gnome.DejaDup">
        <description gettext-domain="deja-dup">Backup</description>
        <message gettext-domain="deja-dup">Privileges are required to backup system files</message>
        <defaults>
        <allow_any>no</allow_any>
        <allow_inactive>auth_admin</allow_inactive>
        <allow_active>auth_admin</allow_active>
         </defaults>
        <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/deja-dup</annotate>
        <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
      </action>
    
    </policyconfig>
    

    Tenga en cuenta que hay otro archivo deja-dup en este directorio, que afirma ayudar con la restauración de archivos, pero no pude hacerlo funcionar. Este nuevo archivo debe tener un nombre único, como org.gnome.DejaDupNew.policy.

Estoy, por ahora, corriendo sin gksu. Intentaré continuar ...

pastim
fuente
El comando para iniciar la copia de seguridad fue pkexec deja-duppara mí, después de agregar el archivo como usted describió. El cuadro de diálogo me permite elegir primero la configuración, lo cual es genial.
wbloos
Poner un archivo de política /usr/share/polkit-1/actionsfue, de hecho, la forma de crear un iniciador de escritorio con pkexecpermisos elevados . Aquí hay otro ejemplo .
Serge Stroobandt
4

Nautilus Admin ( nautilus-admin ) es una extensión simple de Python para el administrador de archivos Nautilus que agrega algunas acciones administrativas al menú contextual:

  • Abrir como administrador: abre una carpeta en una nueva ventana de Nautilus que se ejecuta con privilegios de administrador (root).
  • Editar como administrador: abre un archivo en una ventana de Gedit que se ejecuta con privilegios de administrador (root).

Para instalar Nautilus Admin en todas las versiones compatibles de Ubuntu, abra el terminal y escriba:

sudo apt install nautilus-admin

He probado todas las alternativas a gksu en 18.04 para otras aplicaciones además de Archivos y Gedit, y la que parece funcionar más consistentemente es:

sudo -H appname &> / dev / null

pkexeces el mejor reemplazo para gksu cuando funciona porque proporciona mayor seguridad, pero es muy inconsistente en diferentes aplicaciones (por ejemplo, no funciona con Gedit) y puede causar fallas en algunas aplicaciones. sudo -ies innecesariamente difícil de administrar porque eleva sus privilegios para rootear durante un período prolongado de tiempo cuando solo necesita ser root para ejecutar un solo comando.

karel
fuente
3

Utilizo un script llamado sgeditque hereda las preferencias del usuario para la fuente, las pestañas y las extensiones. Se utiliza en sudo -H geditlugar de gksu geditpara la estabilidad en el entorno GUI. Solicita una contraseña.

Haber sudoheredado la geditconfiguración de su cuenta de usuario

sgedit 80 columna derecha slider.gif

En este ejemplo, la configuración de usuario para nombre de fuente, tamaño de fuente, tabulaciones, convertir pestañas en espacios, resaltado de 80 columnas y barra deslizante de miniaturas del lado derecho ha sido heredada por sudo.

Con regular sudo -H geditno puede hacer ni guardar estos ajustes de configuración. Con el siguiente script, sgeditla configuración se hereda de su cuenta de usuario.

Este script también aborda los problemas " gksues malo y no está instalado por defecto" y " pkexeces difícil de configurar".


Fondo

Me ha molestado el mismo problema durante años. El proyecto de este fin de semana fue escribir el sgeditguión:

  • Llamar usando sgedit filename1 filename2...
  • Obtiene la configuración gedit del usuario para tabulaciones, fuentes, ajuste de línea, etc.
  • Se eleva a sudo -Hpara preservar la propiedad del archivo mientras se obtienen poderes de raíz.
  • Solicita contraseña si el último sudo ha excedido el tiempo de espera.
  • Obtiene la configuración de gedit de sudo
  • Compara las diferencias entre la configuración de usuario y sudo gedit
  • Se ejecuta solo gsettings seten las diferencias (reduce 174 setcomandos a una docena o menos. La próxima vez se ejecuta tal vez solo uno o dos cambios, pero a menudo ninguno.
  • Llama a gedit como una tarea en segundo plano, de modo que el indicador de terminal vuelve a aparecer inmediatamente.

Guión Bash sgedit

#!/bin/bash

# NAME: sgedit
# PATH: /mnt/e/bin
# DESC: Run gedit as sudo using $USER preferences
# DATE: June 17, 2018.

# Must not prefix with sudo when calling script
if [[ $(id -u) == 0 ]]; then
    zenity --error --text "You cannot call this script using sudo. Aborting."
    exit 99
fi

# Get user preferences before elevating to sudo
gsettings list-recursively | grep -i gedit | grep -v history |
    grep -v docinfo |
    grep -v virtual-root | grep -v state.window > /tmp/gedit.gsettings

sudoFunc () {
    # Must be running as sudo
    if [[ $(id -u) != 0 ]]; then
        zenity --error --text "Sudo password authentication failed. Aborting."
        exit 99
    fi

    # Get sudo's gedit preferences
    gsettings list-recursively | grep -i gedit | grep -v history |
        grep -v docinfo |
        grep -v virtual-root | grep -v state.window > /tmp/gedit.gsettings.root
    diff /tmp/gedit.gsettings.root /tmp/gedit.gsettings | grep '>' > /tmp/gedit.gsettings.diff
    sed -i 's/>/gsettings set/g; s/uint32 //g' /tmp/gedit.gsettings.diff
    chmod +x /tmp/gedit.gsettings.diff
    bash -x /tmp/gedit.gsettings.diff  # Display override setting to terminal
    nohup gedit $@ &>/dev/null &
}

FUNC=$(declare -f sudoFunc)
sudo -H bash -c "$FUNC; sudoFunc $*;"

Gestión interna

Copie el script bash anterior a un nuevo archivo llamado sgedit. Recomiendo colocarlo en su $HOME/bindirectorio, es decir /home/YOURNAME/bin. Es posible que primero deba crear el directorio.

Marque el archivo como ejecutable usando:

chmod a+x ~/sgedit

Note ~es un atajo para /home/YOURNAME.

WinEunuuchs2Unix
fuente
0

Ubuntu 18.04: algunos programas de instalación y otros necesitan que gksudo o gksu estén disponibles con el mismo nombre. Para hacer que esto funcione:

Instale la versión gnome de ssh-askpass. Sin esto, el diálogo de contraseña puede estar oculto detrás de otra ventana:

sudo apt-get install ssh-askpass-gnome

Crear nuevo archivo my-gksudo.sh:

sudo -H gedit /etc/profile.d/my-gksudo.sh

contenido del archivo:

export SUDO_ASKPASS=/usr/bin/ssh-askpass

Cree nuevos archivos gksudo y gksu con contenido idéntico:

sudo -H gedit /usr/bin/gksudo

y

sudo -H gedit /usr/bin/gksu

contenido del archivo para ambos:

sudo -A $@

Hacer que gksudo y gksu sean ejecutables:

sudo chmod +x /usr/bin/gksudo

Y

sudo chmod +x /usr/bin/gksu

Reinicia la computadora.

Pekka Lehtikoski
fuente