$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 136808 Jul 4 2017 /usr/bin/sudo
por lo que sudo
es ejecutable por cualquier usuario, y cualquier usuario que ejecuta sudo
tendrán raíz que el identificador de usuario efectivo del proceso ya que el bit set-user-id de /usr/bin/sudo
es 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
sudo
solicita? ¿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
sudo
y luego proporcionando su propia contraseña? ¿Puede Linux restringir eso en algunos usuarios?¿Es cierto que
sudo
pide 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,
sudo
solicita 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 objetivosudo
es 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,sudo
hace comprobación de que el usuario que ejecutasudo
realmente 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.).sudo
no necesariamente otorga el derecho de convertirse en root, puede otorgar una variedad de privilegios. Cualquier usuario al que se le permita convertirse en rootsudoers
puede 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).sudo
solicita 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 desudo
pedir la contraseña, aunque sea root, es verificar la identidad del usuario en ejecución (en su configuración típica).fuente
sudo
por lo general, solicita la contraseña del usuario que la ejecuta, aunque esto se puede configurar :La configuración siempre
rootpw
hasudo
solicitado la contraseña de root,targetpw
solicita la contraseña del usuariosudo
que eventualmente ejecutará el programa como yrunaspw
solicita la contraseña del usuario configuradorunas_default
.Una
sudo
configuración binaria como esa puede ser iniciada con privilegios de root por cualquier usuario. Asumiendosudo
que 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
:su
le 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 usarsu
para "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 corrosu
y otra cuando corrosudo
.fuente