
Estoy tratando de encontrar el motivo correcto para la pregunta formulada. Mi entendimiento es que:
sudo
necesita leer el/etc/sudoers
archivo que solo es legible por root, por lo que debe configurarse en UID rootsu
va a crear un nuevo shell con un UID real y efectivo diferente, y necesita verificar la contraseña. Para verificar la contraseña, debe leer/etc/shadow
, por lo que debe configurarse en UID raíz. Después de verificar la contraseña, necesitaría invocarsetuid()
el proceso bifurcado y, para usar un argumento UID arbitrario, su proceso principal debe tener root como UID efectivo, por lo que esto también constituye otra razón.
¿Son correctas las razones anteriores?
Respuesta1
Sus razones son en su mayoría correctas, pero en ambos casos ( su
y sudo
), la razón básica por la que necesitan ejecutarse como root es que deben poder cambiar los distintos identificadores de usuario y grupo del proceso actual. Esto implica llamar a funciones comosetreuid
, que solo funciona para usuarios y grupos arbitrarios si el proceso de llamada se ejecuta como root.
Ambos su
tienen sudo
otras características que también requieren ejecutarse como root, pero en realidad son detalles secundarios en comparación con los anteriores. Como mencionas, sudo
necesita leer /etc/sudoers
; pero el hecho de que este último sólo sea legible por root no es un requisito estricto. Ambos programas pueden usar PAM para realizar la autenticación, pero normalmente también incluyen respaldos que requieren poder leer /etc/shadow
, que además solo es legible por root. La lista continua; pero realmente no importa ya que lo ineludible es que la posibilidad de cambiar de usuario y/o grupo solo se la da el root, por eso su
y sudo
son setuid root.
¿Cómo funcionan las partes internas de Sudo?y las preguntas relacionadas brindan antecedentes adicionales.