Microsoft MVP성태의 닷넷 이야기
Team Foundation Server: 30. 소스 서버 보안 [링크 복사], [링크+제목 복사],
조회: 26178
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 1개 있습니다.)

TFS - 소스 서버 보안


이전에, ".NET Framework 소스 코드 디버깅" 방법에 대해서 설명해 드렸죠.

VS.NET SP1 + .NET Framework 소스 코드 디버깅
; https://www.sysnet.pe.kr/2/0/623

그리고, 닷넷 프레임워크 소스 코드 디버깅이 부러우신 분들에게 여러분의 응용 프로그램도 그와 같은 디버깅 기능을 제공할 수 있는 방법 또한 설명해 드렸습니다.

TFS Team Build + Symbol Server
; https://www.sysnet.pe.kr/2/0/599

TFS Team Build + Source Server = 소스 코드 디버깅
; https://www.sysnet.pe.kr/2/0/600

위의 글을 보고, 그때 당시 저희 회사 직원 한분이 질문을 하셨습니다. "보안은 가능한가? 중요한 프로그램의 소스 코드가 노출되는 것을 원하지 않는 사람들에게는!"

사실, 중간 언어를 사용하여 제작된 응용 프로그램에게 있어 소스 코드 보안이 얼마나 의미가 있을까 하는 생각이 들지만... ^^ 어쨌든 결론을 먼저 말씀드리면 기본적으로는 해당 소스 코드 접근을 아무나 할 수 없도록 제한하고 있습니다. TFS를 사용했으니, 적당한 권한이 있는 TFS 사용자 계정으로만 접근이 가능한 것이지요.

이를 확인하기 위해, 위에서 설명한 글대로 테스트를 해보면 TFS 계정으로 로그인 가능한 PC에서는 정상적으로 소스 코드를 가져와서 BP(Break Point) 등의 디버깅 작업이 가능하지만, 그 외의 상황에서 디버깅을 하면 다음과 같은 문자열이 출력창에 나오는 것을 확인할 수 있습니다.

SRCSRV:  tf.exe view /version:111 /noprompt "$/CustomSetup/MyApp/Window.xaml.cs" /server:http://mytfsserver:8080/ 
        /console >"C:\temp\MyApp\111\Window.xaml.cs"
         TF30063: You are not authorized to access mytfsserver.
SRCSRV:  Error text detected: "access"
SRCSRV:  MYSERVER is unavailable - bypassing
SRCSRV: 소스 서버가 'C:\Documents and Settings\[myaccount]\Local Settings\Apps\2.0\24NO1ZB0.HK6\QO42ZQRY.Z9A\deve..tion_028b1aabb69e8c8f_0001.0000_8d02b66fb01975e6\MyApp.exe' 모듈에서 'd:\TeamBuild\CustomSetup\MyApp\Window.xaml.cs' 파일에 대한 소스 코드를 가져올 수 없습니다. The specified network resource or device is no longer available.
SRCSRV:  MYSERVER is unavailable - bypassing
SRCSRV: 소스 서버가 'C:\Documents and Settings\[myaccount]\Local Settings\Apps\2.0\24NO1ZB0.HK6\QO42ZQRY.Z9A\deve..tion_028b1aabb69e8c8f_0001.0000_8d02b66fb01975e6\MyApp.exe' 모듈에서 'd:\TeamBuild\CustomSetup\MyApp\Window.xaml.cs' 파일에 대한 소스 코드를 가져올 수 없습니다. The specified network resource or device is no longer available.

위의 tf.exe가 어떻게 통신하는지 fiddler를 통해서 확인해 보면, 아래와 같은 POST 요청을 확인할 수 있습니다.

POST /VersionControl/v1.0/repository.asmx HTTP/1.1
User-Agent: Team Foundation (TF.exe, 9.0.30729.1)
X-TFS-Version: 1.0.0.0
X-TFS-Session: 577d0db7-a265-4252-ae2f-cb9660ea5844, CommandView
accept-language: ko-KR
Content-Type: application/soap+xml; charset=utf-8
Host: mytfsserver:8080
Content-Length: 592
Expect: 100-continue
Accept-Encoding: gzip
Connection: Keep-Alive

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                  xmlns="http://schemas.microsoft.com/TeamFoundation/2005/06/VersionControl/ClientServices/03"
                  xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
    <soap:Body>
        <QueryItems>
            <items>
                <ItemSpec item="$/CustomSetup/MyApp/Window.xaml.cs" />
            </items>
            <version xsi:type="ChangesetVersionSpec" cs="111" />
            <deletedState>NonDeleted</deletedState>
            <itemType>File</itemType>
            <generateDownloadUrls>true</generateDownloadUrls>
        </QueryItems>
    </soap:Body>
</soap:Envelope>

물론, 계정이 유효하지 않다면 위의 요청 이후에 발생하는 권한 협상 과정에서 실패하게 되어 소스 코드를 다운로드할 수 없지만, 성공한다면 다음과 같은 요청으로 이어져서 정상적으로 소스코드를 "압축된 상태"로 다운로드 받게 됩니다.

