Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 3개 있습니다.)
(시리즈 글이 2개 있습니다.)
Windows: 159. 네트워크 공유 폴더(net use)에 대한 인증 정보는 언제까지 유효할까요?
; https://www.sysnet.pe.kr/2/0/11866

Windows: 252. 권한 상승 전/후 따로 관리되는 공유 네트워크 드라이브 정보
; https://www.sysnet.pe.kr/2/0/13411




네트워크 공유 폴더(net use)에 대한 인증 정보는 언제까지 유효할까요?

일단, 인증 정보는 네트워크 공유 폴더 연결 시 "Remember my credentials" 옵션을 체크하는 경우 윈도우에 저장됩니다.

net_use_cred_0.png

따라서 컴퓨터가 재부팅 후에도 인증 정보를 유지하고 싶다면 저 옵션을 사용하거나, 또는 "Control Panel\All Control Panel Items\Credential Manager"을 이용해 "Widnows Credentials"로 인증 정보를 직접 관리할 수 있습니다.

net_use_cred_1.png

참고로 명령행에서도 "rundll32.exe keymgr.dll, KRShowKeyMgr"를 수행하면 "Credential Manager"에 저장된 "Windows Credentials" 목록만을 편집하는 것이 가능하고, 순수 콘솔 명령어로 "cmdkey.exe"를 이용해 "/list", "/add", "/delete" 등의 명령어로도 관리할 수 있습니다.




그렇다면, "Windows Credentials"에 저장하지 않은 네트워크 드라이브로 연결하는 경우라면 어떻게 될까요?

명령행 창을 열어 다음과 같이 (예를 들어 192.168.100.25로) 네크워크 드라이브를 연결하면,

C:\Temp> net use \\192.168.100.25\c$ /USER:"testad\testuser"
Enter the password for 'testad\testuser' to connect to '192.168.100.25':
The command completed successfully.

보는 바와 같이 최초 접근 시에는 인증 정보를 요구하게 됩니다. 일단, 이렇게 한번 연결되면 다른 명령행 창(또는, 다른 EXE)에서도 해당 네트워크 드라이브로 재인증 없이 연결할 수 있습니다.

C:\Temp> net use \\192.168.100.25\c$ /USER:"testad\testuser"
Local name
Remote name       \\192.168.100.25\c$
Resource type     Disk
Status            OK
# Opens           0
# Connections     1
The command completed successfully.

인증 정보가 내부에 캐시되므로 컴퓨터를 재부팅하기 전까지는 유효한데 이때의 캐시 연결 정보를 PowerShell의 "Get-SmbConnection"으로 볼 수 있습니다.

PS C:\Temp> get-smbconnection

ServerName   ShareName UserName         Credential              Dialect NumOpens
----------   --------- --------         ----------              ------- --------
192.168.100.25 c$      thispc\testuser  testad\testuser 2.0.2   4

또한 대상 컴퓨터 측에서는 "Computer Management"의 "Shared Folders" / "Sessions"를 통해 네트워크 드라이브로 연결된 세션을 확인할 수 있습니다.

net_use_cred_2.png

만약, 대상 컴퓨터 측에서 위의 연결 항목을 선택하고 우 클릭 메뉴를 통해 "Close Session"을 하면 클라이언트 측에서도 연결이 끊기게 됩니다.

C:\Temp> net use \\192.168.100.25\c$ /USER:"testad\testuser"
Local name
Remote name       \\192.168.100.25\c$
Resource type     Disk
Status            Disconnected
# Opens           0
# Connections     1
The command completed successfully.

하지만, 연결이 끊긴 것일 뿐 인증 정보 캐시는 여전히 유효하므로 다시 "net use ..." 명령어를 수행하면 인증 정보 없이 잘 연결됩니다. 만약, 캐시된 인증 정보를 삭제하고 싶다면 "/delete" 옵션을 사용할 수 있습니다.

C:\Temp> net use /delete \\192.168.100.25\c$
\\192.168.100.25\c$ was deleted successfully.

문제는, 저렇게 인증 정보를 없앴어도 약 10초 내에 다시 "net use ..."로 연결하면 인증 없이 정상적으로 연결된다는 것입니다. 실제로 "net use /delete" 수행 후 10초 정도까지는 Get-SmbConnection 명령으로 192.168.100.25에 대한 연결이 살아있는 것을 확인할 수 있습니다. 물론, 10초 정도 후에 Get-SmbConnection 명령으로 확인이 안 되는 시점부터는 "net use ..."로 연결 시도를 하면 그때부터는 인증 정보를 묻게 됩니다.




한 가지 재미있는 점이라면, "net use"로 연결한 정보의 캐시가 같은 로그인 환경에서도 "관리자" 권한의 문맥과, "일반 사용자" 권한의 문맥이 따로 적용된다는 것입니다.

