¿Por qué tengo que usar sudo para casi todo?

64

Si entiendo la filosofía de Linux correctamente, sudodebería usarse con moderación, y la mayoría de las operaciones deberían realizarse como un usuario desfavorecido. Pero eso no parece tener sentido, ya que siempre tengo que ingresar sudo, ya sea que administre paquetes, edite archivos de configuración, instale un programa desde la fuente o lo que tenga. Estas ni siquiera son cosas técnicas, sino cualquier cosa que haga un usuario normal.

Me recuerda mucho al UAC de Windows, que las personas desactivan o configuran para no requerir una contraseña (solo un clic). Además, los usuarios de Windows de muchas personas también son cuentas de administrador.

Además, he visto a algunas personas mostrar comandos que requieren sudoprivilegios sin ellos sudo. ¿Tienen su sistema configurado de tal manera que sudono sea necesario?

usuario139248
fuente
25
Debe sudohacer cualquier cosa que implique cambiar el sistema, si solo está operando en sus propios archivos / escritorio, no está afectando a nadie más, por lo que no necesita privilegios elevados. Si está ejecutando comandos privilegiados sin sudo, probablemente ya sea un súper usuario (es decir, root) y eso generalmente es menos aconsejable que usar sudo para las tareas específicas de todo el sistema
Eric Renouf
75
"instalar un programa desde la fuente ... cualquier cosa que haga un usuario normal" --- Creo que ha sobreestimado las habilidades técnicas de los usuarios habituales.
Jonathan Cast
77
¿Estás usando sudocuando no deberías? Comandos de un usuario normal Unix deben consistir en su mayor parte de cd, ls, mover archivos, copiar, eliminar y edición tienen acceso a. Si sus comandos habituales no consisten en esto, probablemente no sea un usuario habitual de Unix.
user530873
20
Pequeño consejo: si haces algo que requiere sudo pero olvidaste poner sudo en tu comando, puedes usarlo sudo !!para volver a ejecutar el último comando que escribiste con sudo al frente.
asfallows
66
¿No pasa la mayor parte de su tiempo usando el software que ha instalado? Eso no debería involucrar sudo. Si no, ¿por qué lo estás instalando?
Deja de dañar a Monica el

Respuestas:

75

Usted mencionó estas funciones de administración del sistema.

administrar paquetes, editar archivos de configuración, instalar un programa desde la fuente

como cosas que

cualquier cosa que haga un usuario normal

En un sistema multiusuario típico, estas no son acciones comunes del usuario; un administrador de sistemas se preocuparía por esto. Los usuarios comunes (no "bajo privilegios") pueden usar el sistema sin preocuparse por su mantenimiento.

En un sistema doméstico, sí, terminas teniendo que administrar el sistema además de usarlo.

¿Es realmente tan difícil de usar sudo? Recuerde que si es solo su sistema, no hay ninguna razón por la que no pueda ingresar a un rootshell ( sudo -sconsulte esta publicación para obtener una descripción general de los diversos medios para obtener un shell raíz) y / o configurar sudopara no solicitar una contraseña.

roaima
fuente
47
no hay razón por la que no pueda [...] configurar sudo para que no solicite una contraseña. No recomendaría que, si ejecuta un script malicioso, podrá actuar como root en su sistema.
AL
55
Si ingresar la contraseña de sudo le molesta tanto que básicamente realiza una prueba automática de la entrada de la contraseña, entonces tampoco ayudará. Necesitas equilibrar la cordura con la seguridad. Sudo piloto automático eliminé los principales fragmentos del sistema operativo al menos una vez.
Nelson
33
Personalmente me encanta sudo, es como un control de cordura.
Max Williams
66
@MaxWilliams, sí exactamente, es esa pequeña tapa de plástico transparente sobre el gran botón rojo que pregunta, ¿estás seguro de que sabes lo que estás haciendo?
KlaymenDK
15
@AL: Si voy a ejecutar una secuencia de comandos desconocida, será mejor que no sea malicioso o estoy jodido si ejecuta o no sudo. En mi escritorio personal, son mis propios datos (no root) lo que es importante, no la configuración (root) de la máquina en sí.
jrw32982 es compatible con Monica el
31

