GNU/Linux >> Tutoriales Linux >  >> Linux

Los administradores de sistemas reales no sudo

Hace unos meses, leí un artículo muy interesante que contenía buena información sobre una característica de Linux sobre la que quería aprender más. No le diré el nombre del artículo, de qué se trataba, ni siquiera el sitio web en el que lo leí, pero el artículo me hizo estremecer.

La razón por la que encontré este artículo tan vergonzoso es que antecede cada comando con el sudo dominio. El problema que tengo con esto es que el artículo supuestamente es para administradores de sistemas, y los administradores de sistemas reales no usan sudo delante de cada comando que emiten. Hacerlo es un mal uso grave del sudo dominio. He escrito sobre este tipo de uso indebido en mi libro, "La filosofía de Linux para administradores de sistemas". El siguiente es un extracto del Capítulo 19 de ese libro.

En este artículo, exploramos por qué y cómo sudo la herramienta está siendo mal utilizada y cómo eludir la configuración que obliga a uno a usar sudo en lugar de trabajar directamente como root.

sudo o no sudo

Parte de ser administrador del sistema y usar tus herramientas favoritas es usar las herramientas que tenemos correctamente y tenerlas disponibles sin restricciones. En este caso, encuentro que sudo El comando se usa de una manera para la que nunca fue pensado. Tengo una aversión particular por cómo el sudo La instalación se está utilizando en algunas distribuciones, especialmente porque se emplea para limitar y restringir el acceso de las personas que realizan el trabajo de administración del sistema a las herramientas que necesitan para realizar sus funciones.

“[SysAdmins] no use sudo.”
– Paul Venezia

Venezia explica en su artículo de InfoWorld que sudo se utiliza como muleta para los administradores de sistemas. No pasa mucho tiempo defendiendo esta posición o explicándola. Él simplemente declara esto como un hecho. Y estoy de acuerdo con él, para los administradores de sistemas. No necesitamos las ruedas de entrenamiento para hacer nuestro trabajo. De hecho, se interponen en el camino.

Algunas distribuciones, como Ubuntu, usan sudo comando de una manera que pretende hacer que el uso de comandos que requieren privilegios elevados (raíz) sea un poco más difícil. En estas distribuciones, no es posible iniciar sesión directamente como usuario raíz, por lo que sudo El comando se utiliza para permitir a los usuarios no root el acceso temporal a los privilegios de root. Se supone que esto hace que el usuario sea un poco más cuidadoso al emitir comandos que necesitan privilegios elevados, como agregar y eliminar usuarios, eliminar archivos que no les pertenecen, instalar software nuevo y, en general, todas las tareas que se requieren para administrar. un host Linux moderno. Obligar a los administradores de sistemas a usar sudo Se supone que el comando como prefacio a otros comandos hace que trabajar con Linux sea más seguro.

Usando sudo en la forma en que lo hacen estas distribuciones es, en mi opinión, un intento horrible e ineficaz de proporcionar a los administradores de sistemas novatos una falsa sensación de seguridad. Es completamente ineficaz para proporcionar cualquier nivel de protección. Puedo emitir comandos que son igualmente incorrectos o dañinos usando sudo como puedo cuando no lo uso. Las distribuciones que usan sudo anestesiar la sensación de miedo de que podamos emitir un comando incorrecto está haciendo un gran flaco favor a los administradores de sistemas. No hay límite o restricción impuesta por estas distribuciones en los comandos que uno podría usar con el sudo instalaciones. No hay ningún intento de limitar realmente el daño que podría causarse protegiendo realmente el sistema de los usuarios y la posibilidad de que puedan hacer algo dañino, ni debería haberlo.

Así que seamos claros sobre esto:estas distribuciones esperan que el usuario realice todas las tareas de administración del sistema. Hacen creer a los usuarios, que en realidad son administradores del sistema, que de alguna manera están protegidos de los efectos de hacer algo malo porque deben tomar este paso adicional restrictivo para ingresar su propia contraseña para ejecutar los comandos.

Omitir sudo

Las distribuciones que funcionan así suelen bloquear la contraseña del usuario root (Ubuntu es una de estas distribuciones). De esta manera, nadie puede iniciar sesión como root y comenzar a trabajar sin trabas. Veamos cómo funciona esto y luego cómo evitarlo.

Permítame estipular la configuración aquí para que pueda reproducirla si lo desea. Como ejemplo, instalé Ubuntu 16.04 LTS1 en una VM usando VirtualBox. Durante la instalación, creé un usuario no root, estudiante, con una contraseña simple para este experimento.

Inicie sesión como usuario estudiante y abra una sesión de terminal. Veamos la entrada para root en /etc/shadow file archivo, que es donde se almacenan las contraseñas cifradas.

student@machine1:~$ cat /etc/shadow
cat: /etc/shadow: Permission denied

Se denegó el permiso, por lo que no podemos ver el archivo /etc/shadow file . Esto es común a todas las distribuciones para que los usuarios sin privilegios no puedan ver ni acceder a las contraseñas cifradas. Ese acceso haría posible el uso de herramientas comunes de piratería para descifrar esas contraseñas, por lo que es inseguro permitir eso.

