$ 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.
¿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?¿Es cierto que
sudopide la contraseña despuésexecve()comienza la ejecuciónmain()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.
fuente

Respuestas:
En su configuración más común,
sudosolicita la contraseña del usuario que se está ejecutandosudo(como usted dice, el usuario correspondiente a la identificación de usuario real del proceso). El objetivosudoes otorgar privilegios adicionales a usuarios específicos (según lo determine la configuración ensudoers), sin que esos usuarios tengan que proporcionar ninguna otra autenticación que no sea la suya. Sin embargo,sudohace comprobación de que el usuario que ejecutasudorealmente es quien dice ser, y que hace que al pedir su contraseña (o cualquier mecanismo de autenticación está configurado parasudo, 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 rootsudoerspuede hacerlo utilizando solo su propia autenticación; pero un usuario no puede, no puede (al menos, no usandosudo). Esto no se aplica por Linux en sí, sino porsudo(y su configuración de autenticación).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 desudopedir la contraseña, aunque sea root, es verificar la identidad del usuario en ejecución (en su configuración típica).fuente
sudopor lo general, solicita la contraseña del usuario que la ejecuta, aunque esto se puede configurar :La configuración siempre
rootpwhasudosolicitado la contraseña de root,targetpwsolicita la contraseña del usuariosudoque eventualmente ejecutará el programa como yrunaspwsolicita la contraseña del usuario configuradorunas_default.Una
sudoconfiguración binaria como esa puede ser iniciada con privilegios de root por cualquier usuario. Asumiendosudoque 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.fuente
De la (s) primera (s) línea (s) de
man sudo:Entonces:
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.
¿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: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.
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.
fuente
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) usarsudo. Si quiero usarsudo, puedo usarsupara "convertirme" en el usuario Administrador, y luego en ese rolsudo. En esa situación, termino ingresando la contraseña de la cuenta de administrador dos veces: una cuando corrosuy otra cuando corrosudo.fuente