Click or drag to resize

네트워크 공유 폴더로 업로드 파일 저장

서버로 업로드된 파일을 네트워크 공유 폴더로 저장하기 위해서는 다소 복잡한 작업을 진행해야 합니다. 특히 인터넷 게스트 계정(IUSR_computername)으로 동작하는 ASP 프로세스를 많은 권한을 가진 공유 계정으로 동작시켜야 하기 때문에 보안에 취약한 부분이 존재합니다.

이 문제를 해결하기 위해 TABS Upload는 파일을 읽거나 쓰는 필요한 순간에만 공유 계정으로 로그온해서 I/O를 진행하고 완료되는 즉시 원래의 인터넷 게스트 계정으로 돌아가는 안전한 방식을 제공합니다. 이 방식은 IIS 설정을 변경해야 하는 번거로움이 없어 보다 편리하게 사용할 수 있습니다.

Active Directory를 사용하는 경우

업로드를 받는 웹 서버와 파일을 저장하는 파일 서버가 하나의 Active Directory 아래에서 관리되는 경우로 Active Directory 내에 도메인 계정을 만들고 이 계정으로 각각의 서버를 설정합니다.

Active Directory 서버 설정

  1. 윈도우 [관리 도구/Active Directory 사용자 및 컴퓨터]를 실행시킵니다.

  2. 새로운 Domain Users 그룹에 포함된 계정(예를 들어 upload4)을 생성합니다. 계정의 암호는 기간 제한 없이 사용할 수 있도록 설정합니다. 영문자, 숫자, 그리고 특수 기호가 조합된 매우 복잡하게 지정해야 안전합니다.

파일 서버 설정

  1. 공유 폴더의 보안 설정에서 도메인\upload4 계정이 폴더에 대한 모든 권한을 갖도록 지정합니다. 파일시스템 액세스 권한과 네트워크 공유 접근 권한 모두를 설정합니다.

Active Directory를 사용하는 경우의 웹 서버 프로그래밍

업로드 처리 ASP 페이지를 작성하기 전 인증을 위한 자격 증명 문자열을 먼저 생성해야 합니다. 아래 코드는 이 작업을 하는 코드로 CreateEncrypted 메서드의 첫 번째 인자에는 도메인 계정을 두 번째 인자에는 로그온 암호를 지정합니다. 도메인 계정은 UPN 형식으로 User@DNSDomainName와 같이 지정합니다. 예제에서 지정된 tabs.local을 실제 적용할 도메인 명으로 변경해야 합니다.

VBScript
Set Credential = CreateObject("TABSUpload4.Credential")
WScript.StdOut.WriteLine Credential.CreateEncrypted("upload4@tabs.local", "your_password")

이 코드를 명령창에서 cscript.exe credential.vbs로 실행하면 fGv+5UAaG28uGQPd8NM6utV01A/WslF38UoqVUO4Farv0IRDeduB/4LB0tV27NfTgfJWTuwj6yo= 와 같은 암호화된 자격 증명 문자열을 얻을 수 있습니다.

ASP 페이지에서 자격 증명을 사용해 네트워크 공유 폴더에 저장하는 코드는 아래와 같습니다. Impersonate 메서드 호출시 자격 증명 문자열을 지정하면 됩니다. 이렇게 호출할 경우 Active Directory의 도메인으로 인증한 후 네트워크 공유 폴더로 쓸 수 있는 권한을 획득해 파일을 쓸 수 있게 됩니다.

ASP
Set Upload = Server.CreateObject("TABSUpload4.Upload")
Upload.Start "C:\TEMP"

encCredential = "fGv+5UAaG28uGQPd8NM6utV01A/WslF38UoqVUO4Farv0IRDeduB/4LB0tV27NfTgfJWTuwj6yo="
Set Credential = Server.CreateObject("TABSUpload4.Credential")
If Credential.Impersonate(encCredential) Then
    'FileSystemObject로 네트워크 공유 파일/디렉터리 액세스
    Set fso = Server.CreateObject("Scripting.FileSystemObject")
    Set f = fso.CreateFolder("\\192.168.1.186\Upload\File1")   
    '네트워크 공유 폴더에 업로드 파일 저장
    Upload.Form("uploadFile").Save "\\192.168.1.186\Upload\File1", False
    Credential.Revert
End If

다운로드를 위한 ASP 페이지에서도 마찬가지 방법을 적용할 수 있습니다. TransferFile 호출 전 Impersonate 메서드를 호출해 Active Directory 도메인으로 인증한 후 네트워크 공유 폴더에 저장된 파일을 읽어 전송할 수 있습니다.

ASP
Set Download = Server.CreateObject("TABSUpload4.Download")

