Windows 사용자에게는 다양한 권한이 부여될 수 있습니다.특권
권한은 사용자 계정이 수행할 수 있는 시스템 작업 유형을 결정합니다. 관리자는 사용자 및 그룹 계정에 권한을 할당합니다. 각 사용자의 권한에는 해당 사용자와 해당 사용자가 속한 그룹에 부여된 권한이 포함됩니다.
현재 35개의 권한이 있습니다. 더 흥미로운 것 중 일부는 다음과 같습니다.
- SeSystemtimePrivilege: 시스템 시간을 수정하기 위해 필요합니다.
- SeTimeZone권한: 컴퓨터 내부 시계와 관련된 시간대를 조정하는 데 필요합니다.
- SeBackupPrivilege: 이 권한을 사용하면 시스템은 파일에 지정된 ACL(액세스 제어 목록)에 관계없이 모든 파일에 대한 모든 읽기 액세스 제어를 부여합니다.
- SeCreatePagefile권한: 페이징 파일을 만드는 데 필요합니다.
- SeRemoteShutdownPrivilege: 네트워크 요청을 사용하여 시스템을 종료하는 데 필요합니다.
- SeDebug권한: 다른 계정이 소유한 프로세스의 메모리를 디버그하고 조정하는 데 필요합니다.
하지만 제가 관심을 갖고 있는 것은 다음과 같습니다.
- SeShutdownPrivilege: 로컬 시스템을 종료하는 데 필요합니다.
나는 실제로 그렇지 않다는 것을 깨달았습니다.가지다이 특권. 관리자 권한 명령 프롬프트에서:
>whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
=============================== ========================================= ========
SeIncreaseQuotaPrivilege Adjust memory quotas for a process Disabled
SeSecurityPrivilege Manage auditing and security log Disabled
SeTakeOwnershipPrivilege Take ownership of files or other objects Disabled
...
SeShutdownPrivilege Shut down the system Disabled
...
사용시 확인되는 사항입니다프로세스 탐색기나로 실행되는 높은 프로세스의 보안 토큰을 검사하려면 다음을 수행하십시오.
하지만 나는~할 수 있다시스템을 종료합니다. 왜?
그룹 정책에 따르면 이 권한이 있어야 합니다.
secpol.msc
로컬 보안 정책 편집기 스냅인( ) 을 사용하면 ,~해야 한다다음과 같은 특권을 갖습니다:
그만큼설명특권:
시스템 종료
이 보안 설정은 컴퓨터에 로컬로 로그온한 사용자가 종료 명령을 사용하여 운영 체제를 종료할 수 있는지 결정합니다. 이 사용자 권한을 잘못 사용하면 서비스가 거부될 수 있습니다.
워크스테이션의 기본값: 관리자, 백업 운영자, 사용자.
서버의 기본값: 관리자, 백업 운영자.
도메인 컨트롤러의 기본값: 관리자, 백업 운영자, 서버 운영자, 인쇄 운영자.
나는사용자. 가끔 나는관리자, 그리고 다른 때에는 나는관리자 아님.
아마도 질문은 왜~하지 않다나는 특권을 가지고 있습니다.
하지만 현실은 나에게 그런 특권이 없다는 것이다. 하지만 로컬로 로그인하면 로컬 시스템을 종료할 수 있습니다.
왜?
@Mehrdad는 좋은 답변을 가지고 있었는데 삭제했습니다. 제 생각에는 이 답변이 주목할 가치가 있고 질문에 훌륭하고 간결하게 답변해 줄 것 같습니다.
너가지다특권. 기본적으로 비활성화되어 있습니다. 그때 특권이 없었다면전혀 나열되지 않을 것입니다.
알아채다부족하다 거나 하는 것과는SE_PRIVILEGE_REMOVED
다릅니다 .SE_PRIVILEGE_ENABLED
SE_PRIVILEGE_ENABLED_BY_DEFAULT
보너스 읽기
- MSDN:권한 상수
- 테크넷:시스템 종료 - 사용자 권한 할당
답변1
당신은 허가를 받았지만 그것은장애가 있는. 이것이 바로 PowerShell이 말하는 것입니다.
시스템을 종료하려면 Win32API 함수를 사용합니다.InitiateSystemShutdown
또는ExitWindowsEx
:
ExitWindowsEx(EWX_POWEROFF, 0);
이 기능은 다음을 참고합니다.
로컬 컴퓨터를 종료하려면 호출실SE_SHUTDOWN_NAME 권한이 있어야 합니다. 기본적으로,사용자는 SE_SHUTDOWN_NAME을 활성화할 수 있습니다.로그온한 컴퓨터에 대한 권한이 있으며 관리자는 원격 컴퓨터에서 SE_REMOTE_SHUTDOWN_NAME 권한을 활성화할 수 있습니다.
보시다시피 Windows에서는 다음을 확인합니다.실권한(모든 스레드에는 권한이 있는 토큰이 있음) ExitWindowsEx
없이 전화하시면SE_SHUTDOWN_NAME권한이 있으면 함수가 다음 오류와 함께 실패합니다.
Error code: 1314
A required privilege is not held by the client
기본적으로 귀하가 생성하는 스레드는 귀하의 권한을 상속합니다. 그러나 프로그램은 다음을 사용하여 부여된 비활성화된 권한을 활성화할 수 있습니다.AdjustTokenPrivileges
:
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = LookupPrivilegeValue(NULL, "SeShutdownPrivilege");
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
HANDLE processToken = OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES);
AdjustTokenPrivileges(processToken, FALSE, &tp, 0, NULL, NULL);
CloseHandle(processToken);
토큰의 권한 변경말한다:
AdjustTokenPrivileges
권한을 추가하거나 제거할 수 없습니다.토큰에서. 그것은 할 수 있다현재 비활성화된 기존 권한만 활성화합니다.또는 현재 활성화된 기존 권한을 비활성화합니다.
그렇다면 이 권한이 기본적으로 비활성화되어 있는 이유는 무엇입니까? 어떤 프로그램도 실수로 Windows를 종료할 수 없도록 합니다. 애플리케이션은 이를 명시적으로 요청해야 합니다.
오래되었지만 아주 좋은 책이 있습니다.https://www.amazon.com/Programming-Windows-Security-Keith-Brown/dp/0201604426/그 모든 것에 대해.
답변2
사용자가 해당 권한이 활성화된 그룹에 속해 있기 때문입니다.
어떤 그룹이 있는지 직접 확인하려면:
- 관리자 권한으로 PowerShell(또는 명령) 프롬프트를 엽니다.
- 달리다
secedit /export /areas USER_RIGHTS /cfg OUTFILE.CFG
. - 메모장 등에서 OutFile.cfg의 내용을 보고 해당
SeShutdownPrivilege
항목을 찾으십시오. 해당 권한이 활성화된 사용자 및/또는 그룹에 대해 몇 개의 SID가 표시되어야 합니다.
그래서 세 개의 짧은 SID가 나열되어 있습니다. 짧은 SID는 일반적으로 컴퓨터 수준 계정/그룹입니다. 예를 들어, 그 중 하나는 입니다 S-1-5-32-545
.
PowerShell을 사용하면 SID가 나타내는 계정/그룹을 확인할 수 있습니다.
$objSID = New-Object System.Security.Principal.SecurityIdentifier ("S-1-5-32-545")
$objUser = $objSID.Translate([System.Security.Principal.NTAccount])
$objUser.Value
이는 BUILTIN\Users
.
귀하는 해당 컴퓨터의 사용자이므로 자동으로 해당 그룹의 구성원이 됩니다. 즉, 컴퓨터를 종료할 수 있습니다.
내가 가지고 있는 다른 두 개는 S-1-5-32-544
, 및 입니다 S-1-5-32-551
. 이들은 표준 BUILTIN\Administrators
그룹과 BUILTIN\Backup Operators
그룹입니다. 대화 상자 에 표시되는 그룹과 일치하는 것은 무엇입니까 secpol.msc
?