Windows에서 앱의 UAC 요청을 거부하면 앱이 계속 실행되지 않아야 하는 이유는 무엇입니까?

Windows에서 앱의 UAC 요청을 거부하면 앱이 계속 실행되지 않아야 하는 이유는 무엇입니까?

Linux/Unix 환경에서 왔기 때문에 Windows에서 UAC가 어떻게 작동하는지 이해할 수 없습니다.

UAC가 sudo. 내 Linux 애플리케이션은 sudo.

그러나 Windows에서는 UAC 확인이 필요한 모든 응용 프로그램에 실제 작업을 수행하기 전에 UAC가 부여되어야 하는 것으로 보입니다. 애플리케이션을 실행했는데 UAC 확인을 요청하는데 거부했습니다. 애플리케이션이 실행되지 않습니다.

UAC는 이렇게 작동하나요?

sudo su
./run_app

대신:

./do_work1
sudo su
./du_work2

모두의 훌륭한 답변에 감사드립니다!

답변1

표준 사용자로 Windows에 로그인하면 로그온 세션이 생성되고 가장 기본적인 권한만 포함된 토큰이 할당됩니다. 이러한 방식으로 새 로그온 세션은 전체 시스템에 영향을 미치는 변경을 수행할 수 없습니다. 관리자 그룹의 사용자로 로그인하면 두 개의 별도 토큰이 할당됩니다. 첫 번째 토큰에는 일반적으로 관리자에게 부여되는 모든 권한이 포함되어 있으며 두 번째 토큰은 표준 사용자가 받는 것과 유사한 제한된 토큰입니다. 그런 다음 Windows Shell을 포함한 사용자 응용 프로그램이 제한된 토큰으로 시작되어 관리자 계정에서도 권한이 감소되는 환경이 됩니다. 응용 프로그램이 더 높은 권한을 요청하거나 "관리자 권한으로 실행"을 클릭하면 UAC에서 확인 메시지를 표시하고 동의한 경우 무제한 토큰을 사용하여 프로세스를 시작합니다.

내가 이해한 바에 따르면 마지막 문장의 의미는 앱이 로드되기 전에 UAC 대화 상자가 표시되어 무제한 토큰으로 시작되거나 표준 사용자 권한으로 시작되고 그 사이에 일부에 대해 높은 권한이 필요한 경우라는 것입니다. 작동하려면 사용자의 동의를 얻은 다음높은 권한으로 실행되는 새 프로세스를 생성합니다.. 프로세스가 시작될 때 할당된 토큰은 프로세스의 권한을 결정합니다. 이 토큰은 나중에 변경할 수 없으므로 더 많은 권한이 필요한 경우 새 프로세스를 생성해야 합니다.

이러한 방식으로 UAC는 UAC와 정확히 동일하지 않습니다.sudo.

답변2

Windows에서는 다음과 같은 실행 파일을 실행하려고 하면 UAC 프롬프트가 트리거됩니다.매니페스트에서 권한 상승이 필요한 것으로 표시됨파일에 포함되어 있고 아직 승격된 상태로 실행되고 있지 않습니다. 이 동작은 실행 파일이 다른 자격 증명으로 실행되어야 함을 OS에 알리는 명령이 아니라 파일이라는 점에서 su보다 setuid와 유사합니다.

답변3

그것은 그들이 다르기 때문에 평범하고 단순합니다. UAC~할 수 있었다처럼 구현되었지만 sudo그렇지 않았습니다.

이는 네트워크 보호와 유사하다고 생각할 수 있습니다.

sudo이는 프로그램이 네트워크 액세스를 요청하고 방화벽이 이를 허용할지 여부를 묻는 메시지를 표시하는 것과 같습니다. 예라고 말하면 프로그램이 소켓을 열거나, 아니오라고 말하면 연결 부족에 대해 불평하고 네트워크 액세스 없이 할 수 있는 모든 작업을 수행합니다(잘못 설계된 일부 프로그램은 실제로 충돌합니다). 예를 들어:

function1();
input();
function2();
secure_operation(); //requests access
function3();        //may depend on results of previous operation; error-checking important

UAC는 NTFS 볼륨에 다운로드된 파일을 열려고 할 때 나타나는 경고와 더 유사합니다. Windows는 잠재적인 문제에 대해 경고하고 해당 프로그램을 실행할지 여부를 묻습니다. 그것은 전부 아니면 전무한 작업입니다. 프로그램의 일부만 신뢰하고 다른 프로그램은 신뢰하지 않을 수는 없습니다. 예를 들어:

if (requires_high_priv(program)) {
  if (request_priv(program))
    program();
}
else {
  program();
}

고급 사용자 및 응용 프로그램에 더 맞춰져 있는 Linux와 달리 Windows는 최대한 다양한 사용자에게 사용자 친화적으로 설계되었으므로 보안을 단순화하는 것이 무엇보다 중요하다는 점을 기억해야 합니다. 게다가 노출 표면이 크기 때문에 맬웨어의 빈번한 대상이 되므로 프로그램을 완전히 신뢰하거나 전혀 신뢰하지 않는 것이 더 합리적입니다.

답변4

저는 리눅스 아키텍처를 잘 알지 못하기 때문에 실수하더라도 양해해 주시기 바랍니다. 하지만 이 점에서는 Linux와 Windows가 전혀 다르지 않다는 것을 이해하고 있습니다...

예... 일반 파일을 보호되지 않은 위치에 복사하고 파일을 보호된 위치에 복사하려고 시도한 다음 다시 일반 복사를 수행하는 복사 스크립트입니다.

내가 이해하는 바는 Linux에서는 애플리케이션이 단순히 실행되어 작업을 수행하려고 시도했다는 것입니다. 해당 작업을 수행할 권한이 없으면 해당 작업은 실패하지만 계속됩니다. 위의 예에서 - Linux에서 일반 사용자로 복사 스크립트를 실행하면 일반 파일이 복사되고 권한 문제가 발생하며 두 번째 파일이 복사됩니다. sudo로 실행하면 세 개의 복사본이 모두 수행됩니다.

이 점에서 Windows는 정확히 동일합니다. 관리자가 아닌 사용자로 스크립트를 실행하면 단순히 하나를 복사하고 두 번째 권한을 발급하고 다음을 복사합니다. UAC를 사용하면 세 가지가 모두 실행됩니다.

차이점은 많은 Windows 응용 프로그램에는 기본적으로 UAC 권한 상승을 요청하고 UAC가 없으면 종료/실패하도록 구성 세트가 있다는 것입니다.... 그러나 그 수가 훨씬 줄어들고 있습니다.

관련 정보