일례로, cmd.exe 창을 일반 사용자 권한으로 열고 net use \\192.168.100.25\c$ /USER:"testad\testuser"로 연결해 인증을 했다면, 이후 "관리자" 권한으로 cmd.exe 창을 띄워 다시 "net use \\192.168.100.25\c$ /USER:"testad\testuser"로 연결하면 비밀번호 인증을 다시 해야 합니다.

인증 정보의 캐시 삭제도 마찬가지입니다. "관리자 권한"의 창에서 "net use /delete \\192.168.100.25\c$"를 했다면 이것은 관리자 권한의 문맥에만 유효하므로 여전히 "일반 사용자" 권한의 cmd.exe에서는 "net use \\192.168.100.25\c$ /USER:"testad\testuser"로 연결할 때 인증을 묻지 않습니다. 따라서 이런 경우에는 2개의 문맥에서 모두 "net use /delete ..."를 수행해야 깨끗하게 인증 정보가 삭제됩니다.




그건 그렇고 왜 10초 내에는 인증 정보를 다시 묻지 않는 걸까요? 다시 말해 Get-SmbConnection으로 캐시 정보가 없어지는 것이 왜 10초일까요?

이것은, 네트워크 연결에 사용하는 TCP 연결이 net use를 사용한 cmd.exe(또는 사용자의 exe)에 속한 소켓으로 관리 되지 않기 때문입니다. 확인을 위해 netstat를 이용하면,

# IPv6를 이용한 445 연결인 경우에는 findstr의 IP 문자열을 IPv6 주소로 바꿔야 함

C:\temp> netstat -ano | findstr 192.168.100.25
  TCP    192.168.100.25:38058  192.168.100.25:445  ESTABLISHED     4

해당 소켓 연결을 유지하고 있는 프로세스의 ID가 4번임을 알 수 있고 이것은 작업 관리자에서 "SYSTEM"으로 보이는 프로세스입니다. 그러고 보니, 이와 비슷하게 SYSTEM이 관리하는 TCP 소켓을 예전에도 소개한 적이 있습니다.

OWIN 웹 서버(EXE)를 IIS에서 호스팅하는 방법 - HttpPlatformHandler (Reverse Proxy)
; https://www.sysnet.pe.kr/2/0/11435

IIS의 80 포트를 공유하는 응용 프로그램 만드는 방법
; https://www.sysnet.pe.kr/2/0/1555

SYSTEM 프로세스는 net use 인증 정보가 "net use /delete ..."로 삭제되면 (잠시 후에 설명할 "# Open Files"가 없는 경우) 10초 정도의 시간이 지난 후에 TCP 소켓을 정리합니다. 즉, 그 시간 동안 다시 "net use ..."로 연결을 시도하면 아직 닫히지 않은 TCP 소켓을 연장해 사용하기 때문에 재인증을 묻지 않는 것입니다.




인증 정보에 대한 캐시 문제가 "윈도우 탐색기"와 엮이게 되면 문제가 더욱 복잡해집니다. 명령행과는 달리, 윈도우 탐색기는 공유 폴더를 이동하는 동안 다수의 파일을 열게 됩니다. 대상 컴퓨터의 "Computer Management" MMC에서 "Shared Folder" / "Sessions"의 연결 목록에 보면 "# Open Files"에서 그 상황을 확인할 수 있습니다.

그렇다면 클라이언트 측에서 탐색기를 이용해 "\\192.168.100.25\c$"으로 연결한 후, cmd.exe 창에서 "net use /delete ..."로 인증 정보를 삭제하면 어떻게 될까요? 이런 경우 상황에 따라 다릅니다. 탐색기가 공유 폴더 연결 후 폴더의 내용을 보여주면서 몇몇 특수 파일을 열게 되는데 이로 인해 "# Open Files"가 늘어나게 됩니다.

문제는, "# Open Files"가 정리되지 않으면 SYSTEM 프로세스는 TCP 445번 소켓을 절대 닫지 않는다는 것입니다. 즉 "net use /delete ..."가 되었음에도 SMB 연결 소켓은 여전히 열려 있으므로 해당 탐색기가 살아 있는 한 이후의 어떤 프로세스에서도 "net use ..."를 이용해 네트워크 드라이브를 연결하는 경우 인증 정보를 묻지 않게 되는 것입니다.

따라서, 탐색기로 공유 폴더를 연결했다면 "net use /delete ..."와 함께 반드시 그 탐색기를 닫아줘야 합니다. (그리곤 10초 정도 기다려야 합니다.) 물론 탐색기가 열고 있는 파일이 닫혔다면 탐색기를 종료하지 않아도 되긴 하는데 그런 경우가 많지 않습니다.




마지막으로, 네트워크 공유 폴더를 재연결 시 인증 정보를 다시 묻지 않는 것은 SYSTEM 프로세스에서 관리하는 TCP 소켓을 공유하기 때문만은 아닙니다. 일례로, cmd.exe에서 "net use ..."로 연결 후 해당 exe 창을 닫고 대상 PC 측에서는 "Computer Management" MMC를 이용해 세션을 닫아버리면 SYSTEM 프로세스가 보유한 소켓이 얼마 후 삭제가 됩니다.