Sudo / Root se usa cuando está haciendo algo que un usuario estándar no debería tener la capacidad de hacer por el riesgo de dañar / cambiar la configuración del sistema de una manera que el Administrador del sistema normalmente no permitiría.

ya sea que esté administrando paquetes, editando archivos de configuración, instalando un programa desde la fuente, o qué tengo.

Todas estas son funciones de administración técnica y pueden dañar drásticamente su sistema si se hace algo incorrecto. En un entorno corporativo, como Sysadmin, son cosas que NO dejaría que mi usuario haga sin mi conocimiento expreso, de ahí sudo.

Por ejemplo, si un archivo de paquete / configuración pudiera modificarse sin privilegios elevados, entonces sería extremadamente simple para una fuente externa simplemente ejecutar código remoto que podría romper / comprometer su sistema. Al obligar a esas acciones a requerir acceso de root, te obliga a ti como usuario a tomar la decisión de si esas acciones tienen lugar o no.

Es muy similar a UACcon Windows, en realidad es de donde surgió la idea UAC.

La cotización que recibe la primera vez que usa sudo es muy adecuada y muy importante:

Confiamos en que haya recibido la conferencia habitual del administrador del sistema local. Por lo general, se reduce a estas tres cosas:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

Especialmente # 2, piensa antes de escribir. Esa es una razón importante por la que sudo existe, cuando escribes un comando y retrocede "debe ser raíz para realizar esta acción", te obliga a detenerte y PENSAR en lo que estás haciendo realmente.

Salsa
fuente
19

Además, he visto a algunas personas mostrar comandos que requieren sudoprivilegios sin ellos sudo. ¿Tienen su sistema configurado de tal manera que sudono sea necesario?

Tienes que ejecutar esos comandos como superusuario, pero no tienes que ejecutarlos usando sudo. Por ejemplo, podría usar suo doas(reemplazo de OpenBSD para sudo), o simplemente podría iniciar sesión como root.

Entonces, si muestran sus comandos aquí sin sudo, suponen que el lector solo usará su forma favorita de ejecutar esos comandos como superusuario.
Ciertamente no significa que puedan ejecutar esos comandos como un usuario normal.

Thomas Weinbrenner
fuente
44
también puede usar sudo -io similar para obtener un shell de root y luego comenzar a ejecutar sus comandos de root sin necesidad de prefacio cada uno de ellos consudo
cas
2
Por lo general, los pasos que deben ser ejecutados como root se muestra con un indicador de raíz por ejemplo, # vi /etc/hostsen lugar de un indicador sin privilegios $ vi /etc/hosts(Bash seguirá la convención si se utiliza \$en PS1)
Gert van den Berg
16

Una característica de seguridad que ofrece sudoes que puede tener un sistema sin rootcontraseña , por lo que el rootusuario no puede iniciar sesión directamente. Esto ofrece protección adicional para los usuarios que eligen contraseñas débiles: el atacante que intenta forzar la contraseña por fuerza bruta (a través de SSH o de otro modo) primero tendrá que encontrar un nombre de usuario válido.

Otro aspecto es una gestión de privilegios más precisa. Piensa en make; sudo make installvs hacer make; make installcomo root. Muchas cosas pueden salir mal durante make. Una herramienta mal configurada puede intentar sobrescribir un archivo importante del sistema, "limpiar" el /libdirectorio actual en lugar del actual, consumir toda la RAM disponible y bloquear el sistema, etc. make installes una acción simple y pequeña con mucha menos probabilidad de un error fatal.

