¿Cómo modificar un archivo '/ etc / sudoers' no válido?

238

¿Cómo edito un archivo sudoers no válido? Lanza el error a continuación y no me permite editar nuevamente para solucionarlo.

Esto es lo que pasa:

$ sudo visudo
>>> /etc/sudoers: syntax error near line 28 <<<
sudo: parse error in /etc/sudoers near line 28
sudo: no valid sudoers sources found, quitting
Yum Yum Yum
fuente
2
gran pregunta teniendo en cuenta que esta página crea ese error help.ubuntu.com/community/RootSudoTimeout

Respuestas:

361

En un sistema Ubuntu moderno (y muchas otras distribuciones de GNU / Linux), arreglar un sudoersarchivo dañado es realmente bastante fácil y no requiere reiniciar, usar un CD en vivo o acceso físico a la máquina.

Para hacer esto a través de SSH, inicie sesión en la máquina y ejecute el comando pkexec visudo. Si tiene acceso físico a la máquina, SSH es innecesario; simplemente abra una ventana de Terminal y ejecute ese pkexeccomando.

Suponiendo que usted (o algún otro usuario) está autorizado para ejecutar programas como rootcon PolicyKit, puede ingresar su contraseña, y luego se ejecutará visudocomo root, y puede corregir su /etc/sudoers.

Si necesita editar uno de los archivos de configuración /etc/sudoers.d(que no es común en esta situación, pero es posible), use .pkexec visudo -f /etc/sudoers.d/filename

Si tiene una situación relacionada en la que tiene que ejecutar comandos adicionales de administración del sistema como root para solucionar el problema (también poco común en esta circunstancia, pero común en otros), puede iniciar un shell raíz interactivo con pkexec bash. En términos generales, cualquier comando no gráfico con el sudoque se ejecute puede ejecutarse en su pkexeclugar.

(Si hay más de una cuenta de usuario en el sistema autorizada para ejecutar programas como rootcon PolicyKit, entonces, para cualquiera de esas acciones, se le pedirá que seleccione cuál desea usar, antes de solicitar su contraseña).


Si eso no funciona, por ejemplo, si no hay usuarios autorizados para ejecutar programas como root a través de PolicyKit, inicie desde un CD en vivo de Ubuntu (como el CD que probablemente utilizó para instalar Ubuntu) y monte el sistema de archivos para el sistema instalado Puede hacerlo ejecutando sudo parted -lpara ver sus particiones: probablemente solo haya una partición ext4, y ese es el sistema de archivos raíz.

Supongamos que el sistema de archivos raíz del sistema Ubuntu instalado está en / dev / sda1. Entonces podrías montarlo con sudo mount /dev/sda1 /mnt. Luego puede editar el archivo sudoers del sistema instalado con sudo nano -w /mnt/etc/sudoers. O, mejor aún, puede editarlo con

sudo visudo -f /mnt/etc/sudoers

(que evitará que guarde un archivo sudoers con una sintaxis incorrecta).

Eliah Kagan
fuente
77
pkexec / usr / sbin / visudo trabajó en debian 7
marinara
10
¡VACA SANTA! ¡Muchas gracias! Salvé mi tocino. Se agregó un archivo como se sugiere en el directorio etc / sudoers.d / UTILIZANDO UN EDITOR DE TEXTO REGULAR (DON-T__D-O__T-HAT !!!). Perdió toda capacidad de hacer privilegios elevados, INCLUYENDO, editar el archivo ofensivo. Esto ayudó a editar el archivo. Aunque extraño, primero tuve que editar / etc / sudoers, luego encontré los errores en el otro archivo y me los abrió. INCLUSO MÁS EXTRAÑO, la directiva en el archivo / etc / sudoers 'inlcudedir /etc/sudoers.d' fue comentada, y todavía la incluye.
Dennis
44
@Dennis Algo confuso, las #includedirectivas en los sudoersarchivos son tratadas especialmente; el inicio #no hace que el resto de la línea se interprete como un comentario, en ese caso. Como man sudoersdice: "El signo de número ('#') se usa para indicar un comentario (a menos que sea parte de una directiva #include o a menos que ..." Ver también visudo: #includedir sudoers.d (archivado de lzone.de/ blog ).
Eliah Kagan
55
Mi usuario es sudoer pero recibí este error: Error al ejecutar el comando como otro usuario: no autorizado
SuB
2
En Ubuntu 16.04, pkexec visudosolicita una contraseña, que no acepta la contraseña correcta. Lanza un error "FALLO DE AUTENTICACIÓN".
Juha Untinen
54

