¿Qué hace el servicio de sudo?

17

Hasta donde yo sé y parece que otras personas tienen la misma opinión, sudo es un comando que ejecuta algo con privilegios administrativos.

Sin embargo, cuando corro rcconfpuedo ver esta línea:

[*] sudo    Provide limited super user privileges to specific users

Entonces, ¿qué sentido tiene este servicio? ¿O es esto incluso un servicio?

s3v3n
fuente
Esto es lo que encontré mientras buscaba en google-> Sudo
adi
"Aquí es donde entra sudo: permite a los usuarios autorizados (normalmente usuarios" administrativos "; para obtener más información, consulte AddUsersHowto) ejecutar ciertos programas como Root sin tener que conocer la contraseña de root". - Eso es exactamente lo que dije en mi pregunta.
s3v3n
3
La pregunta es sobre el servicio, no el comando
s3v3n

Respuestas:

22

Respuesta corta

Para revocar las acciones de autenticación "en caché" de los usuarios al reiniciar. No es un demonio, solo un script ejecutado en el momento del arranque.


Respuesta extensa

Al inspeccionar el archivo de inicio /etc/init.d/sudoque 'inicia el servicio', puede ver fácilmente lo que está haciendo:

case "$1" in
  start)
        # make sure privileges don't persist across reboots
        if [ -d /var/lib/sudo ]
        then
                find /var/lib/sudo -exec touch -t 198501010000 '{}' \;
        fi
        ;;
  stop|reload|restart|force-reload)
        ;;
  *)
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac

Entonces, básicamente, solo toca algunos archivos /var/lib/sudoal inicio del sistema para tener una marca de tiempo de modificación muy antigua. Como resultado, las acciones de autenticación otorgadas 'en caché' se revocan al inicio del servicio (que ocurre en el arranque).

¿Algún detalle más sobre el /var/lib/sudodirectorio y esas marcas de tiempo, por favor? Bueno, desde el mapage de sudo(8):

[...]
Once a user has been authenticated, a time stamp is updated and the
user may then use sudo without a password for a short period of time
(15 minutes unless overridden in sudoers).
[...]
Since time stamp files live in the file system, they can outlive a
user's login session.  As a result, a user may be able to login, run a
command with sudo after authenticating, logout, login again, and run
sudo without authenticating so long as the time stamp file's
modification time is within 15 minutes (or whatever the timeout is set
to in sudoers).
[...]
/var/lib/sudo           Directory containing time stamps
gertvdijk
fuente
Respuesta perfecta :)
s3v3n
12

El sudoarchivo de servicio existe para garantizar que los privilegios solicitados no permanezcan después de un reinicio. Básicamente garantiza que después de reiniciar, los usuarios normales que solicitaron permisos de root permanecerán como usuarios normales.


Una explicación detallada sobre sudo

Toda la explicación a continuación es obtener toda la información para todos los que leen esta pregunta y luego explicar qué está haciendo allí el archivo sudo en la carpeta de servicio.

Cuando instala Ubuntu o cualquier otra distribución que use sudola diferencia entre ser root y ser un usuario que usa sudopara obtener privilegios de "root like" (privilegios administrativos o de superusuario) es lo siguiente:

Como raíz

  • No se le solicita una contraseña para cada uno o todos los comandos que ejecuta en una sesión
  • No todos los comandos que ejecutas se registrarán de forma predeterminada
  • El sistema supone que sabe lo que está haciendo (Razón por la cual no solicita una contraseña cada vez que ejecuta un comando)
  • No hay una segunda oportunidad o una opción de último minuto si comete un error

Como sudo

  • Se le solicita una contraseña para cada uno o todos los comandos que ejecuta en una sesión. Por ejemplo, si abre un terminal y ejecuta un comando que necesita privilegios administrativos, le pedirá la contraseña una vez para esa sesión hasta que cierre el terminal o cierre la sesión. Esto varía según el comando que use y dónde. Puede preguntar una o varias veces.
  • Todos los comandos que ejecute se registrarán ya que en realidad está solicitando permiso para usar un comando privilegiado de superusuario.
  • El sistema asume que está solicitando permiso temporalmente y el derecho administrativo se prestará temporalmente (hasta que cierre la sesión, cierre la terminal, etc.)
  • Tiene una opción de último minuto para corregir cualquier error. Esto se realiza en el momento en que se le solicita la contraseña.