Dmitry Grigoryev
fuente
1
E incluso si se configura una contraseña de root, le permite dar acceso a un usuario a los comandos que requieren privilegios de root sin darle la contraseña de root, lo que significa que si se trata de un servidor de la empresa y son despedidos, solo necesita deshabilitar a su usuario , sin tener que cambiar la contraseña de root.
Gert van den Berg
13

El punto es que históricamente un sistema realmente está destinado a ser compartido por múltiples usuarios que simplemente inician sesión, hacen algunas cosas y luego cierran la sesión. De ahí la distinción entre administrador y usuario normal. Tales sistemas todavía existen en los laboratorios universitarios y puede sentir la diferencia bruscamente si usa tales computadoras. La PC casera donde usted es el único usuario y también tiene que actuar ya que el administrador es realmente un desarrollo posterior.

xji
fuente
66
"Todavía existe en los laboratorios universitarios" ... sí, y todas las corporaciones centradas en la tecnología del planeta, y la mayoría de las no técnicas también. Aún así, +1 por dar la distinción exacta de que obviamente falta el OP, y que la mayoría de los demás respondedores no pudieron enfatizar.
Comodín el
@Wildcard Lol seguro. Simplemente pon el ejemplo que inmediatamente saltó a mi cabeza, supongo.
xji
10

Una computadora es una herramienta. Probemos una analogía con otra herramienta, digamos una sartén. A veces, debes cuidar tu sartén. Por ejemplo, debes limpiarlo con jabón para lavar platos. ¿Diría que el jabón para platos es un ingrediente obligatorio de cualquier receta para la que use la sartén? Nunca verá "jabón para lavar platos" como ingrediente en los libros de cocina. Es necesario, pero la preparación de la herramienta es otra cuestión, por lo que los libros de cocina no lo mencionan. La sartén debe limpiarse, pero no es para lo que está hecha.

Es lo mismo para tu computadora. Tiene que ser configurado y cuidado, pero no es para lo que está hecho. Lo cuidas, lo configuras, para que pueda funcionar correctamente. Una vez hecho esto, puede usarlo, no como administrador del sistema, sino como usuario. Para eso está hecho. Cuando eres usuario, ya no necesitas sudo . Simplemente use la herramienta que preparó de antemano. Por supuesto, de vez en cuando, necesitarás usar privilegios de root, así como debes limpiar tu sartén con la frecuencia que la usas para cocinar.

Entonces, sin exagerar demasiado, podríamos decir que nunca necesita sudo (o la contraseña de root) para usar su computadora. Solo para preparar tu computadora.

usuario2718996
fuente
2
Gran analogía, pero a veces necesitas ese jabón para sacar algunos restos desagradables de tu sartén antes de freír tus huevos revueltos, es decir, ambas cosas se conectan con bastante facilidad. Con una computadora de su propiedad, puede "lavarla" o "freírla" casi de inmediato sudoo simplemente ir al maestro de cocina y hacer una su.
Armfoot
Parece que debería necesitar acceso a la raíz para cocinar, ya que es más peligroso.
deltaray
6

Apuesto a que es porque usas el software GUI para todo excepto las tareas administrativas del sistema, o estás hablando de servidores Linux, en cuyo caso la mayoría del acceso será naturalmente la administración del sistema. Por lo tanto, puede parecer que hacer cualquier cosa en el shell requiere sudo.

También es posible usar el shell para sus tareas diarias. Administrar sus archivos personales ~, editar archivos, chatear en IRC, compilar código, navegar por la web, todo eso se puede hacer en un shell. Incluso lo uso bccomo mi calculadora de referencia. Algunas cosas son más fáciles de hacer a través de una GUI, algunas cosas son más fáciles de hacer a través del shell, incluso si prefiere usar la GUI, el shell a menudo sobresaldrá en operaciones por lotes y automatización (piense en los scripts de shell). Personalmente uso lo que sea mejor para la tarea en cuestión.