Siempre use visudopara editar su archivo sudoers, nunca lo edite directamente usted mismo. Le impedirá guardarlo en el disco a menos que valide.

Cesio
fuente
17
retrospectiva es 20/20
code_monk
44
No evitará el desastre. Es bastante fácil negarse válidamente.
Joshua
¿Visudo puede ser usado por scritps? ¿Si es así, cómo?
Lukas
No tengo visudo instalado. Entonces hice pkexec vim. Luego muestra la lista de usuarios y solicita la contraseña. Cuando proporciono la contraseña, arroja un error como "Error al ejecutar el comando como otro usuario: no autorizado". Por favor ayuda
Shyamkkhadka
24

Escribir:

pkexec visudo

Luego cambia la última línea

#includedir /etc/sudoers

A:

#includedir /etc/sudoers.d

debería resolver tu problema.

Andrej Burcev
fuente
2
Me he dado cuenta de que eliminar el líder #de #includedircausa errores de sintaxis, #es parte de la directiva, al menos en Ubuntu 12.10.
SAFX
1
Eso me ahorró mucho dolor de cabeza. Muchas gracias :)
Addo Solutions
1
No tengo visudo instalado. Entonces hice pkexec vim. Luego muestra la lista de usuarios y solicita la contraseña. Cuando proporciono la contraseña, arroja un error como "Error al ejecutar el comando como otro usuario: no autorizado". Por favor ayuda
Shyamkkhadka
11

si alguien como yo no tenía instalado pkexec , o no podía ejecutar vi, visudo, nano o cualquier otro editor para cambiar el archivo sudoers, puede estar seguro con este proceso. Me salvé con esto:

  • reiniciar
  • mantenga presionada la tecla Mayús mientras arranca para tener la opción de modo de recuperación (ingréselo)
  • ingrese la línea de comando como root (segunda última opción en mi menú grub)
  • vuelva a montar el dispositivo de arranque para rw, aplique el derecho de ejecución para el usuario y edite el archivo

    mount -n -o remount,rw /
    chmod u+x /etc/sudoers
    nano /etc/sudoers
    

arregla ese error y sé feliz :)

Kresimir Pendic
fuente
Si bien la solución pkexec sugerida por @ eliah-kagan parece ser más fácil, esta es más universal. En mi máquina resultó que no hay pkexec instalado y, por supuesto, no pude instalarlo porque sudo apt-get install pkexec de alguna manera no funcionó.
running.t
También dentro de este enfoque usaría en su visudolugar nano /etc/sudoers.
pa4080
7

Si estropeó su sudoersarchivo, necesitará:

  • Reinicie en modo de recuperación (presione escape durante el arranque, elija la opción de modo de recuperación en la pantalla de grub)
  • Elija la opción 'Habilitar redes' (si no lo hace, su sistema de archivos se montará como de solo lectura. Quién lo sabía)
  • Elija la opción 'Soltar al shell de root'
  • corre visudo, arregla tu archivo
  • Reiniciar con la opción normal de grub

fuente: - http://mario.net.au/content/recover-etcsudoers-ubuntu-1204

racha
fuente
Hola, ¿elimina los iptables, archivos del sistema existente?
Shyamkkhadka
6

No hay nada malo #include sudoer.d eliminar #include sudoer.d no hará ninguna diferencia.

Pero asegúrese de no tener errores de sintaxis. Tuve el mismo problema pero pasé horas arreglando y descubrí que son errores de sintaxis. Consulte el manual y corríjalos.

Por ejemplo, diga que su nombre de usuario es: dolly. Utilicé siguiente que está mal

 dolly ALL = (ALL) ALL NO PASSWD: ALL

la sintaxis correcta es

dolly ALL = (ALL) ALL //give permission to everything, not good

o

dolly ALL=(ALL) NOPASSWD:/usr/bin/thurderbird //good, give specific permission

espero que esto ayude

Thusitha Nuwan
fuente
Un mejor enfoque que asegurarse de no tener errores de sintaxis es usarlo siempre visudoal editar estos archivos, lo que asegura que no tenga errores de sintaxis antes de modificar el archivo. visudono es solo para editar /etc/sudoers, también creará y editará archivos en /etc/sudoers.d. También funcionará con el editor de texto que desee. Vea la página de manual para más detalles.
Eliah Kagan
En cuanto a dar un permiso específico, tenga en cuenta que esto solo es útil para comandos / aplicaciones muy simples, porque cualquier aplicación lo suficientemente compleja (incluida thunderbird, que nunca debería ejecutarse como root de todos modos) le dará al usuario acceso completo al sistema cuando se ejecute como root. Incluso la funcionalidad aparentemente simple abre la puerta al acceso completo a la raíz. Por ejemplo, un usuario que puede ejecutar un programa que puede guardar un archivo en una ubicación arbitraria como root puede obtener acceso completo a la raíz (puede instalar la suya propia /etc/sudoerso, si las limitaciones de sintaxis lo impiden, pueden instalar la suya propia /etc/crontab).
Eliah Kagan
3