¿Por qué se creó SUDO?

La creación de SUDO se realizó porque en el pasado, el uso de root creaba más problemas que soluciones. Los usuarios tenían todos los derechos, lo que significaba que si lo hicieron una pequeña limpieza de primavera y literalmente borrados del /usr, /liby /bincarpetas (porque pensaban que no les falta) .. adivinar lo que sucedería. Muchos problemas en el pasado se debían a que los usuarios no sabían el poder que tenían al usar root. Básicamente tenían root pero no entendían Linux, la jerarquía del sistema de archivos, qué archivos eran importantes, etc. (Algo así como tener un ferrari y no saber conducir ... ¡en una autopista!)

SUDO también es utilizado por aplicaciones GUI (como Update Manager) cuando necesitan privilegios administrativos temporales para hacer algo. Solo lo necesitan para una cantidad específica de comandos (normalmente 1) y luego vuelven al privilegio de nivel de usuario. Esto es para evitar tener privilegios de root todo el tiempo y evitar cometer un error si el usuario decide eliminar alguna parte importante del sistema.

Además, proporciona una mejor seguridad porque el usuario raíz viene deshabilitado de forma predeterminada.

Por último, si tiene una PC de escritorio o un servidor, realmente no quiere que todos sean root, ni que tenga todos los privilegios de administrador. Muy mala idea si tu hermanita o hermanitos comienzan a preguntarse qué sucedería si /bootcumpliera con la DELllave. Aquí es donde sudoentra para disminuir la posibilidad de que algo malo suceda.

¿Qué significa proporcionar privilegios limitados de superusuario a usuarios específicos ?

Los usuarios de sudo o sudoers en realidad tienen un archivo de configuración que les dice cuán limitado o abierto es el comando sudo para un usuario específico. El archivo /etc/sudoerstiene toda la información para limitar o dar acceso a un usuario de sudo. Por defecto viene con acceso a todo, pero puede configurarlo o limitarlo como lo desee.

Para obtener información sobre cómo usar el tipo de archivo sudoers man sudoersen una terminal. Por ejemplo, el formato normal es:

ANFITRIÓN DE USUARIO = COMANDOS

Por ejemplo, cyrex server1 = /bin/lsle dará al usuario cyrex en el servidor host1 acceso para ejecutar el comando ls.

Por ejemplo, cyrex server1 (root) = /bin/lsle dará al usuario cyrex en el servidor host1 acceso para ejecutar el comando ls como root.

Por ejemplo, cyrex ALL = /bin/lsle dará al usuario cyrex en todos los hosts acceso para ejecutar el comando ls.

Por ejemplo, cyrex ALL = ALLle dará al usuario cyrex en todos los hosts acceso para ejecutar todos los comandos.

Por ejemplo luis ALL=(root) NOPASSWD: /bin/kill, /usr/bin/killall, me permitirá ejecutar sudo para los comandos killy killallcomo root sin pedir una contraseña.

ingrese la descripción de la imagen aquí

Luis Alvarado
fuente
2
Él sabe lo que hace el comando sudo. La pregunta es sobre un servicio del sistema para sudo.
gertvdijk
1
@gertvdijk: primero tuve que explicar los conceptos básicos, ya que no solo él analizará esta pregunta. La última parte incluye la única razón por la que veo el archivo sudo en la carpeta de servicio.
Luis Alvarado
Gracias Luis Alvarado - The Wolver por una información tan extensa y gracias por el divertido xkcd modificado que hace referencia al !!operador bang bang, pero ¿qué hace el servicio (NO el comando) sudo? Sería genial si pudiera actualizar su respuesta para realmente responder la pregunta.
s3v3n
1
Un poco exagerado explicando todo eso por una frase al final, pero responde a mi pregunta;)
s3v3n
1
@ LuisAlvarado-TheWolverine Jaja, tienes razón. Fue bueno que me respondieras sí, lo hice ... Gracias
Lucio