UNIX 클라이언트와 Windows 기반 서버 간에 사용자 계정 매핑에 단순화하기 위해 스크립트에서 설명

기술 자료 번역 기술 자료 번역
기술 자료: 973840 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

소개

이 문서에서는 Active Directory 서비스가 존재하지 않는 환경에서 UNIX 클라이언트가 NFS) 파일 서버 OEM 또는 네트워크 파일 시스템으로 Windows Server 2008 또는 Windows Server 2008 저장소를 사용하는 방법을 알고 싶은 고객은 것입니다. 이 문서에서는 스크립트 UNIX 클라이언트와 Windows 기반 서버 간에 사용자 계정 매핑을 사용하려면 필요한 모든 구성 요소의 구성 방법에 대한 지침을 제공합니다.

추가 정보

스크립트는 다음 두 단계로 작동합니다.

1단계:

첫 번째 단계는 Active Directory 경량 디렉터리 서비스 AD LDS 인스턴스에 위로 설정하고 사용자 매핑 서비스를 지원하는 데 필요한 NFS 구성합니다.

일부 OEM Windows Server 2008 저장소 배를 자신의 공장 설치 프로세스의 일부로 AD LDS 서비스 preconfigure 있습니다.

AD LDS 서비스를 이용하는 데 필요한 고객은 동일한 스크립트를 Windows Server 2008 필요한 구성을 자동화할 수 있습니다.

2단계:

두 번째 단계에서는 AD LDS 개체를 일치시킬 로컬 사용자 및 그룹을 만듭니다. 이것은 일반적으로 고객이 UNIX 클라이언트가 Windows 기반 서버가 참조가 적절한 계정 매핑을 설정하는 사용자가 가져오기 및 내보내기 프로세스로 이루어집니다.

OEM 또는 고객 측면 (1단계)

OEM 또는 서비스를 설치한 고객은 다음과 같은 파일이 필요합니다.

공장 설치 adlds.cmd 파일

다음 텍스트를 복사하여 메모장 파일로 공장 설치 adlds.cmd 파일을 만들고 다음 텍스트 파일 이름으로 저장할 공장 설치 adlds.cmd.
setlocal enabledelayedexpansion

set opt_insecure=0

for %%i in (%*) do (
        if %%i equ insecure set opt_insecure=1
)

rem === create set-defaultnamingcontext.ldf
echo dn: CN=NTDS Settings,CN=%COMPUTERNAME%$NFSInstance,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=X>set-defaultnamingcontext.ldf
echo changetype: modify>>set-defaultnamingcontext.ldf
echo replace: msDS-DefaultNamingContext>>set-defaultnamingcontext.ldf
echo msDS-DefaultNamingContext: CN=nfs,DC=nfs>>set-defaultnamingcontext.ldf
echo ->>set-defaultnamingcontext.ldf

rem === Install the ADAM role
start /w servermanagercmd -i FS-NFS-Services
start /w servermanagercmd -i ADLDS

rem === Create a ADAM instance for use by Services for NFS named NFSInstance
%systemroot%\ADAM\adaminstall.exe /answer:nfs-instance-answer.txt

rem === Set the default naming context
ldifde -i -f set-defaultnamingcontext.ldf -s localhost:389 -c "cn=Configuration,dc=X" #configurationNamingContext

rem === Extend the schema to add the uidNumber/gidNumber attributes to the user
rem === class and the gidNumber attribute to the group class
ldifde -i -f add-uidnumber-gidnumber.ldf -s localhost:389 -c "cn=Configuration,dc=X" #configurationNamingContext

rem === Add Users container object
ldifde -i -f add-users-container.ldf -s localhost:389

rem === Provide read access to the NFS instance
dsacls \\localhost:389\CN=nfs,DC=nfs /G everyone:GR /I:T


if "!opt_insecure!" equ "1" (
        dsacls \\\\localhost:389\\CN=nfs,DC=nfs /G "anonymous logon":GR /I:T
        ldifde -i -f change-dsheuristics.ldf -s localhost:389 -j . -c "cn=Configuration,dc=X" #configurationNamingContext
)


rem === Configure the Services for NFS mapping source to use ADAM
nfsadmin mapping config adlookup=yes addomain=%COMPUTERNAME%:389

rem === Cleanup generated file
del set-defaultnamingcontext.ldf

추가 uidnumber gidnumber.ldf 파일

