- 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? - 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 ejecutadu
en algún directorio del sistema, solo consudo
é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? - ¿Es cierto que siempre que
sudo
funcione,su
también funcionará, y cuandosu
funcione,sudo
también funcionará? o consu
, un usuario puede hacer más que consudo
? ¿Cómo decide el sistema operativo cuándosudo
funciona y cuándosu
se necesita?
permissions
sudo
StackExchange para todos
fuente
fuente
Respuestas:
sudo
usted, lo está ejecutando con el nombre de otro usuario. Si ese usuario es "capaz de hacer más cosas" que su usuario y lasudo
configuración le permite hacer estas cosas en nombre del otro usuario, entonces sí,sudo
le permitirá hacer más cosas. Sin embargo, esto no es necesario. Si acaba de virarsudo
al comienzo de la línea de comando, en realidad estásudo
entrandoroot
, por lo que generalmente puede hacer más cosas que un simple mortal.sudo
, debe proporcionar su propia contraseña de usuario y luego puede hacer algunas cosas en nombre del usuario objetivo. Para usarlosu
, 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
fuente
chmod
siempre que sea el propietario del archivo oroot
.chmod 400 hello && /lib64/ld-linux-x86-64.so.2 ./hello
produce un bonito "¡Hola, mundo!" salida.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/bin
para instalar un nuevo comando), el sistema operativo impide el acceso al archivo. La acción a tomar en esta condición depende del programa;make
deja de ejecutarse perodu
continuará con el siguiente archivo / directorio después de imprimir un mensaje.Los comandos
su
ysudo
son 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.fuente
su
ysudo
son programas privilegiados.su
cambia (después de una autenticación exitosa) la identificación real y efectiva del usuario y del grupo a la del usuario al que sesu
dirige. Por lo tanto,su
es similar alogin
. Tenga en cuenta quesu
se puede usar para cambiar a cualquier usuario, no solo root.sudo
también cambia los identificadores de usuario y grupo reales y efectivos. Hasta este puntosu
ysudo
son 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 desu
puede restringirse mediante la configuraciónSU_WHEEL_ONLY
de/etc/login.defs
. Si está configurado, solo los usuarios del grupowheel
pueden usarlosu
; de lo contrario, no está restringido. Aparte de eso,su
es todo o nada.sudo
es completamente diferente con respecto a eso. Consudo
usted puede definir políticas bastante complejas/etc/sudoers
sobre lo que el sudoer (el usuario que llamasudo
) 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
sudo
es 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, sesudo
ha 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.fuente
tl; dr El acceso lo determina el usuario que ejecuta la aplicación y
sudo
ejecuta las aplicaciones como un usuario diferente.Versión completa:
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:
Si el usuario tiene acceso de escritura a un directorio en particular, puede
make install
ingresar a ese directorio. De lo contrario, pueden haberloroot
hecho mediante el usosudo
.Si no puede acceder a los archivos en un directorio,
du
ejecutarlo tampoco puede acceder a él.root
puede acceder a prácticamente todos los archivos, por lo quesudo du
(du
ejecutar en nombre deroot
) también puede acceder a ellos.Si y no. Sí, si el programa se ejecuta realmente , debería comportarse igual bajo ambos
sudo
ysu
. Sin embargo,sudo
proporciona permite un control más detallado de quién puede ejecutar qué mediante un conjunto de reglas almacenadas en el/etc/sudoers
archivo.su
es 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.
fuente
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?
sudo
ysu
hacer 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.sudo
es 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 essudoedit
parte de estosudo
y 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).fuente