En algunos casos, es una buena idea configurar su sistema para que no tenga que usarlo sudotodo el tiempo para operaciones que por defecto requieren root pero que es poco probable que causen problemas. Un ejemplo es que trabajo con hardware que implica el uso de puertos seriales, y he configurado reglas udev para dar acceso a los dispositivos como mi usuario habitual sin tener que ser root.

No creo que sea una buena idea configurar sudopara no requerir una contraseña. Hace que sea demasiado fácil estropear todo el sistema con un comando mal escrito o un script malicioso.

Si necesita realizar tareas que requieran root todo el tiempo, ¿por qué no dejar un sudo -sshell raíz persistente ejecutándose en una ventana de terminal? Luego estará disponible sin tener que escribir la contraseña, y no es tan fácil de usar accidentalmente. Incluso he configurado mi indicador de shell para que sea de color rojo brillante cuando está en un shell de raíz.

Matti Virkkunen
fuente
5

[...] Pero eso no parece tener sentido, ya que siempre tengo que ingresar sudo, ya sea que esté administrando paquetes, editando archivos de configuración, instalando un programa desde la fuente o lo que sea que tenga. [...]

El adjetivo implícita relacionada con todo esto es que son de todo el sistema o globales cambios. Debe considerar los orígenes de Unix como un sistema multiusuario 1 donde varios usuarios usarían la misma instalación de forma remota. No tendría sentido que un usuario laico permitiera cambiar la configuración global para todos los usuarios. Eran los administradores del sistema, la raíz, el privilegio y la responsabilidad.

En una configuración multiusuario, tiene el software preinstalado y su configuración de todo el sistema en /usry /etcrespectivamente. Tocar estas ubicaciones requeriría permisos de root. Pero debido a que el software Unix está escrito pensando en los usuarios múltiples, puede compilar e instalar el software en el $HOME directorio 2 y tener sus propios archivos de configuración en su hogar, donde puede editar los archivos libremente sin ser un súper usuario.

Además de instalar su propio software en casa, la mayoría del software de todo el sistema leerá la configuración específica del usuario $HOMEinmediatamente después de leer la configuración por primera vez /etc. Esto le permite personalizar casi cualquier cosa sin tener que ir root.

Con una PC hogareña, en una única configuración de usuario principal, puede usar sudoy enrutar su camino hacia las cosas que le gustan. Pero es costumbre no tocar la configuración de la aplicación /etcsino proporcionar siempre la configuración específica del usuario en el hogar. De esa manera, puede permitir que su administrador de paquetes restablezca las configuraciones de todo el sistema en las actualizaciones. Instalar un nuevo software en todo el sistema está bastante bien en la configuración de usuario único; los paquetes de distribución no asumen las alternativas, por lo que es una salida fácil.

Dejaré que mi administrador de paquetes instale cosas globalmente, pero cualquier cosa compilada de fuentes y hecha por mí mismo la dejo $HOME. Y no tengo que sudo por nada de eso.

Si tiene archivos de datos, almacenamiento fuera de su $HOME, no dude en chowno chgrplos directorios a su nombre para que pueda acceder a los archivos sin ellos sudo.

[1] (un poco irónico ya que Unix estaba destinado a ser una versión de 'usuario único' del sistema operativo Multics)

[2] (si el sistema lo permite al no montar particiones domésticas como noexec)

unperson325680
fuente
2

En los tipos de sistemas multiusuario para los que se diseñó UNIX (y, por descendencia, Linux), estas no son acciones comunes del usuario . Un administrador del sistema puede realizarlos, pero no los usuarios típicos, por lo que el sistema solicita asegurarse de que el administrador del sistema realmente quiera hacer esto.

