Linux: ¿por qué es necesario configurar los binarios su y sudo en UID raíz?

Linux: ¿por qué es necesario configurar los binarios su y sudo en UID raíz?

Estoy tratando de encontrar el motivo correcto para la pregunta formulada. Mi entendimiento es que:

  • sudonecesita leer el /etc/sudoersarchivo que solo es legible por root, por lo que debe configurarse en UID root
  • suva 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 invocar setuid()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 ( suy 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 sutienen sudootras características que también requieren ejecutarse como root, pero en realidad son detalles secundarios en comparación con los anteriores. Como mencionas, sudonecesita 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 suy sudoson setuid root.

¿Cómo funcionan las partes internas de Sudo?y las preguntas relacionadas brindan antecedentes adicionales.

información relacionada