encCredential = "fGv+5UAaG28uGQPd8NM6utV01A/WslF38UoqVUO4Farv0IRDeduB/4LB0tV27NfTgfJWTuwj6yo="
Set credential = Server.CreateObject("TABSUpload4.Credential")
If Credential.Impersonate(encCredential) Then
    Download.FilePath = "\\192.168.1.186\Upload\sample.xls"
    Download.TransferFile True, True
    Credential.Revert
End If
Note Note

Save 메서드의 마지막 인자에 자격 증명 문자열을 입력하는 방식은 이전 버전과의 호환성 유지를 위해서만 지원합니다. Impersonate와 Revert를 사용한 새로운 방식을 사용 바랍니다.

독립 실행형 서버인 경우

독립 실행형 파일 서버가 공유한 폴더를 웹 서버가 액세스하기 위해서는 모든 서버에 동일한 계정(암호도 동일)을 생성하고 웹 서버 프로그래밍을 진행하면 됩니다.

파일 서버 설정

  1. 윈도우 [관리 도구/컴퓨터 관리]를 실행시킵니다.

  2. 로컬 사용자 및 그룹/사용자를 선택합니다.

  3. 새로운 로컬 계정(예를 들어 upload4)을 생성합니다. 기본적으로 Users 그룹에 속해 있으며 매우 복잡한 암호를 지정하고 암호 사용 기간을 제한하지 않도록 설정합니다.

  4. 공유 폴더의 보안 설정에서 upload4 계정이 폴더에 대한 모든 권한을 갖도록 지정합니다. 파일시스템 액세스 권한과 네트워크 공유 접근 권한 모두를 설정합니다.

웹 서버 설정

  1. 윈도우 [관리 도구/컴퓨터 관리]를 실행시킵니다.

  2. 로컬 사용자 및 그룹/사용자를 선택합니다.

  3. 파일 서버에서 생성한 것과 동일한 계정을 생성합니다. 반드시 동일한 암호를 지정하고 암호 사용 기간을 제한하지 않도록 설정합니다.

독립 실행형 파일 서버에 접근하는 웹 서버 프로그래밍

업로드 처리 ASP 페이지를 작성하기 전 인증을 위한 자격 증명 문자열을 먼저 생성해야 합니다. 아래 코드는 이 작업을 하는 코드로 CreateEncrypted 메서드의 첫 번째 인자에는 로컬 계정을 두 번째 인자에는 로그온 암호를 지정합니다.

VBScript
Set Credential = CreateObject("TABSUpload4.Credential")
WScript.StdOut.WriteLine Credential.CreateEncrypted("upload4", "your_password")

이 코드를 명령창에서 cscript.exe credential.vbs로 실행하면 fGv+5UAaG28Fa74FjFrxLXACseDmf4zoC8ejjRof5zuWDjCYzL3Xb0DNBKhmmxFB 와 같은 암호화된 자격 증명 문자열을 얻을 수 있습니다.

ASP 페이지에서 자격 증명을 사용해 네트워크 공유 폴더에 저장하는 코드는 아래와 같습니다. Impersonate 메서드 호출시 자격 증명 문자열을 지정하면 됩니다. 이렇게 호출할 경우 웹 서버와 파일 서버간 인증이 이루어지며 네트워크 공유 폴더로 쓸 수 있는 권한을 획득해 파일을 쓰게 됩니다.

ASP
Set Upload = Server.CreateObject("TABSUpload4.Upload")
Upload.Start "C:\TEMP"

encCredential = "fGv+5UAaG28Fa74FjFrxLXACseDmf4zoC8ejjRof5zuWDjCYzL3Xb0DNBKhmmxFB"
Set Credential = Server.CreateObject("TABSUpload4.Credential")
If Credential.Impersonate(encCredential) Then
    Upload.Form("uploadFile").Save "\\192.168.1.186\Upload", false
    Credential.Revert
End If

다운로드를 위한 ASP 페이지에서도 마찬가지 방법을 적용할 수 있습니다. TransferFile 호출 전 Impersonate 메서드를 호출해 웹 서버와 파일 서버간 인증이 이루어진 후 네트워크 공유 폴더에 저장된 파일을 읽어 전송할 수 있습니다.

ASP
Set Download = Server.CreateObject("TABSUpload4.Download")

encCredential = "fGv+5UAaG28Fa74FjFrxLXACseDmf4zoC8ejjRof5zuWDjCYzL3Xb0DNBKhmmxFB"
Set Credential = Server.CreateObject("TABSUpload4.Credential")
If Credential.Impersonate(encCredential) Then
    Download.FilePath = "\\192.168.1.186\Upload\sample.xls"
    Download.TransferFile True, True
Credential.Revert
End If