¿Cómo sabe el sistema operativo que un comando necesita sudo?

16
  1. Cuando ejecuta un ejecutable, a veces el sistema operativo le negará su permiso. Por ejemplo, ejecutar make installcon el prefijo que es una ruta del sistema necesitará sudo, mientras que con el prefijo que es una ruta que no es del sistema no se solicitará sudo. ¿Cómo decide el sistema operativo que ejecutar un ejecutable requeriría más privilegios que los que tiene un usuario, incluso antes de que el programa haga algo?
  2. A veces, ejecutar un programa no se le negará el permiso, pero el programa podrá hacer más cosas si se ejecuta con sudo. Por ejemplo, cuando se ejecuta duen algún directorio del sistema, solo con sudoél podrá acceder a algún directorio. ¿Por qué el sistema operativo no niega el permiso de ejecutar un programa de este tipo, o notifica amigablemente que se prefiere más privilegio, antes de que el programa pueda ejecutarse?
  3. ¿Es cierto que siempre que sudofuncione, sutambién funcionará, y cuando sufuncione, sudotambién funcionará? o con su, un usuario puede hacer más que con sudo? ¿Cómo decide el sistema operativo cuándo sudofunciona y cuándo suse necesita?
StackExchange para todos
fuente
¿Le han respondido esta pregunta o desea más información?
ctrl-alt-delor

Respuestas:

14
  1. A veces, el mensaje "Permiso denegado" se debe a que los permisos del sistema de archivos le niegan el acceso de escritura, por ejemplo. El ejecutable / herramienta simplemente comprueba si el sistema de archivos le otorga permisos suficientes para hacer lo que está a punto de hacer y arroja un error si el sistema de archivos lo niega. Otras veces, la herramienta en sí verificará su ID de usuario antes de permitirle continuar usándola.
  2. Cuando ejecuta un programa con sudousted, lo está ejecutando con el nombre de otro usuario. Si ese usuario es "capaz de hacer más cosas" que su usuario y la sudoconfiguración le permite hacer estas cosas en nombre del otro usuario, entonces sí, sudole permitirá hacer más cosas. Sin embargo, esto no es necesario. Si acaba de virar sudoal comienzo de la línea de comando, en realidad está sudoentrando root, por lo que generalmente puede hacer más cosas que un simple mortal.
  3. Definitivamente no. Para usarlo sudo, debe proporcionar su propia contraseña de usuario y luego puede hacer algunas cosas en nombre del usuario objetivo. Para usarlo su, necesita la contraseña del usuario objetivo y, si la tiene, se convierte en ese usuario objetivo en lo que respecta al sistema y puede hacer cualquier cosa que el usuario pueda hacer.

Ver también

Joseph R.
fuente
Gracias. ¿"Permisos del sistema de archivos le niegan acceso de escritura" = "el modo de acceso del archivo no tiene un bit de ejecución establecido para el usuario, que puede ser configurado por chmod"?
StackExchange for All
1
@Tim Actually it = "el modo de acceso del archivo no tiene un bit de escritura establecido para el usuario". Y sí, esto, por supuesto, puede remediarse chmodsiempre que sea el propietario del archivo o root.
Joseph R.
¿Si sudo es necesario, depende completa y únicamente de si el bit de ejecución no está configurado para el usuario? Ver unix.stackexchange.com/q/147052/674
StackExchange for All
@Tim Obviamente, necesitas el bit de ejecución para poder ejecutar el ejecutable en primer lugar.
Joseph R.
1
@JosephR. No es obvio. chmod 400 hello && /lib64/ld-linux-x86-64.so.2 ./helloproduce un bonito "¡Hola, mundo!" salida.
doneal24
24

Para los fines que ha descrito, el sistema operativo no decide si necesita sudo para ejecutar inicialmente el programa. En cambio, después de que el programa comienza a ejecutarse y luego intenta hacer algo que el usuario actual no permite (como escribir un archivo /usr/binpara instalar un nuevo comando), el sistema operativo impide el acceso al archivo. La acción a tomar en esta condición depende del programa; makedeja de ejecutarse pero ducontinuará con el siguiente archivo / directorio después de imprimir un mensaje.

Los comandos suy sudoson dos formas diferentes de ejecutar un programa con privilegios de root. Pueden diferir en detalles menores, como el contenido del entorno al iniciar el nuevo programa, según las opciones utilizadas. El sistema operativo no necesita decidir cuándo funcionará uno u otro.

Greg Hewgill
fuente
6

suy sudoson programas privilegiados. sucambia (después de una autenticación exitosa) la identificación real y efectiva del usuario y del grupo a la del usuario al que se sudirige. Por lo tanto, sues similar a login. Tenga en cuenta que suse puede usar para cambiar a cualquier usuario, no solo root. sudotambién cambia los identificadores de usuario y grupo reales y efectivos. Hasta este punto suy sudoson similares (pero no relacionados), más allá de eso son muy diferentes.

Con su, debe conocer la contraseña del objetivo y, una vez que se haya autenticado, puede hacer lo que quiera como ese usuario. El uso de supuede restringirse mediante la configuración SU_WHEEL_ONLYde /etc/login.defs. Si está configurado, solo los usuarios del grupo wheelpueden usarlo su; de lo contrario, no está restringido. Aparte de eso, sues todo o nada.

sudoes completamente diferente con respecto a eso. Con sudousted puede definir políticas bastante complejas /etc/sudoerssobre lo que el sudoer (el usuario que llama sudo) puede hacer. Por ejemplo, puede definir políticas donde ciertos usuarios pueden ejecutar solo ciertos programas con ciertos privilegios, mientras que otros usuarios pueden ejecutar otros programas con otros privilegios.

