¿Qué contraseña de usuario solicita `sudo`?

10
$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 136808 Jul  4  2017 /usr/bin/sudo

por lo que sudoes ejecutable por cualquier usuario, y cualquier usuario que ejecuta sudotendrán raíz que el identificador de usuario efectivo del proceso ya que el bit set-user-id de /usr/bin/sudoes conjunto.

Desde https://unix.stackexchange.com/a/11287/674

La diferencia más visible entre sudo y su es que sudo requiere la contraseña del usuario y su requiere la contraseña de root.

  1. ¿Qué contraseña de usuario sudosolicita? ¿Es el usuario representado por la ID de usuario real del proceso?

    En caso afirmativo, ¿ningún usuario puede obtener el privilegio de superusuario ejecutando sudoy luego proporcionando su propia contraseña? ¿Puede Linux restringir eso en algunos usuarios?

  2. ¿Es cierto que sudopide la contraseña después execve() comienza la ejecución main()de /usr/bin/sudo?

    Dado que el euid del proceso se ha cambiado a root (porque se configuró el bit set-user-id de / usr / bin / sudo), ¿cuál es el punto de que sudo solicite la contraseña más adelante?

Gracias.

He leído https://unix.stackexchange.com/a/80350/674 , pero no responde las preguntas anteriores.

Tim
fuente
3
No es ningún usuario, sino solo aquellos incluidos en la lista de sudoers.
Rodrigo
1
@ Rodrigo Eso suena como una respuesta, ponlo en una respuesta, no un comentario.
Philip Kendall
2
@PhilipKendall Eso respondió solo una parte de las dudas del OP.
Rodrigo

Respuestas:

22
  1. En su configuración más común, sudosolicita la contraseña del usuario que se está ejecutando sudo (como usted dice, el usuario correspondiente a la identificación de usuario real del proceso). El objetivo sudoes otorgar privilegios adicionales a usuarios específicos (según lo determine la configuración en sudoers), sin que esos usuarios tengan que proporcionar ninguna otra autenticación que no sea la suya. Sin embargo, sudo hace comprobación de que el usuario que ejecuta sudorealmente es quien dice ser, y que hace que al pedir su contraseña (o cualquier mecanismo de autenticación está configurado para sudo, por lo general se usa PAM - así que esto podría implicar una huella digital, o de dos factores autenticación, etc.).

    sudono necesariamente otorga el derecho de convertirse en root, puede otorgar una variedad de privilegios. Cualquier usuario al que se le permita convertirse en root sudoerspuede hacerlo utilizando solo su propia autenticación; pero un usuario no puede, no puede (al menos, no usando sudo). Esto no se aplica por Linux en sí, sino por sudo(y su configuración de autenticación).

  2. sudosolicita la contraseña una vez que se ha comenzado a ejecutar; no puede hacer lo contrario ( es decir, no puede hacer nada antes de que comience a ejecutarse). El punto de sudopedir la contraseña, aunque sea root, es verificar la identidad del usuario en ejecución (en su configuración típica).

Stephen Kitt
fuente
12

sudopor lo general, solicita la contraseña del usuario que la ejecuta, aunque esto se puede configurar :

A diferencia su(1), cuando sudoersrequiere autenticación, valida las credenciales del usuario que invoca, no las credenciales del usuario objetivo (o de la raíz). Esto puede ser cambiado a través de los rootpw, targetpwy runaspwbanderas, que se describen más adelante.

La configuración siempre rootpwha sudosolicitado la contraseña de root, targetpwsolicita la contraseña del usuario sudoque eventualmente ejecutará el programa como y runaspwsolicita la contraseña del usuario configurado runas_default.

Una sudoconfiguración binaria como esa puede ser iniciada con privilegios de root por cualquier usuario. Asumiendo sudoque no tiene ningún error con su código de autenticación, eso en sí mismo no importará mucho.

De manera similar, cualquier proceso también puede ejecutar código en modo kernel, llamando a cualquier llamada al sistema, por ejemplo open(). (eso no es lo mismo que el código de espacio de usuario como root.) Mientras el kernel no tenga errores, no podrán ejecutar código arbitrario.

ilkkachu
fuente
8

De la (s) primera (s) línea (s) de man sudo:

DESCRIPCIÓN
sudo permite a un usuario permitido ejecutar un comando como superusuario u otro usuario, según lo especificado por la política de seguridad. El ID de usuario real (no efectivo) del usuario que invoca se utiliza para determinar el nombre de usuario con el que consultar la política de seguridad.

Entonces:

  1. Se utiliza la ID de usuario real (no efectiva) del usuario que invoca ...
  2. Sí, cualquier usuario ( permitido ) puede obtener los privilegios adicionales del superusuario (u otro) ejecutando sudo y luego proporcionando la autenticación ( configurada ) requerida. Tanto los permitidos como los configurados se configuran en archivos de sudoers.

  3. ¿Puede Linux restringir eso en algunos usuarios?
    Sí, puede, pero no lo hace. Linux está configurado para permitir que el binario sudo tome la decisión basada en el conjunto de reglas (política de seguridad) dentro del programa sudo y dentro del archivo /etc/sudoers. Por lo general, se pueden usar otros archivos (también / en su lugar).

De man setresuid:

DESCRIPCIÓN
setresuid () establece la ID de usuario real, la ID de usuario efectiva y la ID de usuario de set guardada del proceso de llamada.

  1. La única forma de obtener permisos de superusuario otorgados por el núcleo es ejecutar un programa suid. No puede ser de otra manera. Es la forma en que Linux ha seleccionado otorgar permisos de superusuario.

  2. Después de que el kernel ha cargado un ejecutable que no puede ser modificado por ningún otro usuario (archivo y directorio propiedad de root y que solo el root puede escribir), el ejecutable mismo (sudo) autentica al usuario pidiéndole su contraseña (o algo más como está configurado) y decide si y qué permisos otorgar.

Isaac
fuente
-1

Adicional a otras buenas respuestas sobre sudo:

sule permite convertirse efectivamente en un usuario diferente. En mi propia computadora no ejecuto como administrador para el uso diario, lo que significa, entre otras cosas, que no puedo (directamente) usar sudo. Si quiero usar sudo, puedo usar supara "convertirme" en el usuario Administrador, y luego en ese rol sudo. En esa situación, termino ingresando la contraseña de la cuenta de administrador dos veces: una cuando corro suy otra cuando corro sudo.

Stephen R
fuente