Windows에서 앱의 UAC 요청을 거부하면 왜 계속 실행하지 않아야합니까?


17

Linux / Unix 배경에서 나온 UAC가 Windows에서 작동하는 방식을 이해할 수 없습니다.

UAC가 다음과 같이 작동한다고 들었습니다 sudo. 내 Linux 응용 프로그램은 전화하기 전에 다른 작업을 수행 할 수 있습니다 sudo.

그러나 Windows에서는 실제 작업을 수행하기 전에 UAC 확인이 필요한 모든 응용 프로그램에 UAC가 부여되어 있어야합니다! 응용 프로그램을 실행하면 UAC 확인을 요청하고 거부합니다. 응용 프로그램이 단순히 실행되지 않습니다.

UAC는 이렇게 작동합니까?

sudo su
./run_app

오히려 :

./do_work1
sudo su
./du_work2

모두 좋은 답변 주셔서 감사합니다!

답변:


12

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

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

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


4
실제로는 sudo와 동일합니다. "sudo su"를 실행하면 현재 쉘에 루트 권한이 추가되지 않고 별도의 프로세스에서 쉘 이 시작됩니다 . 해당 쉘을 종료하면 첫 번째 쉘로 돌아갑니다.
Wyzard

1
Windows와 Unix의 차이점은 Unix 프로그래머가 하위 프로세스에서 작업을 수행하는 데 사용되므로 권한이 필요한 작업의 특정 부분에 대해보다 권한있는 하위 프로세스를 시작하는 것이 당연하다는 것입니다. Windows에서는 단일 프로세스에서 모든 작업을 수행하는 것이 더 일반적이며 작업을 별개의 권한있는 권한이 있고 권한이없는 부분 (별도의 프로세스에서 실행)으로 분리하는 것은 어려운 작업과 너무 비슷해 보입니다. (물론, 대부분의 경우 직무 중간에 필요한 권한을 가지고 있지 않다는 것을 아는 것이 좋습니다!)
Harry Johnston


4

그것들은 다르고 평범하며 단순하기 때문입니다. 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

나는 리눅스 아키텍처를 완전히 모른다. 그래서 실수하면 용서하지만, 내 이해는 리눅스와 Windows 가이 점에서 전혀 다르지 않다는 것입니다 ...

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

Linux에서 응용 프로그램은 단순히 실행하고 작업을 수행하려고 시도했습니다. 해당 작업을 수행 할 권한이없는 경우 해당 작업은 실패하지만 계속 진행됩니다. 위의 예에서-일반 사용자로 Linux에서 복사 스크립트를 실행할 때 일반 파일을 복사하고 권한 문제를 제공하고 두 번째 파일을 복사합니다. sudo로 실행하면 세 개의 사본이 모두 수행됩니다.

Windows는 이와 관련하여 정확히 동일합니다. 관리자가 아닌 사용자로 스크립트를 실행하면 하나만 복사하고, 두 번째는 권한 문제를, 다음을 복사합니다. UAC를 사용하면 세 가지가 모두 실행됩니다.

차이점은 많은 Windows 응용 프로그램은 기본적으로 UAC 권한 상승을 요구하고 구성 요소가 없으면 종료 / 실패하도록 구성 설정을 갖습니다.


1
너무 확실하지 난 ... 희망이 도움이 당신이 요구하는 것을 100 % 확실하지 않다, 그러나 - ... 그리고, 나는 내 대답과 질문을 다시 읽고 '라고해야 : /
윌리엄 Hilsum
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.