다음 텍스트를 복사하여 메모장 파일로 gidnumber.ldf uidnumber 추가 파일을 만들고 다음 텍스트 파일 이름으로 저장할 추가 uidnumber gidnumber.ldf.
dn: CN=User,CN=Schema,CN=Configuration,DC=X
changetype: ntdsSchemaModify
add: mayContain
mayContain: 1.3.6.1.1.1.1.0
mayContain: 1.3.6.1.1.1.1.1
-

dn: CN=Group,CN=Schema,CN=Configuration,DC=X
changetype: ntdsSchemaModify
add: mayContain
mayContain: 1.3.6.1.1.1.1.1
-

dn:
changetype: ntdsSchemaModify
add: schemaUpdateNow
schemaUpdateNow: 
-

추가 사용자를 container.ldf 파일

다음 텍스트를 복사하여 메모장 파일로 container.ldf 사용자가 추가 파일을 만들고 다음 텍스트 파일 이름으로 저장할 추가 사용자를 container.ldf.
dn: CN=Users,CN=nfs,DC=nfs
changetype: add
cn: Users
objectClass: container

변경 dsheuristics.ldf 파일

다음 텍스트를 복사하여 메모장 파일로 변경 dsheuristics.ldf 파일을 만들고 다음 텍스트 파일 이름으로 저장할 변경 dsheuristics.ldf.
dn: CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,DC=X
changetype: modify
replace: dsHeuristics
dsHeuristics: 0000002001001
-

nfs 인스턴스 answer.txt 파일

다음 텍스트를 복사하여 메모장 파일로 nfs 인스턴스 answer.txt 파일을 만들고 다음 텍스트 파일 이름으로 저장할 nfs 인스턴스 answer.txt.
[ADAMInstall]
; The following line specifies to install a unique ADAM instance.
InstallType=Unique
; The following line specifies the name to be assigned to the new instance.
InstanceName=NFSInstance
; The following line specifies the communications port to use for LDAP.
LocalLDAPPortToListenOn=389
; The following line specifies an application partition to create
NewApplicationPartitionToCreate="cn=nfs,dc=nfs"
; The following line specifies the directory to use for ADAM data files.
;DataFilesPath=C:\Program Files\Microsoft ADAM\NFSInstance\data
; The following line specifies the directory to use for ADAM log files.
;LogFilesPath=C:\Program Files\Microsoft ADAM\NFSInstance\data
; The following line specifies the .ldf files to import into the ADAM schema.
ImportLDIFFiles="ms-inetorgperson.ldf" "ms-user.ldf" "MS-AdamSchemaW2K8.ldf"
공장 설치 adlds.cmd 스크립트는 다음과 같은 작업을 수행합니다.
  1. 나중에 만들어질 ADLDS 인스턴스에 대한 기본 명명 컨텍스트를 지정하려면 ldf 파일을 생성합니다.
  2. Windows Server 2008 기반 컴퓨터나 Windows Server 2008 저장소 기반 서버에서 NFS 및 AD LDS 역할을 설치합니다.
  3. nfs 인스턴스 answer.txt 파일을 사용하여 새 AD LDS 인스턴스가 만들어집니다.

    참고이 인스턴스의 NFSInstance 명명된, 파티션이 "cn = nfs, dc = nfs," 포트 389, 인스턴스를 실행하고 다음 특성을 사용하여 스키마를 확장할:
    • ms inetorgperson
    • ms-사용자
    • ms adamschemaw2k8
  4. 1단계에서 만든 집합 defaultnamingcontext.ldf 파일을 기본 명명 컨텍스트를 NFSInstance 인스턴스의 설정합니다.
  5. 추가 uidnumber gidnumber.ldf 파일 스키마를 확장합니다. 이렇게 하려면 사용자 및 그룹 클래스 uidNumber 및 gidNumber 특성이 이를 추가합니다.
  6. 추가 사용자를 container.ldf 파일 Users라는 사용자 개체와 고객이 가져올 그룹 개체를 저장하는 컨테이너 개체를 추가하는 데 사용됩니다.
  7. 모든 사람 읽기 권한을 설정하려면 보안 설정에 따라 NFSInstance 인스턴스 변경됩니다 그룹.
  8. MSP 파일의 경로나안전하지 않은날짜와 공장 설치 adlds.cmd 스크립트를 실행할 때 인스턴스에 로컬이 아닌 액세스를 허용하도록 인스턴스를 추가로 완화된 NFSInstance 보안을 명령줄 인수로 지정되었습니다.

    참고일반적으로 추가할 필요가 없는 경우안전하지 않은가장 일반적인 시나리오는 매개 변수.
  9. NFS 매핑 소스는 NFSInstance 인스턴스를 사용하도록 설정되어 있습니다.