=== 소스 코드 요청 ===
GET /VersionControl/v1.0/item.asmx?type=rsa&amp;sfid=2008,0,0,0,0,0,0,0,0,0&amp;ts=633591724655273275&amp;s=LFZeHG1FLIelL3PxpBvYrOzncl1h8QC4tGkXyLOp2aK4gpntxaZvC5V6Ck2%2FhFhyGb6dEDOKhRRIIRXsqzil738362hazCsc3x2PFTig1b5tctUjTytj8DKstdDJAsTZoBtP%2FVf0dSy5c%2F2iB%2BTnCuyMU8cbaxSHSqThzbE2VNI%3D&amp;fid=2008 HTTP/1.1
User-Agent: Team Foundation (TF.exe, 9.0.30729.1)
X-TFS-Version: 1.0.0.0
X-TFS-Session: 577d0db7-a265-4252-ae2f-cb9660ea5844
accept-language: ko-KR
Host: mytfsserver:8080

=== 소스 코드 반환 ===
HTTP/1.1 200 OK
Date: Sun, 01 Feb 2009 11:54:25 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Content-Length: 1919
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
Content-Type: application/gzip

[...소스 코드의 압축된 내용...]




자, 그렇다면 문제는... 위와 같이 보안 오류가 발생하는 컴퓨터에서는 어떻게 해야 하느냐입니다.
그런데 ^^ 답은 이미 위에서 나온 거나 다름이 없지요. 바로 "http://.../repository.asmx" 통신에서 보안을 물어보지 않도록 하면 되는 것입니다. 즉, 웹 브라우저에서 "http://.../repository.asmx" 경로를 입력했을 때 보안창이 뜨지 않아야 합니다. 왜냐하면, Visual Studio IDE는 디버깅 중에 tf.exe를 실행하면서 devenv.exe 프로세스가 가진 계정 권한을 그대로 전달하기 때문입니다. (권한이 없는 경우, 물어보면 좋을 텐데. ^^)

그러니 해결 방법은 다음과 같이 2가지 방법이 있습니다.

  • 해당 컴퓨터에 TFS 로그인 계정과 동일한 ID/PW의 계정을 생성해서 로그인한다.
  • "control userpasswords2" 명령어를 이용해서 TFS 서버 (위에서는 mytfsserver) 이름으로 된 항목을 미리 생성해 둔다.

그중에서 2번째 방법을 한 화면에 표시해 보면 아래와 같은 동작이죠. ^^

[그림 1: 로그인 계정 등록]
how_to_access_source_server_1.PNG

마지막으로... "saltynut" 님의 정보에 의하면, TFS 2010부터는 소스 서버 구성에 대한 옵션을 TFS 차원에서 제공해 줄거라고 합니다. ^^



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

[연관 글]






[최초 등록일: ]
[최종 수정일: 7/10/2021]

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

비밀번호

댓글 작성자
 




... 166  167  168  169  170  171  172  173  174  175  176  177  [178]  179  180  ...
NoWriterDateCnt.TitleFile(s)
532정성태9/2/200730420개발 환경 구성: 27. AD CA에서 Code Signing 인증서 유형 추가 방법
531정성태9/2/200726061.NET Framework: 95. WCF에서의 DataTable 사용
530정성태9/1/200722615.NET Framework: 94. WCF 예외에 대한 시행착오
529정성태8/31/200725447.NET Framework: 93. WCF - DataContract와 KnownType 특성 [1]
528정성태8/30/200720099오류 유형: 47. VPC - 네트워크 어댑터 MAC 주소 중복 오류
527정성태8/30/200730136Team Foundation Server: 20. 잠긴 파일을 강제로 해제 [2]
526정성태8/29/200720039오류 유형: 46. VS.NET 2008 - ASP.NET 디버깅 : Strong name validation failed.
525정성태8/27/200722328VS.NET IDE: 54. VS.NET 2008 - 새롭게 도입되는 XSD Schema Designer
524정성태8/23/200739862오류 유형: 45. 요청한 작업은, 사용자가 매핑한 구역이 열려 있는...
523정성태8/16/200722511VS.NET IDE: 53. VS.NET 2008 - 서비스 참조 시 기존 데이터 컨테이너 DLL 사용
522정성태8/13/200726127VS.NET IDE: 52. VS.NET 2008 - WCF를 위한 디버깅 환경 개선
521정성태8/8/200726270.NET Framework: 92. XmlSerializer 생성자의 실행 속도를 올리는 방법 - 두 번째 이야기 [3]
520정성태8/7/200721379VS.NET IDE: 51. Visual Studio 2008 베타 2 설치
519정성태7/27/200727762오류 유형: 44. System.BadImageFormatException [2]
518정성태7/26/200728713오류 유형: 43. System.ComponentModel.LicenseException [1]
517정성태7/19/200716992개발 환경 구성: 26. VPC - 일반 사용자 계정으로 구동
516정성태7/19/200720272오류 유형: 42. TFS - Error loading menu: Index was outside the bounds of the array [2]
515정성태7/18/200727934오류 유형: 41. SSL 서버 자격 증명을 만드는 동안 심각한 오류가 발생했습니다.
514정성태7/14/200720609Team Foundation Server: 19. Orcas에서 개선되는 TFS 기능들
513정성태7/4/200731586.NET Framework: 91. Foreground Thread / Background Thread [1]
512정성태6/27/200721639오류 유형: 40. error PRJ0050: Failed to register output.
511정성태6/25/200729592.NET Framework: 90. XmlSerializer 생성자의 실행 속도를 올리는 방법 [2]
510정성태6/25/200744467디버깅 기술: 15. First-Chance Exception
508정성태6/21/200727440Team Foundation Server: 18. Team Build에 사용되는 각종 Property 값 [4]
507정성태6/11/200725057VS.NET IDE: 50. Orcas - UAC 설정 관련
506정성태6/9/200720223오류 유형: 39. VC Package not available or not registered
... 166  167  168  169  170  171  172  173  174  175  176  177  [178]  179  180  ...