¿Cómo es más seguro sudo que usar directamente su si el usuario tiene acceso a todos los comandos?

40

Así que he estado leyendo las diferencias entre el uso de suy sudo, y todos parecen estar de acuerdo en que el sudoenfoque es más seguro que permitir el acceso a la cuenta raíz. Dicen que con la cuenta raíz puede romper todo el sistema con solo un comando. Esto lo entiendo. PERO el usuario inicial creado en el sistema también tiene acceso a todos los comandos usando sudo. Esto lo puedo descubrir corriendo su -l. Si este es el caso, entonces simplemente puedo correr sudo <game-ending command>para arruinar mi sistema. Entonces, ¿cómo es este enfoque mejor o más seguro que permitirme el acceso directo a la cuenta de superusuario? Puedo ejecutar los mismos comandos ...

¿Es porque al usar sudola línea de comando le digo explícitamente a la computadora que creo que sé lo que estoy haciendo? ¿Creen que las personas olvidarán que están bajo la cuenta de superusuario a menos que lo digan explícitamente?

Las personas también afirman que si el sistema fuera comprometido e ingresado por alguien extranjero, estar bajo la cuenta raíz les permitiría hacer cosas terribles en mi sistema. Pero me parece que si ya tienen acceso a mi cuenta y conocen mi contraseña, pueden hacer estas mismas cosas terribles usando sudo e ingresando mi contraseña, ya que ni siquiera necesitan saber la contraseña del superusuario. ¿Qué no voy a llegar aquí?

bmcentee148
fuente
2
Gracias por crear esta pregunta, así que ahora hay algo que mostrar a las personas que siguen diciendo que sudo es más seguro pero que no pueden justificarlo.
user253751

Respuestas:

40

Personalmente, no necesariamente lo considero más seguro y la mayoría de los beneficios (de sudo) están en un sistema multiusuario. En un sistema de usuario único, probablemente sea un lavado.

Los beneficios son (sin ningún orden en particular):

  • sudo tiene un registro superior. sudo registra cada comando.
  • sudo permite un control de grano más fino. Uno puede configurar sudo para dar acceso de root a algunos pero no a todos los comandos.
  • sudo usa la contraseña de inicio de sesión. Esto protege el tener que dar la contraseña de root (como lo haría con su) y está relacionado con el punto anterior con respecto al control / acceso más fino a root.
  • En Ubuntu, por defecto, la cuenta raíz está bloqueada. Esto disuade a los crackers de iniciar sesión (remotamente a través de say ssh), tienen que adivinar tanto un nombre de usuario como una contraseña. Si la cuenta raíz no está bloqueada, como es el caso con su, entonces solo necesitan descifrar la contraseña de root.
  • sudo -ies probablemente el mejor método para aislar las variables ambientales de la raíz de su usuario. Esto surge de vez en cuando pero es moderadamente esotérico. Ver https://help.ubuntu.com/community/RootSudo#Special_notes_on_sudo_and_shells
  • algunas personas sienten que tener que escribir sudo antes de cada comando que desean ejecutar como root o tener tiempo de espera de sudo les permite detenerse y pensar con mayor claridad y reduce sus errores o ejecutar comandos erróneos. Si hacerlo te ayuda, eso también sería un beneficio.

Probablemente hay más beneficios, pero, esos son los principales, en mi humilde opinión.

Ver también: https://help.ubuntu.com/community/RootSudo

Para tratar de responder algunos de tus otros pensamientos:

  • No hay nada en su o sudo que le impida ejecutar código malicioso siempre que conozca la contraseña. Tampoco es más seguro o mejor.
  • Los crackers pueden obtener acceso a shell a través de varios métodos. Cuando vea "ejecutar código arbitrario" en un aviso de seguridad - https://usn.ubuntu.com/usn/ - eso significa que un cracker puede ejecutar / bin / bash o cualquier otro código. Por lo tanto, un cracker, a través de varios exploits, puede obtener acceso a shell sin conocer su nombre de usuario o contraseña. Ni sudo ni su ayudan con esto.
  • Si un cracker tiene acceso de shell, puede causar mucho daño sin acceso de root. Por ejemplo, el ransomware que cifra todos sus datos personales.
  • Si un cracker tiene acceso de shell a una cuenta con acceso de root, a través de su o sudo, el cracker puede obtener acceso de root a través de varios métodos más allá del alcance de esta discusión. Ni sudo ni su son superiores a este respecto tampoco.

Entonces, si bien ha observado problemas o fallas con sudo, su tiene exactamente las mismas vulnerabilidades y su no es superior a sudo en esos aspectos, en mi humilde opinión

