¿Se puede reinstalar sudo después de ser eliminado?

61

Esto parece ser un problema de huevo de gallina. La tarea más común sudoes instalar y eliminar software.

sudo apt-get purge <appname>

Pero sudosí se puede eliminar.

sudo apt-get purge sudo # Do not run this command on production computers!

Aquí es donde viene la diversión.

ubuntu@ubuntu:~$ sudo
bash: /usr/bin/sudo: No such file or directory

Aunque es obvio que ninguna persona en su sano juicio purgará sudo(aparte de mí), alguien puede ser engañado para ejecutar este comando (no directamente, en su modo hexadecimal, o como se llame) o una persona podría SSH disfrazado de gurú tecnológico y hacer el desorden .

Entonces, ¿hay alguna manera de reinstalar sudo?

usuario registrado
fuente
3
¡una buena que nunca supe que sudo también podría purgar! ¡Linux es tan personalizable!
user247696
Realmente no vale una respuesta, ya que sería demasiado tarde si esto sucediera, pero no hay nada que le impida establecer una contraseña para el rootusuario. Luego puede usar suo iniciar sesión directamente como root si tiene acceso físico a la máquina (ssh generalmente se configurará para rechazar los intentos de iniciar sesión como root).
IMSoP
Todas las respuestas dependen de alguna forma de acceder al sistema de archivos con privilegios. Por ejemplo (contador): mi Android Asus Memopad no tiene sudoy no tiene "arranque seguro" o equivalente. La única forma que conozco es ir a xda-devd / la paquete de instalación completa precompilada. Tienes suerte, por así decirlo, de que no tienes esta limitación.
Carl Witthoft
@CarlWitthoft Android es un derivado de Linux, que en realidad es una distribución de Linux. Además, Google ha realizado muchos cambios (lo que la mayoría de los fanáticos de Linux odian). El enraizamiento , que es bien conocido en los teléfonos inteligentes con Android, no es más que un intento de obtener los poderes de Linux real en Android.
Usuario registrado
44
¿No puedes simplemente iniciar sesión como root?
Konrad Höffner

Respuestas:

56

Puedo instalar aplicaciones usando:

pkexec apt-get install <appname>

De man pkexec:

  pkexec allows an authorized user to execute PROGRAM as another user. If
  username is not specified, then the program will be executed as the
  administrative super user, root.

Entonces, supongo que eso también pkexec apt-get install sudodebería funcionar.


Editar : ahora puedo confirmar: , sudose puede instalar usando pkexec apt-get install sudo:

reinstalar sudo

( haga clic para agrandar )

Radu Rădeanu
fuente
@RaduRadeanu Esto es interesante, voy a probar esto gracias ......
Premkumar
@Premkumar ¡Pruébelo con precaución! El último comando desde el lanzamiento de la pantalla debe ser, probablemente, sólo en su caso: sudo apt-get install gksu ubuntu-minimal. Pero mejor, verifique qué paquetes se eliminaron al mismo tiempo sudo.
Radu Rădeanu
55
@Thebluefish Se llama al paquete policykit-1(a partir del 12.04). Se puede eliminar, pero a expensas de eliminar los paquetes que normalmente desea en un sistema de escritorio como gnome-corey ubuntu-desktop(en un servidor, es más probable que no sea requerido por ningún paquete necesario). Sin embargo, Radu, ¿qué determina que tu cuenta pueda usar pkexec apt-get …? ¿Es esto algo que configuró, o sucede automáticamente, y si es así, qué determina que una cuenta pueda hacer esto?
Gilles 'SO- deja de ser malvado'
1
@Gilles No recuerdo haber hecho algunas configuraciones en este sentido en el pasado. Entonces, supongo que eso sucede automáticamente. Si sabe qué determina que una cuenta puede hacer esto, por favor comparta; Esto está fuera de mi área de especialización.
Radu Rădeanu
2
@Gilles Creo que los miembros del sudogrupo pueden usar pkexec. (Mi experiencia es que agregar usuarios a este grupo confiere pkexechabilidades y eliminarlos de él elimina pkexechabilidades; de esta manera, las pkexechabilidades parecen conferirse lo mismo que las sudohabilidades en la sudoersconfiguración predeterminada , lo que tiene sentido ya que poder sudoy pkexeccomo root son principalmente lo que hace que un usuario sea administrador en Ubuntu.) No creo que la desinstalación sudoelimine el sudogrupo. Pero estoy no totalmente seguro de que mis suposiciones son ciertas en todas las circunstancias razonables.
Eliah Kagan
29

Siempre puede arrancar en modo de recuperación , soltar al shell raíz e instalarlo sin sudo.

Vojtech Trefny
fuente
16
¿Puedes agregar la parte esencial y relevante del enlace aquí?
Usuario registrado
Si no hay recuperación disponible en el menú de arranque de grub, presione <kbd> e </kbd> y agregue `single` a la línea de arranque. Luego, cuando se inicie, establezca una contraseña de root usando passwd. Reinicie normalmente, en la línea de comando ingrese suseguido de la nueva contraseña, y ejecute apt-get install sudo(sin el sudoprefijo)
ExploWare
1
¿Cómo obtuviste conexión a internet en root shell?
Avinash Raj
22

