Al tener experiencia en Linux/Unix, no puedo entender cómo funciona UAC en Windows.
Escuché que UAC funciona así sudo
. Mi aplicación Linux puede hacer algún otro trabajo antes de llamar sudo
.
Pero en Windows, parece que todas las aplicaciones que requieren confirmación de UAC deben tener UAC otorgado antes de realizar cualquier trabajo real. Ejecuto una aplicación, me pide confirmación de UAC y la rechazo; la aplicación simplemente no se ejecuta.
Entonces, ¿la UAC funciona así?
sudo su
./run_app
En vez de:
./do_work1
sudo su
./du_work2
¡Gracias por la gran respuesta de todos!
Respuesta1
Al iniciar sesión en Windows como usuario estándar, se crea una sesión de inicio de sesión y se asigna un token que contiene solo los privilegios más básicos. De esta manera, la nueva sesión de inicio de sesión es incapaz de realizar cambios que afectarían a todo el sistema. Al iniciar sesión como usuario en el grupo Administradores, se asignan dos tokens separados. El primer token contiene todos los privilegios que normalmente se otorgan a un administrador, y el segundo es un token restringido similar al que recibiría un usuario estándar. Luego, las aplicaciones de usuario, incluido el Shell de Windows, se inician con el token restringido, lo que da como resultado un entorno de privilegios reducidos incluso con una cuenta de administrador. Cuando una aplicación solicita privilegios más altos o se hace clic en "Ejecutar como administrador", UAC solicitará confirmación y, si se otorga el consentimiento, iniciará el proceso utilizando el token sin restricciones.
Por lo que tengo entendido, lo que significa la última oración es que el cuadro de diálogo UAC se muestra antes de que se cargue la aplicación para que se inicie con el token sin restricciones, o si se inicia con privilegios de usuario estándar y necesita privilegios elevados en el medio para algunos funciona, necesita obtener el consentimiento del usuario y luegogenerar un nuevo proceso que luego se ejecuta con derechos elevados. El token asignado cuando se inicia un proceso es lo que determina sus derechos. Este token no se puede cambiar más adelante, por lo que si se requieren más derechos, se debe generar un nuevo proceso.
De esta manera, UAC no es exactamente lo mismo quesudo.
Respuesta2
En Windows, el mensaje de UAC se activa cuando intenta ejecutar un ejecutable que estámarcado como que requiere elevación en un manifiestoincrustado en el archivo y aún no estás ejecutando elevado. El comportamiento se parece más a setuid que a su en el sentido de que es el archivo, no el comando, el que le dice al sistema operativo que el ejecutable debe ejecutarse con credenciales diferentes.
Respuesta3
Es porque son diferentes, simple y llanamente. UACpodríaSe han implementado como sudo
, pero no fue así.
Puedes considerarlo como una analogía con la protección de la red.
sudo
Es como cuando un programa solicita acceso a la red y tu firewall te pide que se lo concedas o no. Puede decir que sí y el programa abrirá el socket, o puede decir que no y se quejará de la falta de conexión y hará todo lo que pueda sin acceso a la red (algunos programas mal diseñados realmente fallan). Por ejemplo:
function1();
input();
function2();
secure_operation(); //requests access
function3(); //may depend on results of previous operation; error-checking important
UAC se parece más a la advertencia que recibe al intentar abrir un archivo que se descargó en un volumen NTFS. Windows le advierte sobre posibles daños y le pregunta si desea ejecutarlo (en absoluto) o no. Es una operación de todo o nada; no puedes elegir confiar sólo en una parte del programa y no en otros. Por ejemplo:
if (requires_high_priv(program)) {
if (request_priv(program))
program();
}
else {
program();
}
Debe recordar que, a diferencia de Linux, que está más orientado a usuarios y aplicaciones avanzados, Windows está diseñado para ser fácil de usar para la mayor variedad de usuarios posible, por lo que simplificar la seguridad es primordial. Además, debido a su gran superficie de exposición, es un objetivo frecuente para el malware, por lo que tiene más sentido confiar completamente en un programa o no confiar en absoluto.
Respuesta4
No conozco a fondo la arquitectura de Linux, así que perdónenme si cometo un error, pero tengo entendido que Linux y Windows no son tan diferentes en absoluto en este sentido...
Un ejemplo... Un script de copia que hace una copia de un archivo normal a una ubicación no protegida y un archivo que intenta copiar a una ubicación protegida, luego una copia normal nuevamente.
Tengo entendido que en Linux, una aplicación simplemente se ejecuta e intenta realizar una acción; si no tiene permiso para realizar esa acción, fallará en esa acción, pero continuará. En el ejemplo anterior, cuando ejecuta el script de copia en Linux como usuario normal, copiará el archivo normal, otorgará un permiso y copiará el segundo archivo; si se ejecuta con sudo, hará las tres copias.
Windows es exactamente igual a este respecto: ejecutar el script como usuario no administrativo simplemente copiará uno, otorgará permiso al segundo y copiará el siguiente. Con UAC, ejecutará los tres.
La diferencia es que muchas aplicaciones de Windows simplemente tienen una configuración establecida para que soliciten la elevación de UAC de forma predeterminada y cierren/fallen si no la tienen... pero eso es cada vez menos.