Pero incluso en los sistemas domésticos de un solo usuario, estas no son acciones comunes del usuario . Por lo general, es necesario hacer esto cuando se configura inicialmente el sistema, pero una vez que haya terminado, un usuario típico no debería tener que hacerlo con mucha frecuencia . La mayoría de los usuarios típicos solo trabajan en archivos dentro de su directorio de inicio (o subdirectorios del mismo), utilizando programas / paquetes que ya se han instalado, y no es necesario sudopara eso. O podrían funcionar en un directorio especial en algún otro lugar del sistema que se haya reservado para ese propósito, y usted necesita sudoconfigurarlo, pero generalmente solo necesita hacerlo una vez.

¿Por que importa? Porque "usuario único" es un nombre inapropiado: usted no es el único usuario de su máquina, aunque podría ser su único usuario humano . Incluso en una instalación doméstica típica de Linux, muchos programas están configurados para usar la máquina de varias formas propias, a menudo simulando algo que un humano podría hacer si tuviera el tiempo y la atención de sobra: copias de seguridad, actualizaciones, escaneo de malware y me gusta. La mayoría de las veces, esos usos son completamente benignos, pero incluso para algunos de ellos, todavía es prudente asegurarse de que el usuario realmente quiera hacer esto. Y cuando surgen esos casos, para eso sudoestá. La computadora solo se está registrando para asegurarse de que realmente eres tú quien quiere hacer lo que alguien (tal vez tú, tal vez un programa) dijo que hiciste. Y eso ni siquiera entra en la posibilidad de malware, que ciertamente no quieres enmascarar como tú.

El más cuchara
fuente
1

Esto probablemente no sea tan común como se representa, pero generalmente ocurre cuando algo casual requiere internamente una llamada de sistema privilegiada mucho más genérica para lograr su resultado, por ejemplo:

  • Desmontar y llevar una memoria USB. umountes un comando serio, ya que puedes desmontar muchas cosas con él.
  • Conéctese a la red inalámbrica local. Nada extraordinario, pero la configuración de red ( ifup, etc.) es solo para superusuario.
  • Aplicaciones de actualización automática que se niegan a ejecutarse si no se actualizan. Actualización = instalar, y esto podría instalar muchas cosas, incluidas las que no desea.

Los sistemas generalmente evolucionan para reducir el número de tales casos. Las memorias USB ahora se pueden montar por el usuario y las redes se pueden conectar por el usuario. Pero no siempre fue así.

h22
fuente
0

Supuesto: este es su sistema y sus datos.

Solo necesita sopesar el riesgo de borrar accidentalmente datos o bloquear su sistema operativo frente a la facilidad de hacer cosas sin escribir todo el tiempo sudo.

Me conecto rutinariamente y trabajo como root en los servidores de mi casa porque yo puedo es más fácil.

Te dirán que puedes lanzar armas nucleares si no pasas por el sacro-santo, sudopero la realidad es que hoy la gente tiene rootpoderes (*) en muchos dispositivos (tu TV, tu teléfono, tu tostadora, tu Windows (como Mencionaste)). Linux no es diferente aquí, aunque a muchos les gusta pensar lo contrario.

Por cierto UAC, no se modeló, sudoya que su función de hombre es (además de hacer que su vida sea miserable) para garantizar que verá cuándo el malware quiere hacer cosas en su nombre.

(*) los rootpoderes se definen como la capacidad de destruir datos importantes. Se aplica el adagio "con gran poder vienen grandes problemas" (o lo que sea que haya sido).

Si mi suposición es incorrecta, entonces aún necesita sopesar el riesgo anterior, pero hay más variables (su trabajo, fotos tomadas por su cónyuge y almacenadas en la misma computadora portátil, ...)