Sí, la reinstalación del sudopaquete sería posible mediante el método chroot .

  • Primer arranque desde el disco en vivo de Ubuntu.

  • Monte la partición de Ubuntu instalada previamente en el directorio que desee. En mi caso, la monté /media/ubuntu.

    sudo mkdir /media/ubuntu
    sudo mount /dev/sdaX /media/ubuntu   # /dev/sdaX - previously installed Ubuntu partition.
    
  • De forma predeterminada, no pudo obtener conexión a Internet después de hacer un chroot en una partición, así que ejecute el siguiente comando para que funcione.

    for d in dev sys run proc; do sudo mount --bind /$d /media/ubuntu/$d ; done
    

Gracias a @Oli por este maravilloso código.

  • Ahora ingresa a ese directorio montado,

    $ sudo chroot /media/ubuntu
    # apt-get update
    
  • Instale el sudopaquete ejecutando,

    # apt-get install sudo
    
  • Ahora salga del entorno chroot.

    exit
    
  • Finalmente, inicie su sistema operativo Ubuntu. Ahora pruebe su sudocomando, seguramente funcionará.

Avinash Raj
fuente
4

Arranque con el parámetro adicional init=/bin/shen la línea de comando del núcleo. Esto lo colocará directamente en un shell raíz, desde donde simplemente puede ejecutar apt-get install sudoy luego reiniciar. Es posible que /etc/init.d/networking startprimero deba ejecutar para obtener una conexión de red que funcione. Mucho más simple que perder el tiempo con CD de recuperación o discos en vivo, si me preguntas.

Jules
fuente
1

Si ya configuró o actualizó la rootcontraseña de la cuenta de usuario con este comando sudo passwd root, no se preocupe por la purga. sudoSimplemente inicie sesión en su rootcuenta y luego instale sudo,

su
apt-get install sudo

ingrese la descripción de la imagen aquí

Click aquí para ampliar

Avinash Raj
fuente
esto funciona si la cuenta raíz está habilitada, y en ubuntu generalmente está deshabilitada. suen mi pc da "su: Error de autenticación", aunque proporcioné la contraseña correcta
BЈовић
Sí, tiene razón, eso es lo que dije. Si ya actualizó la contraseña de la cuenta de usuario root, entonces no se preocupe por la purga sudo. Ahora intente esto, sudo passwd rootle permitirá actualizar la contraseña de la cuenta de usuario root. Ahora vuelva a iniciar sesión en su cuenta root ejecutando el sucomando. Una vez que pueda iniciar sesión, podrá purgar sudo. Ahora purgue sudo. sudo apt-get purge sudoInicie sesión en su cuenta raíz para reinstalar el paquete sudo ejecutando suyapt-get install sudo
Avinash Raj
-1

sudo (y cualquier otro privilegio raíz) solo se aplica al sistema operativo en ejecución. Si ha sido tonto y eliminó sudo (o / usr / para el caso) y no tiene alternativas como pkexec, simplemente puede arrancar desde otra cosa, copiar el software faltante y reiniciar nuevamente.

El acceso físico anula cualquier seguridad de software que pueda tener su sistema.

Pablo
fuente
Recomiendo expandir esto para explicar lo que quiere decir con "copiar el software existente".
Eliah Kagan
Sin embargo, no es una forma muy fácil de solucionarlo.
Seth
@Seth sin intervención operativa Dudo seriamente que pueda solucionarse sin escribir otra respuesta.
Braiam
Bueno, la forma correcta de hacerlo sería chroot, pero hay muchas formas menos bárbaras. Por ejemplo, iniciar sesión como root (de la manera NORMAL) o, si de alguna manera no tiene una contraseña de root, simplemente configure init = / bin / bash como parámetro del kernel y pasará por todo el sistema init, incluida la autenticación de inicio de sesión.
orion
-2

Este problema parece ser muy específico de ubuntu. Como usuario no ubuntu, ni siquiera entendí al principio por qué sudo sería un caso especial de ninguna manera (muchas distribuciones no lo instalan por defecto).

No necesitas sudo en absoluto. Es solo un atajo lento que le permite ejecutar un comando raíz sin iniciar sesión como root. Sin embargo, si tiene que hacer algo más que un solo comando, es horrible tener un prefijo constante todo con sudo. Sin mencionar que el uso sudohace que los usuarios ignoren cómo funcionan los permisos y la cuenta raíz. Tiene mucho más sentido simplemente iniciar sesión como root, administrar el sistema y cerrar sesión. Eso es lo que debe hacer susi ya inició sesión como usuario habitual. O puede iniciar sesión directamente como root.

Por supuesto, debe tener una rootcontraseña establecida, esa es la configuración razonable, de lo contrario, tiene un sistema similar a Windows donde hay acciones que nadie puede realizar y realmente está bloqueado si de alguna manera sudono está disponible (requiere trabajar /etc/, configurar $PATHy otros cosas montadas, que es posible que no tenga si algo sale mal al inicio).

Orión
fuente
Esta puede ser información útil, pero no responde la pregunta.
Luís de Sousa
En efecto. Esto realmente no es tan relevante para un sistema donde la contraseña de root está deshabilitada y sudo está instalado por defecto. Y si observa las otras respuestas, verá que el último párrafo tampoco es cierto.
Oli
Un usuario que contemple la eliminación sudode ubuntu también debería considerar establecer la contraseña de root (otras preguntas señalaron cómo hacerlo). Un usuario que no se preocupa por estas cosas, puede seguir usando sudo.
orion