Una de las características más llamativas sudoes que puede configurarlo de modo que un usuario tenga que autenticarse con su propia contraseña (en lugar de la del objetivo). Por lo tanto, se sudoha vuelto muy popular entre los administradores, ya que permite autorizar a los usuarios a realizar solo operaciones privilegiadas definidas sin tener que acceder a la contraseña del superusuario, además de obtener cierto grado de responsabilidad.

contramodo
fuente
2

tl; dr El acceso lo determina el usuario que ejecuta la aplicación y sudoejecuta las aplicaciones como un usuario diferente.

Versión completa:

¿Cómo sabe el sistema operativo que un comando necesita sudo?

No lo sabe UNIX gestiona los permisos no a nivel de aplicación sino a nivel de sistema de archivos: se otorgan permisos para que los usuarios accedan a archivos específicos. Las aplicaciones se ejecutan en nombre del usuario: cada proceso en ejecución tiene un usuario asociado. Ese usuario se utiliza para determinar los permisos para esa aplicación. Sudo funciona ejecutando aplicaciones en nombre de otro usuario (con permisos asociados con ese otro usuario), es decir root, el superusuario.

En cuanto a sus ejemplos:

  1. Si el usuario tiene acceso de escritura a un directorio en particular, puede make installingresar a ese directorio. De lo contrario, pueden haberlo roothecho mediante el uso sudo.

  2. Si no puede acceder a los archivos en un directorio, duejecutarlo tampoco puede acceder a él. rootpuede acceder a prácticamente todos los archivos, por lo que sudo du( duejecutar en nombre de root) también puede acceder a ellos.

¿Es cierto que siempre que sudo funcione, su también funcionará, y cuando sudo funcione, sudo también funcionará?

Si y no. Sí, si el programa se ejecuta realmente , debería comportarse igual bajo ambos sudoy su. Sin embargo, sudoproporciona permite un control más detallado de quién puede ejecutar qué mediante un conjunto de reglas almacenadas en el /etc/sudoersarchivo. sues más simple: si conoce la contraseña del usuario objetivo, puede ejecutar programas en nombre de ese usuario.

Última nota: cómo la aplicación maneja la denegación de acceso (si aborta o ignora o advierte al usuario) depende de la aplicación.

el.pescado
fuente
1

Nadie tiene un ✓ todavía, así que preparé una respuesta que tiene todo lo que se me ocurre.

1 Cuando ejecuta un ejecutable, a veces el sistema operativo le negará su permiso. Por ejemplo, ejecutar make install con el prefijo que es una ruta del sistema necesitará sudo, mientras que con el prefijo que es una ruta que no es del sistema no se solicitará sudo. ¿Cómo decide el sistema operativo que ejecutar un ejecutable requeriría más privilegios que los que tiene un usuario, incluso antes de que el programa haga algo?

No, no se hace cuando se inicia un ejecutable. Se realiza cuando el ejecutable intenta hacer algo.

El sistema operativo será comprobar los permisos del sistema de archivos y capacidades (estos no están cubiertos por los permisos del sistema de archivos, e incluyen reducir el nivel agradable, haznodo, un poco de materia red de bajo nivel, matar a otros procesos de arrancar, de tiempo determinados, etc.). Si no tiene los permisos, entonces no puede hacerlo. Raíz tiene un conjunto completo de capacidades, incluyendo CAP_DAC_OVERRIDE (ignorar permisos de ficheros).

2 A veces, no se le negará permiso para ejecutar un programa, pero el programa podrá hacer más cosas si se ejecuta con sudo. Por ejemplo, cuando se ejecuta en algunos du directorio del sistema, solamente con sudo será capaz de acceder a algún directorio. ¿Por qué el sistema operativo no niega el permiso de funcionamiento de un programa de este tipo, o usar notificar se prefiere más privilegio, antes de que el programa puede funcionar?

El sistema operativo no puede saber lo que hará el programa. Por lo que corresponde al programa para comprobar los permisos antes de que comience, y decidir qué hacer. No tiene que hacer esto, sin embargo.

Nota: en android hay un manifiesto, en este la aplicación declara qué privilegios se puede utilizar. El sistema operativo matará cualquier aplicación que intenta utilizar un privilegio que no declara, y el sistema operativo no siempre garantiza que un privilegio puede ser honrado. por ejemplo, el acceso a la red puede no estar disponible.

2 ¿Es cierto que cada vez que las obras de sudo, su trabajo también, y cada vez que trabaja su, sudo también el trabajo? o con su, un usuario puede hacer más que con sudo? ¿Cómo funciona el sistema operativo decidir cuándo obras sudo, y cuando se necesita Do?

sudoy suhacer más o menos samething. Algunas diferencias son el manejo de las variables de entorno y otras evitaciones de problemas de seguridad. Sin embargo, son las dos herramientas que le permiten convertirse en otro usuario, y ambos tienen un usuario por defecto de raíz.

su era la herramienta original, se requiere que introduzca la contraseña del usuario / grupo que se va a cambiar a.

sudoes más reciente y requiere, de manera predeterminada, que ingrese su propia contraseña, pero puede configurarse para aceptar la contraseña del usuario / grupo al que se está cambiando o no tiene contraseña. También permite mucha configuración, de qué comandos funcionará, para quién y cómo se autenticará con este programa para este usuario en esta máquina. También es sudoeditparte de esto sudoy se puede usar para permitir la edición como un usuario diferente y evitar el problema de seguridad de sub-bombardeo de un editor (llamando a exec desde el editor para ejecutar un proceso arbitrario con privilegios escalados).

ctrl-alt-delor
fuente