Pantera
fuente
Sería bueno tener una opción para permitir que todos los usuarios enciendan (apaguen y reinicien) el control después de la desactivación de la desconexión, en lugar de las entradas de sudoers o tener un nombre de grupo.
mckenzm
8
Creo que la mayor ventaja es tener que justificar que cada comando necesita permisos de superusuario. En mi experiencia inicial con Linux, descubrí que siempre terminaba ejecutándose como root en al menos un terminal mientras jugaba con el sistema. Desafortunadamente, es muy fácil emitir un comando destructivo en la terminal al malinterpretar o escribir mal. Si eso estaba en el 'terminal raíz', podría resultar en una restauración desde la copia de seguridad o reinstalación. ¡sudo me ha protegido de eso muchas veces!
Rolinger
14
No comprometer la contraseña de root es quizás la mayor ventaja de sudo. Puede otorgar permiso de root sin revelar ningún secreto.
Thorbjørn Ravn Andersen
No solo puede restringir los comandos, sino que incluso puede restringir los argumentos especificados. Pero no estoy de acuerdo con que el bloqueo de raíz tenga algo que ver con eso; porque puede configurar ssh para no permitir el inicio de sesión raíz. Sin embargo, hay algo más con su versus sudo: sudo usa su contraseña de usuario, que es una contraseña menos que se verá comprometida y que generalmente no es algo bueno. Como todo en este mundo, hay diferentes maneras de hacer algo y eso no significa que una forma sea más correcta que las demás el 100% del tiempo si alguna vez. Luego hay preferencias.
Pryftan
Pero otoh si es más de un usuario que necesita acceso a la raíz (que no es algo en lo que me meteré porque eso es solo, bueno, es una discusión acalorada en el mejor de los casos), entonces sudo tiene una ventaja allí.
Pryftan
10

Imagina que tienes 20 minutos para hacer algo complejo. Tienes un poco de resaca y tienes que apurarte. "Vamos a usar su", dices. "Ahorrará algo de tiempo" es su razonamiento.

Por accidente escribes