Ahora intentemos su – para rootear.

student@machine1:~$ su -
Password:
su: Authentication failure

Este intento de usar el su El comando para elevar a nuestro usuario al privilegio de root falla porque la cuenta de root no tiene contraseña y está bloqueada. Usemos sudo para mirar el /etc/shadow file archivo.

student@machine1:~$ sudo cat /etc/shadow
[sudo] password for student: <enter the user password>
root:!:17595:0:99999:7:::
<snip>
student:$6$tUB/y2dt$A5ML1UEdcL4tsGMiq3KOwfMkbtk3WecMroKN/:17597:0:99999:7:::
<snip>

He truncado los resultados para mostrar solo la entrada para los usuarios raíz y estudiantes. También acorté la contraseña cifrada para que la entrada quepa en una sola línea. Los campos están separados por dos puntos (: ) y el segundo campo es la contraseña. Tenga en cuenta que el campo de contraseña para root es un "bang", conocido en el resto del mundo como un signo de exclamación (! ). Esto indica que la cuenta está bloqueada y que no se puede usar.

Ahora, todo lo que tenemos que hacer para usar la cuenta raíz como administradores de sistemas adecuados es configurar una contraseña para la cuenta raíz.

student@machine1:~$ sudo su -
[sudo] password for student: <Enter password for student>
root@machine1:~# passwd root
Enter new UNIX password: <Enter new root password>
Retype new UNIX password: <Re-enter new root password>
passwd: password updated successfully
root@machine1:~#

Ahora podemos iniciar sesión directamente en una consola como root o su – directamente a la raíz en lugar de tener que usar sudo para cada comando. Por supuesto, podríamos usar sudo su – cada vez que queremos iniciar sesión como root, pero ¿por qué molestarse?

Por favor, no me malinterpreten. Las distribuciones como Ubuntu y sus parientes ascendentes y descendentes están perfectamente bien y he usado varias de ellas a lo largo de los años. Cuando uso Ubuntu y distribuciones relacionadas, una de las primeras cosas que hago es configurar una contraseña de root para poder iniciar sesión directamente como root.

Usos válidos de sudo

El sudo la instalación tiene sus usos. La verdadera intención de sudo es permitir que el usuario root delegue a uno o dos usuarios no root, el acceso a uno o dos comandos privilegiados específicos que necesitan regularmente. El razonamiento detrás de esto es el del administrador de sistemas perezoso; permitir que los usuarios accedan a uno o dos comandos que requieren privilegios elevados y que usan constantemente, muchas veces al día, ahorra al administrador del sistema muchas solicitudes de los usuarios y elimina el tiempo de espera que los usuarios experimentarían de otra manera. Pero la mayoría de los usuarios que no son root nunca deberían tener acceso completo a la raíz, solo a los pocos comandos que necesitan.

A veces necesito usuarios no root para ejecutar programas que requieren privilegios de root. En casos como este, configuro uno o dos usuarios no root y los autorizo ​​a ejecutar ese único comando. El sudo La instalación también mantiene un registro de la ID de usuario de cada usuario que la utiliza. Esto podría permitirme rastrear quién cometió un error. Eso es todo lo que hace; no es un protector mágico.

El sudo La instalación nunca fue pensada para ser utilizada como una puerta de enlace para los comandos emitidos por un administrador de sistemas. No puede comprobar la validez del comando. No verifica si el usuario está haciendo algo estúpido. No hace que el sistema esté a salvo de los usuarios que tienen acceso a todos los comandos del sistema, incluso si es a través de una puerta de enlace que los obliga a decir "por favor". Ese nunca fue el propósito previsto.

“Unix nunca dice por favor.”
– Rob Pike

Esta cita sobre Unix es tan cierta sobre Linux como sobre Unix. Los administradores de sistemas iniciamos sesión como root cuando necesitamos trabajar como root y nos desconectamos de nuestras sesiones de root cuando terminamos. Algunos días permanecemos conectados como root todo el día, pero siempre trabajamos como root cuando lo necesitamos. Nunca usamos sudo porque nos obliga a escribir más de lo necesario para ejecutar los comandos que necesitamos para hacer nuestro trabajo. Ni Unix ni Linux nos pregunta si realmente queremos hacer algo, es decir, no dice "Por favor verifica que quieres hacer esto".

Sí, no me gusta la forma en que algunas distribuciones usan sudo dominio. La próxima vez exploraré algunos casos de uso válidos para sudo y como configurarlo para estos casos.

[ ¿Quiere poner a prueba sus habilidades de administrador de sistemas? Tome una evaluación de habilidades hoy. ]


Linux
  1. [Solucionado] bash:sudo:comando no encontrado

  2. sudo:npm:comando no encontrado

  3. El comando Docker no se puede conectar al demonio Docker

  4. comando no encontrado al usar sudo

  5. Ejecute el comando cd como superusuario en Linux

sudo:apt-add-repository:¿comando no encontrado?

Cómo ejecutar el comando Sudo sin contraseña

Comando Sudo en Linux

Conceptos básicos de la línea de comandos de Linux:sudo

Comando ps de Linux:20 ejemplos de la vida real

sudo:python:comando no encontrado