WoJ
fuente
1
los poderes raíz no son la capacidad de destruir datos importantes. Siempre puedes rm -rf ~/sin ningún permiso especial. Por otro lado, no puede bloquear su teléfono móvil o TV sin rootearlo primero.
Dmitry Grigoryev
Un dispositivo es tan útil como los datos que almacena y los servicios que proporciona. El hardware y el sistema operativo que se encuentra a continuación es un mero producto. Entonces, el poder es donde puede impactar los servicios o los datos. En un televisor, puede borrar todos sus ajustes: el televisor no se puede usar (antes de que uno restaure los datos). Puede borrar todos sus datos en un teléfono móvil, que luego se convierte en una pieza de hardware sin ningún uso. Esto es lo que quise decir con "poder de raíz"
WoJ
1
De hecho, llamar a esto "poder raíz" es mal uso. La palabra "root" ya está sobrecargada para significar al menos tres cosas diferentes (el usuario root, el directorio / y el directorio / root) y agregar otro no es útil. En una máquina de un solo usuario, aunque el usuario no privilegiado ya puede eliminar sus propios archivos, su incapacidad para realizar ciertas tareas administrativas sin usar sudo todavía lo protege de varias cosas malas.
Monty Harder
1
Su analogía de TV no es buena. Borrar la configuración en su televisor es como borrar los archivos de configuración de su usuario en Linux; hacerlo normalmente solo hace que el sistema funcione de acuerdo con algunos conjuntos de valores predeterminados para ese usuario, y generalmente no hace ningún daño al sistema. Root le permite modificar el sistema en sí mismo: en el televisor, esto sería como modificar el firmware, en cuyo caso puede romper su capacidad de operar realmente.
JBentley
1
Por eso hay una evaluación de riesgos. Usted evalúa los riesgos de hacer algo (que tiene sus ventajas y desventajas) y acepta, mitiga o asegura. La recuperación puede ser simple (ventana acoplable, instantáneas de VM) o difícil (instalar desde cero): es una cuestión de planificación y, de nuevo, de evaluación. Pero como mencionó, no entiendo lo que significa el acceso raíz, que así sea.
WoJ
0

En defensa de la persona que escribió la pregunta inicial, tuve la misma pregunta en años pasados, pero tomé un enfoque diferente.

La mayoría de las respuestas aquí podrían reproducirse en un bucle, porque todas siguen enfatizando el mismo punto sobre sudo y root. Permítanme agregar una perspectiva diferente a este tema:

La forma en que aprendí Unix y Linux fue usando una de mis computadoras como un "conejillo de indias". Instalaría SCO Linux, y eventualmente Solaris y luego Linux mucho más tarde, mientras experimentaba alegremente como root para poder leer y / o explorar la jerarquía de directorios y todos los archivos con acceso sin restricciones, también creando cuentas de "usuario normal" en mi hogar de varios usuarios, aunque yo era el único usuario. Y me alegro de haberlo hecho así. Aprendí mucho sobre la "Filosofía de Unix" y la forma en que Unix estaba destinado a ser utilizado por mis experimentos.

Me divertí mucho aprendiendo sobre seguridad y también ejecutando comandos peligrosos escribiendo rm -rf / * en una terminal como root. (¡NO HAGA ESTO! ¡MANGUERÁ SU SISTEMA!) Hice cosas como esta y muchos otros comandos, solo para ver qué sucedería en tiempo real. Hice este tipo de cosas sabiendo las consecuencias de antemano, pero aún así aprendí mucho al hacerlo. Estaba usando SCO Unix LONG incluso antes de que existiera la web (¡sí, soy tan viejo!) Y experimentar de esta manera fue invaluable para mi aprendizaje.

Entonces, lo que digo es que si no te importa hacer reinstalaciones cuando algo sale mal, usa su o inicia sesión como root todo lo que quieras y configura / piratea. Aprenderás muchísimo al hacerlo.

Solo recuerde que el consejo que se ha repetido mucho aquí se reiteró por una buena razón: los protocolos de mejores prácticas han evolucionado a lo largo de las décadas a medida que compsec ha evolucionado, y DEBE prestarles atención, incluso como usuario doméstico / único de su sistema . Al hacerlo, la buena higiene / hábitos del administrador de sistemas se convertirá en una segunda naturaleza para usted.

Solo algo de reflexión sobre el tema de su y sudo. ¡Feliz pirateo!

mem
fuente