1 단계에서 다음과 같이 하십시오.
  1. 다음과 같은 관련된 파일 함께 공장 설치 adlds.cmd 파일을 NFS 실행하는 컴퓨터로 복사하십시오.
    • 추가 uidnumber gidnumber.ldf
    • 추가 사용자를 container.ldf
    • dsheuristics.ldf 변경
    • nfs 인스턴스 answer.txt
  2. 공장 설치 adlds.cmd 파일을 실행하십시오.
공장 설치 adlds.cmd 파일을 실행하면 NFSInstance 인스턴스가 사용자 개체 및 그룹 개체를 가져올 준비가 됩니다.

고객 측면 (2단계)

고객 쪽에서 다음 스크립트가 필요합니다.

nfs adlds config.js 스크립트

메모장 파일로 복사한 다음 스크립트를 이 파일을 만들고 다음 텍스트 파일 이름으로 저장할 nfs adlds config.js.
var passwdFilename, groupFilename;
var passwdFile, groupFile;
var pStr, gStr;
var pLines, gLines;
var pFields, gFields;
var executeCommands = false;

var fso = new ActiveXObject ("Scripting.FileSystemObject");




args = WScript.Arguments;

namedArgs = WScript.Arguments.Named;


passwdFilename = namedArgs.Item("passwd");
groupFilename = namedArgs.Item("group");
ldifFilename = namedArgs.Item("ldf");
usercmdFilename = namedArgs.Item("usercmd");
logFilename = namedArgs.Item("log");
userPassword = namedArgs.Item("userpassword");


for (i = 0; i < args.length; i++)
    {
    if (args(i) == "/execute")
        executeCommands = true;
    }



function Print (x)
    {
    WScript.Echo (x);
    }



function Usage ()
    {
    Print (WScript.ScriptName + " /passwd:passwdfile /group:groupfile /ldf:out.ldf\n" +
           "    /usercmd:generateusers.cmd [/execute] [/log:logname]\n" +
           "\n" +
           "/passwd       - location of passwd file\n" +
           "/group        - location of group file\n" +
           "/ldf          - output generated ldf file\n" +
           "/usercmd      - output cmd file to generate local users and groups\n" +
           "/userpassword - provide a password to be used for all user accounts created\n" +
           "/execute      - import user objects to ADAM using the generated files\n" +
           "/log          - specify a filename to log operations\n" +
           "\n" +
           "Both /passwd and /group must be specified.\n" +
           "At least one of /ldf or /usercmd must be specified.\n" +
           "If /userpassword is not specified all local accounts created must have\n" +
           "passwords set manually before NFS mapping will succeed.\n");
    }


function ValidatePasswdGroup ()
    {
    var i, j;

    for (i = 0; i < pLines.length; i++)
        {
        pFields = pLines[i].split(":");

        if (0 == pFields[0].length)
            continue;

        for (j = 0; j < gLines.length; j++)
            {
            gFields = gLines[j].split(":");

            if (0 == gFields[0].length)
                continue;

            if (pFields[0] == gFields[0])
                {
                Print ("The name " + pFields[0] + " occurs in both passwd and group files\n\n");

                return false;
                }
            }
        }

    return true;
    }


function GenerateLdif (s)
    {
    var i;

    for (i = 0; i < pLines.length; i++)
        {
        pFields = pLines[i].split(":");

        if (0 == pFields[0].length)
            continue;

        s.Write ("dn: CN=" + pFields[0] + ",CN=Users,CN=nfs,DC=nfs\n");
        s.Write ("changetype: add\n");
        s.Write ("cn: " + pFields[0] + "\n");
        s.Write ("objectClass: user\n");
        s.Write ("uidNumber: " + pFields[2] + "\n");
        s.Write ("gidNumber: " + pFields[3] + "\n");
        s.Write ("sAMAccountName: " + pFields[0] + "\n");
        s.Write ("\n");
        }

    for (i = 0; i < gLines.length; i++)
        {
        gFields = gLines[i].split(":");

        if (0 == gFields[0].length)
            continue;

        s.Write ("dn: CN=" + gFields[0] + ",CN=Users,CN=nfs,DC=nfs\n");
        s.Write ("changetype: add\n");
        s.Write ("cn: " + gFields[0] + "\n");
        s.Write ("objectClass: group\n");
        s.Write ("gidNumber: " + gFields[2] + "\n");
        s.Write ("sAMAccountName: " + gFields[0] + "\n");
        s.Write ("\n");
        }
    }