하지만 그 상태에서 다시 "net use ..."를 사용하거나 윈도우 탐색기로 공유 폴더를 접근하면 인증 정보 없이 들어가게 됩니다. 따라서, 반드시 "net use /delete ..."로 삭제하거나 재부팅을 해서 캐시된 인증 정보를 없애야만 인증을 다시 거칠 수 있습니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 9/11/2023]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 151  152  153  154  155  156  157  [158]  159  160  161  162  163  164  165  ...
NoWriterDateCnt.TitleFile(s)
1100정성태8/17/201128857.NET Framework: 236. SqlDbType - DateTime, DateTime2, DateTimeOffset의 차이점파일 다운로드1
1099정성태8/15/201128304오류 유형: 132. 어느 순간 갑자기 접속이 안 되는 TFS 서버
1098정성태8/15/201150353웹: 24. 네이버는 어떻게 로그인 처리를 할까요? [2]
1097정성태8/15/201121647.NET Framework: 235. 메서드의 메타 데이터 토큰 값으로 클래스를 찾아내는 방법
1096정성태8/15/201125783디버깅 기술: 42. Watson Bucket 정보를 이용한 CLR 응용 프로그램 예외 분석 - (2)
1095정성태8/14/201126184디버깅 기술: 41. Windbg - 비정상 종료된 닷넷 프로그램의 StackTrace에서 보이는 offset 값 의미
1094정성태8/14/201130611오류 유형: 131. Fiddler가 강제 종료된 경우, 웹 사이트 방문이 안되는 현상
1093정성태7/27/201124212오류 유형: 130. Unable to connect to the Microsoft Visual Studio Remote Debugging Monitor ... Access is denied.
1092정성태7/22/201126634Team Foundation Server: 46. 코드 이외의 파일에 대해 소스 제어에서 제외시키는 방법
1091정성태7/21/201125666개발 환경 구성: 128. WP7 Emulator 실행 시 audiodg.exe의 CPU 소모율 증가 [2]
1089정성태7/18/201131247.NET Framework: 234. 왜? Button 컨트롤에는 MouseDown/MouseUp 이벤트가 발생하지 않을까요?파일 다운로드1
1088정성태7/16/201124273.NET Framework: 233. Entity Framework 4.1 - 윈도우 폰 7에서의 CodeFirst 순환 참조 문제파일 다운로드1
1087정성태7/15/201127014.NET Framework: 232. Entity Framework 4.1 - CodeFirst 개체의 직렬화 시 순환 참조 해결하는 방법 - 두 번째 이야기파일 다운로드1
1086정성태7/14/201128415.NET Framework: 231. Entity Framework 4.1 - CodeFirst 개체의 직렬화 시 순환 참조 해결하는 방법 [1]파일 다운로드1
1085정성태7/14/201128891.NET Framework: 230. Entity Framework 4.1 - Code First + WCF 서비스 시 EndpointNotFoundException 오류 - 두 번째 이야기파일 다운로드1
1084정성태7/11/201134170.NET Framework: 229. SQL 서버 - DB 테이블의 데이터 변경에 대한 알림 처리 [4]파일 다운로드1
1083정성태7/11/201128217.NET Framework: 228. Entity Framework 4.1 - Code First + WCF 서비스 시 EndpointNotFoundException 오류
1082정성태7/10/201127774.NET Framework: 227. basicHttpBinding + 사용자 정의 인증 구현 [2]파일 다운로드1
1081정성태7/9/201127096VC++: 53. Windows 7에서 gcc.exe 실행 시 Access denied 오류 [2]
1080정성태7/8/201125602웹: 23. Sysnet 웹 사이트의 HTML5 변환 기록 - 두 번째 이야기파일 다운로드1
1079정성태7/6/201130020오류 유형: 129. Hyper-V + Realtek 랜카드가 설치된 시스템의 BSOD 현상 [2]
1078정성태7/5/201137503VC++: 52. Chromium 컴파일하는 방법 [2]
1077정성태6/24/201135135.NET Framework: 226. HttpWebRequest 타입의 HaveResponse 속성 이야기파일 다운로드1
1076정성태6/23/201129317오류 유형: 128. SQL Express - User Instance 옵션을 사용한 경우 발생하는 오류 메시지 유형 2가지
1075정성태6/21/201124896VS.NET IDE: 69. 윈폰 프로젝트에서 WCF 서비스 참조할 때 Reference.cs 파일이 비어있는 경우
1074정성태6/20/201125013.NET Framework: 225. 닷넷 네트워크 라이브러리의 트레이스 기능파일 다운로드1
... 151  152  153  154  155  156  157  [158]  159  160  161  162  163  164  165  ...