rm -rf /*

en lugar de

rm -rf ./*

Su sistema ahora se está bloqueando y tiene 10 minutos hasta su fecha límite.

Si elige explícitamente cuándo necesita root, puede minimizar la posibilidad de que esto suceda. Es posible que no se necesite la raíz, rm -r ./*¿por qué usarla? ¿Por qué correr el riesgo?

Eso es lo que significa "seguridad" aquí. Minimizar el riesgo de que los usuarios (todos los usuarios, no solo los principiantes) cometan un error fatal.

Por supuesto, este es un ejemplo extremo que no debe permitirse que ocurra en un entorno de producción (garantizo que ha sucedido en un entorno de producción).

En cuanto a la seguridad, hay algunas cosas para las que también es mejor sudo. Como dice @Panther : registro, restricciones, la contraseña de root es SPOF, etc.)

dijksterhuis
fuente
44
Demonios, no necesitas esperar tanto tiempo si solo lo haces ... chown -R nobody:nobody /o incluso chown -R nobody ../como root. chmodPor supuesto, también tiene problemas similares en modo recursivo. Pero el mejor punto que haces es que solo debes ser root cuando lo necesites; cuanto menos privilegio tenga su inicio de sesión, mejor será para el uso normal.
Pryftan
2
Sin embargo, +1 para programar cuando tienes resaca.
abhicantdraw
44
Entonces, ¿cómo es esto diferente con sudo? Escribes en sudo rm -rf /*lugar de sudo rm -rf ./*y boom otra vez.
ilkkachu
2
@ilkkachu en términos del comando real, hace una mínima diferencia en lo que sucede. Pero ha tenido que declarar explícitamente que desea hacer esto como root. Ese es el punto. La seguridad se trata de la gestión de riesgos. Por supuesto, aún puede bloquear el sistema. Pero cuanto menos tiempo tenga privilegios de root, menos posibilidades tendrá de cometer un error fatal. La seguridad se trata de minimizar las probabilidades.
dijksterhuis
2
@ilkkachu Porque no escribirías sudo rm -rf ./*. Es probable que tenga acceso de escritura a las cosas en el directorio actual, por lo que no necesita sudo para ese comando. Por lo que los extremos de comando typoed siendo rm -rf /*, lo que da una larga cadena de "Permiso denegado" mensajes, que le permite saber lo que necesita ctrl-cantes de que llegue a las cosas que en realidad se puede eliminar, en lugar de borrar todo en /bin, /boot, /dev, y la mitad de /etcantes incluso te das cuenta de que algo anda mal.
Ray
9

Quiero agregar un poco de perspectiva histórica a las otras respuestas. Desafortunadamente, no tengo ninguna fuente lista excepto mis propios recuerdos de las discusiones de Usenet y artículos de revistas.

Hace algún tiempo, en la década de 1990, las distribuciones facilitaban la instalación de Linux en su propio hardware, incluso con poco conocimiento de la computadora. Por lo tanto, Linux comenzó a atraer a más y más personas que sorprendentemente no habían sido perforadas previamente como administradores de sistemas en algún dialecto UN * X. En cambio, muchos se usaron para sistemas (de un solo usuario) como Windows 95/98. Y aprendieron que la mayoría de las tareas de administración del sistema Linux hacían necesario trabajar bajo esa extraña cuenta "raíz".

Por lo tanto, algunos usuarios simplemente iniciaron sesión como root y usaron esa cuenta para todo su trabajo diario. ¿Por qué deberían tener que escribir suy la contraseña de root una y otra vez o iniciar sesión en un nuevo tty solo para algunos comandos de administración? Pero usar root para todo, por supuesto, no es una buena idea, ya que podría hacer mucho más daño a su sistema con un comando poco consciente en el lugar equivocado. Esto incluso llevó a alguna distribución (¿era SuSE?) A modificar el fondo del escritorio para que el usuario root mostrara una gran advertencia de que debería usar esa cuenta solo para tareas administrativas.

Entonces, la forma de Ubuntu sudotiene algunas ventajas (además de las que ya figuran en Panther ).

  • No se puede iniciar sesión directamente a la raíz account.² :-)
  • El proceso de instalación no le pedirá una contraseña raíz (adicional), solo necesita una contraseña (de su usuario).
  • sudoalmacena en caché sus credenciales, por lo que para varios comandos de administración en secuencia, solo tiene que ingresar su contraseña una vez (en contraste con su). Esto reduce la necesidad de abrir un shell o una nueva terminal con privilegios de root .
  • Y hace que sea más fácil decirle a los usuarios en línea y en la documentación qué comandos tienen que ingresar como administrador y cuáles no.

¹ Y para aquellos que no se atreven a hacerlo ellos mismos, hubo fiestas de instalación.
² Pero puede usar un comando como sudo -io sudo su - rootpara obtener un shell raíz después de iniciar sesión como usuario normal.
³ Pero usted sabe, por supuesto, que no debe simplemente copiar y pegar comandos de Internet , ¿verdad?

Dubu
fuente
¿Estás diciendo en Ubuntu que no puedes hacer: sudo su -o sudo su - root? Porque he visto afirmaciones similares, por ejemplo, que MacOS X no tiene root, pero eso es completamente incorrecto cuando uno solo necesita hacer el primer comando ...
Pryftan
2
Por supuesto que hay una cuenta raíz . Dije que no podía "iniciar sesión directamente", lo que significa que no puede ingresar el usuario rooty una contraseña en el indicador de inicio de sesión o en el cuadro de diálogo de inicio de sesión X e iniciar su sesión como root. Pero puede usar uno de sus comandos (prefiero sudo -iporque es más corto y soy flojo) para obtener un shell raíz.
Dubu
1
Por favor, lea mi comentario otra vez :) Dije que algunos dicen que MacOS X no tiene una cuenta raíz, pero de hecho la tiene y me recordó esto (no lo equiparé a que no haya una cuenta raíz en Ubuntu). Pero por lo que sé, los desarrolladores de Ubuntu estaban lo suficientemente locos como para parchar sudo para no permitir eso, de ahí mi pregunta.
Pryftan
1
@Pryftan Como dije en mi comentario anterior, ambos comandos funcionan y obtendrán un shell raíz. Agregaré eso a mi respuesta.
Dubu
Sí. Sé que :) No estaba diciendo que era falso o no el caso. Estaba diciendo que me recordó algo que algunas personas dicen pero que dicen incorrectamente. Por lo tanto, poner en negrita esa parte.
Pryftan
2

Ha sido posible deshabilitar el inicio de sesión raíz a través de ssh durante décadas. La forma de Ubuntu de deshabilitar la cuenta raíz y hacer que la gente sudo todo no es más que un truco. Simplemente "sudo -s" y tienes un shell raíz. Deshabilite el inicio de sesión raíz a través de ssh y déjelo allí.

P. Goetterup
fuente
8
... en esa nota, ir solo con clave para CUALQUIER inicio de sesión ssh, no solo la cuenta raíz, ES una gran práctica.
rackandboneman
Sí. Lo noté en un comentario hace solo unos minutos. El hecho de que Otoh sea el menos privilegiado es el mejor de todos, por lo que solo debe elevarse cuando lo necesite y esto se aplica tanto si está conectado por ssh o localmente. Y lo que dice @rackandboneman, por supuesto, también es absolutamente correcto, aunque para mí deshabilito la parada completa de raíz remota incluso con las teclas ssh, independientemente del sistema.
Pryftan
0

Dependiendo de la configuración, sudo <game ending command>no necesariamente funcionará. Por supuesto, si la sudoersconfiguración dice "usuario ALL = (ALL) ALL", sudono ofrecerá protección adicional. Sin embargo, puede especificar una lista de comandos privilegiados que necesita ejecutar a menudo, como instalar nuevos paquetes, y omitir comandos peligrosos como rm.

De esta manera, puede ejecutar todos los comandos si inicia sesión como root, pero dado que solo necesitará esto ocasionalmente, el riesgo de ejecución <game ending command>se reducirá sustancialmente.

Dmitry Grigoryev
fuente
1
Y argumentos específicos a los comandos, también.
Pryftan
1
Y por grupo en lugar de por usuario. el uso de grupos es invaluable en entornos multiusuario donde el personal puede ir y venir y donde puede necesitar roles específicos.
Panther
0

Que sudo le permite permitir solo ciertos comandos no es el único beneficio de sudo sobre su.

En la mayoría de las tiendas, ni siquiera es el beneficio más importante.

Con sudo, sabes quién realizó un comando en particular.

Ahora tal vez esto no te importe. Por ejemplo, puede ser el único usuario de su computadora. Si es así, entonces sudo posiblemente no sea mejor que su.

Pero muchos hosts tienen más de un administrador.

entonces sudo se vuelve muy útil porque si alguien hace algo incorrecto, sudo le permite saber quién lo hizo.

Eso le permite comprender por qué ocurrieron los errores y educar a las personas para evitar que se repitan los errores o, si es necesario, para eliminar las herramientas de alguien.

Como beneficio adicional, cuando las personas saben que sus acciones están grabadas, a menudo son un poco más cuidadosas.

El sudo no es perfecto.

Si dos personas hacen "sudo sh" al mismo tiempo, puede ser difícil atribuir comandos a uno u otro.

Y un administrador malintencionado siempre puede eliminar o editar registros, aunque hacerlo limpiamente no siempre es tan fácil como la gente piensa, especialmente si tiene un registro centralizado.

sudo no necesariamente detiene una acción estúpida o maliciosa, por todas las razones identificadas en la pregunta original.

Pero le da una oportunidad mucho mejor de prevenir una recurrencia.

Ben Aveling
fuente
1. Solo si se toma el tiempo para configurarlo correctamente. Lo que el sistema Ubuntu predeterminado no hace (y no puede hacer). 2. Solo si el usuario no tiene forma de editar los registros después del hecho, lo que puede hacer a menos que los comandos que puede ejecutar sean limitados. (Que no está en el caso de uso predeterminado de Ubuntu)
ilkkachu
@ilkkachu, aunque tiene algunos buenos puntos, su argumento aquí no tiene sentido aquí. El punto no es la configuración predeterminada, el punto es que es posible configurar y ajustar sudo. No puede configurar su para actuar de esta manera. su es todo o nada, no hay forma de limitar los comandos y es una cuestión de hecho que sudo proporciona un registro superior. Ni su o sudo ofrecen ninguna seguridad contra lo que un cracker puede o no hacer en un sistema comprometido, y nadie mantuvo sudo de esta manera. Los registros de sudo tienen un gran valor en las operaciones normales del día a día.
Panther
@Panther, bueno, el título de la pregunta dice "... si el usuario tiene acceso a todos los comandos?" así que supuse que se referían a la configuración de Ubuntu predeterminada habitual donde sudopermite todo. Claro, puede configurarlo para limitar los comandos que un usuario puede ejecutar, pero no creo que ese sea el caso en la pregunta como se le preguntó.
ilkkachu
Respuesta expandida.
Ben Aveling
@ilkkachu: vuelva a leer mi respuesta "Personalmente, no necesariamente lo considero más seguro y la mayoría de los beneficios (de sudo) se encuentran en un sistema multiusuario. En un sistema de usuario único, probablemente sea un lavado". Luego expliqué las otras ventajas de sudo, una de las cuales es que es configurable.
Panther