function GenerateUserGroupCmd (s)
    {
    var i, j;

    if (!userPassword || 0 == userPassword.length)
        {
        Print ("WARNING: No /userpassword option was specified, after local accounts\n" +
               "are created, passwords must be set on these accounts manually before\n" +
               "they can be used for ADLDS mapping for NFS components.\n");
        }


    //
    // Create local groups based on group file
    //
    for (i = 0; i < gLines.length; i++)
        {
        gFields = gLines[i].split(":");

        if (0 == gFields[0].length)
            continue;

        s.Write ("net localgroup " + gFields[0] +
                 " /add /comment:\"Group for GID:" + gFields[2] + "\"\n");
        }
    s.Write ("\n");


    //
    // Create local users from passwd file
    //
    for (i = 0; i < pLines.length; i++)
        {
        pFields = pLines[i].split(":");

        if (0 == pFields[0].length)
            continue;

        if (userPassword && 0 != userPassword.length)
            {
            s.Write ("net user " + pFields[0] + " /add /comment:\"User for UID:" +
                     pFields[2] + " GID:" + pFields[3] + "\" && net user " + pFields[0] + " " + userPassword + "\n");
            }
        else
            {
            s.Write ("net user " + pFields[0] + " /add /comment:\"User for UID:" +
                     pFields[2] + " GID:" + pFields[3] + "\"\n");
            }

        //
        // Add users to their primary groups
        //
        for (j = 0; j < gLines.length; j++)
            {
            gFields = gLines[j].split(":");

            if (0 == gFields[0].length)
                continue;

            if (gFields[2] == pFields[3])
                {
                s.Write ("net localgroup " + gFields[0] + " " + pFields[0] +
                         " /add\n");
                }
            }

        s.Write ("\n");
        }
    s.Write ("\n");


    //
    // Add users to supplementary groups
    //
    for (i = 0; i < gLines.length; i++)
        {
        gFields = gLines[i].split(":");

        if (4 == gFields.length && 0 != gFields[3].length)
            {
            supUsers = gFields[3].split(",");

            for (j = 0; j < supUsers.length; j++)
                {
                s.Write ("net localgroup " + gFields[0] + " " + supUsers[j] + " /add\n");
                }
            }
        }
    s.Write ("\n");
    }






if (!passwdFilename || !groupFilename ||
    (!ldifFilename && !usercmdFilename))
    {
    Usage ();
    }
else
    {
    passwdFile = fso.OpenTextFile (passwdFilename, 1);
    groupFile = fso.OpenTextFile (groupFilename, 1);

    pStr = passwdFile.ReadAll ();
    gStr = groupFile.ReadAll ();

    passwdFile.Close ();
    groupFile.Close ();

    pLines = pStr.split ("\n");
    gLines = gStr.split ("\n");


    if (!ValidatePasswdGroup ())
        {
        Print ("error: passwd and group files must not have names that overlap\n" +
               "       Please edit the files to create unique names.\n");
        }
    else
        {
        if (ldifFilename)
            {
            ldifS = fso.OpenTextFile (ldifFilename, 2, true);

            GenerateLdif (ldifS);

            ldifS.Close ();
            }


        if (usercmdFilename)
            {
            usercmdS = fso.OpenTextFile (usercmdFilename, 2, true);

            GenerateUserGroupCmd (usercmdS);

            usercmdS.Close ();
            }

        if (executeCommands)
            {
            var oShell = WScript.CreateObject("WScript.Shell");
            var command = "cmd /k ";

            if (ldifFilename)
                {
                command = command + "echo Importing user objects & ldifde -i -f " + ldifFilename + " -s localhost:389 ";

                if (logFilename)
                    {
                    command = command + ">>" + logFilename + " 2>&1 ";
                    }

                command = command + "& echo command complete ";

                if (usercmdFilename)
                    {
                    command = command + "& ";
                    }
                }

            if (usercmdFilename)
                {
                command = command + "echo Creating local users & " + usercmdFilename + " ";

                if (logFilename)
                    {
                    command = command + ">>" + logFilename + " 2>&1 ";
                    }

                command = command + "& echo command complete ";
                }

            oShell.Run (command);
            }
        }

    }