ejecutar el modo de recuperación y luego escribir esto

chown -R root: root /etc/sudoers.d
chmod u = rwx, g = rx, o = rx /etc/sudoers.d/
chmod u = r, g = r, o = /etc/sudoers.d/*

solo el grupo y el usuario root deberían haber leído el privilegio

kosaidpo
fuente
3

También puede iniciar sesión como root en una ttyconsola con Ctrl+ Fn( Fnde 1 a 6) y ejecutar visudo.

magisterludi
fuente
2

También puede editar su entrada de arranque en grub.

Simplemente reinicie su PC y espere a que se muestre grub. Luego presione "e" en la entrada "Ubuntu" para editarlo.

Busque una línea con "linux =" o "kernel =" y simplemente agregue un "single" al final de esa línea.

Luego presione F10 para iniciar esta entrada de inicio modificada temporalmente. Esto le dará un shell (sin GUI) con derechos de root y puede editar el archivo sudoers con s.th. como nano / etc / sudoers de vuelta a su estado anterior.

Luego reinicie y listo.

Markus Ressel
fuente
2
pkexec visudo

luego revierte tus errores

Bhavesh Gabani
fuente
1
no es necesario usar pkexec
Braiam
@Braiam visudotiene que ejecutarse como root. Si sudono funciona, a pkexecveces sí. Esto está cubierto por mi respuesta anterior ... pero es una respuesta correcta, visudopor sí sola (cuando no se ejecuta como raíz) no funcionará, y puede tener valor en respuestas correctas y breves, incluso cuando sus recomendaciones se superponen considerablemente con otras respuestas. Por supuesto, si uno entra en modo de recuperación, ese es un shell de raíz y luego sudoni visudoes necesario para comandos como pkexec. Quizás eso es lo que quieres decir ...
Eliah Kagan
0

En Ubuntu 16.04 ejecutándose en un VirtualBox (no debería hacer una diferencia), los métodos anteriores no funcionaron para mí (fila no válida al final del archivo). Lo que funcionó fue:

  1. Reinicie el VirtualBox
  2. Deje que arranque normalmente, hasta que solicite su nombre de usuario y contraseña en la consola
  3. Inicie sesión normalmente con su nombre de usuario
  4. Luego, cuando termine en la consola (siempre que su caja no se inicie en una GUI), simplemente dé el comando su -y luego la contraseña de su propio nombre de usuario.
  5. Ahora debería terminar en un root@ubuntu-xenial:~#mensaje, si /etc/sudoersno está demasiado roto o vacío. No estoy seguro de lo que sucedería en ese caso.
  6. Luego, simplemente puede ejecutar visudoy corregir el archivo.
  7. Luego Ctrl + Xy se le pedirá que guarde el búfer modificado. Presione YyEnter
  8. Reinicie la caja y debería funcionar ahora.

En caso de que /etc/sudoersesté vacío o le falte algo, y pueda editarlo, aquí está el contenido mío:

Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

root ALL=(ALL:ALL) ALL

%admin ALL=(ALL) ALL

%sudo ALL=(ALL:ALL) ALL
Juha Untinen
fuente
Su paso 4 no tiene sentido, solo funciona cuando su contraseña de root es la misma que su usuario normal.
Alfred
Lo cual es muy común en una VM local.
Juha Untinen
0

Buena práctica: una ventana de terminal de respaldo y ejecutar sudo suallí. En otro termianl ejecute visudo o sudo vim / etc / sudoers. Si algo sale mal, regrese al terminal uno y arregle el archivo. Usted puede preguntar, ¿por qué no simplemente ejecutar sudo suantes visudoen una terminal? Esto también funciona, pero tiene un mayor riesgo de que cierre la terminal antes de darse cuenta.

biocyberman
fuente
-1

Hay una solución más simple. Sin reiniciar, modo de recuperación o pkgexec( pkgexecno funcionó y no tengo idea de por qué o cómo debería usarlo), simplemente haga lo siguiente:

su root # switch to root user, without using sudo (which is broken at this point)
your_favorite_editor /etc/sudoers # e.g. nano

¡Y luego simplemente corrija el error de sintaxis!

rien333
fuente
¿Qué pasa con el voto negativo? Funcionó perfectamente para mí.
rien333