매핑된 네트워크 드라이브를 사용하다 보면 관리자 권한으로 실행한 프로그램(cmd, PowerShell 포함)에서 해당 드라이브가 표시되지 않는 현상을 겪게 됩니다. 기본 UAC(사용자 계정 컨트롤) 설정에서는 관리자 권한으로 실행되는 응용 프로그램이 net use로 연결된 매핑된 네트워크 드라이브에 접근하는 것을 허용하지 않기 때문입니다. 즉, 명령 프롬프트나 파일 관리자(Total Commander 등)를 관리자 권한으로 실행하면 마운트된 공유 폴더의 드라이브 문자가 표시되지 않습니다.
다음 조건이 모두 해당될 때 이 문제가 발생할 수 있습니다.
- 네트워크 드라이브가 사용자 세션에서 매핑된 경우(GPO 또는
net use로 수동 연결) - 컴퓨터에서 UAC가 활성화된 경우(GPO 정책 사용자 계정 컨트롤: 관리자 승인 모드에서 관리자에 대한 권한 상승 프롬프트 동작이 기본값인 자격 증명 프롬프트로 설정됨)
- 현재 사용자가 컴퓨터의 로컬 관리자 권한을 가지고 있으며, 프로그램을 관리자 권한으로 실행 모드로 시작하는 경우
이 경우 네트워크 드라이브는 Windows 파일 탐색기와 일반 응용 프로그램에서는 정상적으로 표시되지만, 관리자 권한으로 실행된 응용 프로그램에서는 나타나지 않습니다.
이 글에서는 Windows 10에서 관리자 권한으로 실행되는 프로그램이 매핑된 네트워크 드라이브에 접근할 수 있도록 설정하는 방법을 소개합니다. 이 문제는 그룹 정책으로 매핑된 네트워크 드라이브와 사용자가 직접 연결한 폴더 모두에서 발생합니다.
중요: 특정 프로그램을 위한 경우라도 UAC를 완전히 비활성화하는 것은 강력히 권장되지 않습니다.
매핑된 네트워크 드라이브가 표시되지 않는 현상 확인
UAC가 활성화된 상태에서 일반 모드로 연결한 매핑된 네트워크 드라이브에 관리자 권한 응용 프로그램에서 접근할 수 없는지 확인해 보겠습니다. 먼저 일반 사용자 권한으로 명령 프롬프트를 열고 매핑된 네트워크 드라이브 Z:\의 내용에 접근할 수 있는지 확인합니다.
Net use
Dir z:이 명령은 공유 네트워크 폴더의 내용을 정상적으로 표시해야 합니다.
그러나 같은 세션에서 명령 프롬프트를 관리자 권한으로 열고 동일한 드라이브에 접근하면 경로를 찾을 수 없다는 메시지가 표시됩니다.
The system cannot find the path specified.
관리자 권한으로 프로그램을 자주 실행하는 환경에서는 이러한 Windows 동작이 상당한 불편함을 초래할 수 있습니다. 관리자 권한 없이 프로그램을 실행하는 방법도 있지만, 항상 가능한 것은 아닙니다.
원인은 무엇일까요?
이 특성은 로컬 관리자 권한을 가진 사용자의 UAC 메커니즘과 관련이 있습니다. 해당 사용자가 로그온하면 두 개의 액세스 토큰이 생성됩니다. 첫 번째는 관리자 권한이 제거된 필터링된 액세스 토큰(filtered token)으로, 대부분의 응용 프로그램이 이 토큰으로 실행됩니다. 두 번째는 시스템의 모든 권한을 가진 관리자 토큰으로, UAC 승인을 통해 권한이 상승된 응용 프로그램이 이 컨텍스트에서 실행됩니다.
동일한 사용자의 일반 cmd.exe 세션과 관리자 권한 세션에서 각각 whoami /all 명령을 실행해 현재 권한을 비교해 보면 큰 차이를 확인할 수 있습니다.
| 항목 | 일반 사용자 세션 | 관리자 권한 세션 |
|---|---|---|
| 무결성 수준 | Mandatory Label\Medium Mandatory Level (S-1-16-8192) | Mandatory Label\High Mandatory Level (S-1-16-12288) |
| 권한 | SeLockMemoryPrivilege, SeMachineAccountPrivilege, SeShutdownPrivilege, SeChangeNotifyPrivilege, SeUndockPrivilege, SeIncreaseWorkingSetPrivilege, SeTimeZonePrivilege | 일반 세션의 권한에 더해 SeIncreaseQuotaPrivilege, SeSecurityPrivilege, SeTakeOwnershipPrivilege, SeLoadDriverPrivilege, SeSystemProfilePrivilege, SeSystemtimePrivilege, SeProfileSingleProcessPrivilege, SeIncreaseBasePriorityPrivilege, SeCreatePagefilePrivilege, SeBackupPrivilege, SeRestorePrivilege, SeSystemEnvironmentPrivilege, SeRemoteShutdownPrivilege, SeManageVolumePrivilege, SeImpersonatePrivilege, SeCreateGlobalPrivilege, SeCreateSymbolicLinkPrivilege, SeDelegateSessionUserImpersonatePrivilege |
UAC가 활성화되면 동일한 사용자의 응용 프로그램이 권한 있는 컨텍스트와 권한 없는 컨텍스트 두 가지로 실행될 수 있습니다. 공유 네트워크 폴더를 매핑하면 시스템은 드라이브 문자와 UNC 경로의 매핑을 저장하는 심볼릭 링크(DosDevices)를 생성합니다. 이 링크는 현재 프로세스의 액세스 토큰에 연결되어 있으므로 다른 토큰에서는 사용할 수 없습니다.
반대의 문제도 발생할 수 있습니다. 관리자 권한을 가진 사용자가 그룹 정책 로그온 스크립트, 예약된 작업 또는 SCCM 작업처럼 관리자 권한으로 실행되는 프로세스를 통해 네트워크 드라이브를 연결하면, 해당 드라이브는 파일 탐색기 같은 권한 없는 프로세스에서는 보이지 않습니다.
팁: 간단한 트릭으로 Windows 파일 탐색기를 관리자 권한으로 실행할 수도 있습니다.
임시 해결책으로, 관리자 권한 명령 프롬프트에서 net use 또는 rundll32 SHELL32.dll,SHHelpShortcuts_RunDLL Connect 명령을 사용해 네트워크 드라이브를 직접 마운트할 수 있습니다.
EnableLinkedConnections로 관리자 권한 응용 프로그램에서 매핑된 드라이브 활성화
더 간단한 해결책이 있습니다. 레지스트리를 다음과 같이 변경하면 됩니다.
- 레지스트리 편집기(regedit.exe)를 실행합니다.
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System 키로 이동합니다.
- EnableLinkedConnections라는 이름의 새 DWORD 값을 만들고 데이터를 1로 설정합니다.
- 컴퓨터를 다시 시작합니다. 또는
get-service LanmanWorkstation | Restart-Service -Force명령으로 LanmanWorkstation 서비스를 재시작한 후 Windows에서 로그오프 후 다시 로그온해도 됩니다.
팁: 위 변경은 명령 한 줄로도 수행할 수 있습니다.
reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v "EnableLinkedConnections" /t REG_DWORD /d 0x00000001 /fPowerShell을 사용하는 경우는 다음과 같습니다.
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System' -Name EnableLinkedConnections -Value 1 -PropertyType 'DWord'컴퓨터를 다시 시작한 후 관리자 권한으로 실행되는 프로그램에서 매핑된 네트워크 드라이브가 보이는지 확인합니다. 반대의 경우도 마찬가지로, 관리자 권한 모드에서 매핑된 모든 네트워크 드라이브는 일반 사용자 세션에서도 사용할 수 있습니다.
이 방법은 Windows Vista부터 Windows 10, Windows Server 2019까지 모든 버전에서 작동합니다.
참고: 아쉽게도 EnableLinkedConnections를 활성화하는 전용 GPO 설정은 존재하지 않습니다. 도메인 컴퓨터에 이 설정을 적용하려면 GPP(그룹 정책 기본 설정)를 통해 해당 레지스트리 값을 배포해야 합니다.
동작 원리
EnableLinkedConnections 레지스트리 값을 활성화하면 LanmanWorkstation과 LSA(lsass.exe)가 현재 사용자 세션에 연결된 두 번째 액세스 토큰이 있는지 확인합니다. 해당 토큰이 발견되면 매핑된 네트워크 드라이브 목록이 한 토큰에서 다른 토큰으로 복사됩니다. 그 결과 관리자 권한 모드에서 매핑된 네트워크 드라이브는 일반 모드에서도 보이며, 그 반대의 경우에도 동일하게 적용됩니다.
팁: 대안으로 대상 공유 네트워크 폴더에 대한 심볼릭 링크를 생성하는 방법도 있습니다.
mklink /D c:\docs \\dublin-fs1\docs이렇게 만든 링크는 일반 모드와 관리자 권한 모드 모두에서 접근할 수 있습니다. 다만 이 방법의 단점은 항상 현재 사용자 계정으로 공유 폴더에 접근한다는 점입니다. net use 명령처럼 다른 사용자 계정을 지정해 연결하는 것은 불가능합니다.
EnableLinkedConnections를 활성화하면 현재 사용자로 실행되는 예약된 작업(Scheduled Tasks)에서도 매핑된 드라이브를 사용할 수 있게 됩니다. 단, 작업이 LocalSystem 또는 다른 사용자 계정으로 실행되는 경우에는 현재 사용자의 매핑된 네트워크 드라이브에 접근할 수 없습니다.