2 단계에서 고객 nfs adlds config.js 스크립트를 실행합니다. 이 스크립트는 사용자 개체 및 암호 파일 및 파일 그룹 기반으로 그룹 개체는 NFSInstance 인스턴스와를 채웁니다. 그런 다음 이 스크립트는 AD LDS 개체를 일치시킬 로컬 사용자 및 그룹을 만듭니다.

스크립트를 실행하기 전에

사용자 매핑을 복사본에 NFS 확인한 서버를 실행하는 컴퓨터에 Nfs adlds config.js 스크립트가 필요합니다. 암호 파일 및 UNIX 기반 컴퓨터에서 NFS용 서버를 실행하는 컴퓨터로 매핑할 수 있는 사용자와 그룹을 포함할 그룹 파일을 복사하십시오.

그런 다음 암호 파일과 매핑되지 않을 그룹이나 사용자를 제거하려면 그룹 파일을 편집하십시오. 일부 UNIX 사용자 및 그룹 (예: 동일한 이름을 가진합니다사용자: 루트/그룹: 루트. 스크립트가 실패할 및 암호 파일 및 파일 그룹 사용자 및 그룹에 대해 동일한 이름을 포함하는 경우 경고 메시지를 표시합니다. 따라서 모든 이름이 고유한지 확인해야 이러한 이름은 변경해야 합니다. 예를 들어, 그룹 파일을 편집하여 "rootgrp" "루트" 그룹 이름을 변경할 수 있을

nfs adlds config.js 스크립트는 다음과 같은 작업을 수행합니다.
  • 스크립트가 암호 파일 및 그룹 파일을 입력으로 받아 사용자 개체 및 개체 그룹 NFSInstance 인스턴스로 가져오는 ldf 파일을 생성합니다.
  • 스크립트가 uidNumber 특성과 암호 파일 및 파일 그룹 기반으로 gidNumber 특성을 설정합니다.
  • 로컬 사용자 및 그룹을 만드는 명령을 포함하는 cmd 파일을 스크립트를 생성하고 스크립트는 기본 그룹에 사용자를 추가합니다.
  • 스크립트를 필요에 따라 사용자 개체와 그룹 개체 가져오기 명령을 실행하고 스크립트는 로컬 사용자 및 그룹을 만듭니다.

고객 위한 일반적인 시나리오

일반적으로 스크립트를 복사하여 암호 및 그룹 파일을 수정한 후 고객이 다음 명령을 실행해야 합니다.
Nfs adlds config.js/passwd:passwd/group:group/ldf:users.ldf/usercmd: 만들기-로컬-사용자가-groups.cmd//log 실행: adlds.txt 구성
경우,/실행인수를 지정하지 않는 경우에는 만들기-로컬-사용자가-groups.cmd 및 users.ldf 만들어집니다. 고객이 만들기-로컬-사용자가-groups.cmd, 실행하고 NFSInstance 인스턴스로 사용자와 그룹을 가져오려면 다음 명령을 실행합니다.
ldifde - I -f-s localhost:389 users.ldf
고객이 스크립트를 실행한 후 고객이 로컬 사용자가 자신의 환경에서 사용하는 모든 암호 정책을 기반으로 만든 로컬 사용자 암호를 설정해야 합니다. 또는 사용자가 지정한 경우/userpasswordnfs adlds config.js 스크립트를 실행할 때 인수. 이 인수를 사용할 수 있는 모든 사용자 계정에 대해 암호를 생성할 수 있습니다. 암호를 지정하지 않으면 사용자 계정이 활성화되지 않은 및 서버 NFS 구성 요소에 대해 이러한 계정을 사용할 수 없습니다.

속성

기술 자료: 973840 - 마지막 검토: 2010년 10월 15일 금요일 - 수정: 1.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Windows Server 2008 Datacenter
  • Windows Server 2008 Enterprise
  • Windows Server 2008 Standard
키워드:?
kbexpertiseadvanced kbsurveynew kbinfo kbmt KB973840 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.
이 문서의 영문 버전 보기:973840

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com