Descrição de scripts para utilizar para simplificar o mapeamento de contas de utilizador entre um cliente UNIX e um servidor baseado no Windows

Traduções de Artigos Traduções de Artigos
Artigo: 973840 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

INTRODUÇÃO

Este artigo é de OEM ou os clientes que estiverem interessados em como utilizar o Windows Server 2008 ou armazenamento do Windows Server 2008 como um sistema de ficheiros de rede (NFS) o servidor de ficheiros para os clientes de UNIX num ambiente em que o serviço do Active Directory ' não existe. O artigo contém orientações sobre como o script de configuração de todos os componentes necessários para activar o mapeamento de contas de utilizador entre o cliente UNIX e o servidor baseado no Windows.

Mais Informação

Os scripts funcionam nos seguintes duas fases.

Fase 1:

A primeira fase configura a instância de Serviços LDS do Active Directory (AD LDS) e configura o NFS é necessário para suportar o serviço de mapeamento de utilizador.

Alguns OEM pré-que o navio armazenamento do Windows Server 2008 pode configurar o serviço de AD LDS como parte do processo de instalação de fábrica.

Os clientes que necessitem de tirar partido do serviço AD LDS podem utilizar os mesmos scripts para automatizar a configuração que é necessária para o Windows Server 2008.

Fase 2:

A segunda fase cria os grupos e utilizadores locais para fazer corresponder os objectos AD LDS. Normalmente isto é efectuado pelo cliente como um processo para exportar e importar utilizadores para os clientes de UNIX estabelecer o mapeamento de conta apropriado no que refere ao servidor baseado no Windows.

Lado de OEM ou cliente (Phase1)

OEM ou clientes que instalem o serviço requerem os seguintes ficheiros.

O ficheiro de configuração de fábrica-adlds.cmd

Para criar o ficheiro de configuração de fábrica-adlds.cmd, copie o seguinte texto para um ficheiro do bloco de notas e, em seguida, guarde o ficheiro de texto com o nome adlds.cmd da configuração de fábrica.
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

O ficheiro de suplemento-uidnumber-gidnumber.ldf

Para criar o ficheiro de suplemento-uidnumber-gidnumber.ldf, copie o seguinte texto para um ficheiro do bloco de notas e, em seguida, guarde o ficheiro de texto com o nome, adicionar-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: 
-

O ficheiro de suplemento-utilizadores-container.ldf

Para criar o ficheiro de suplemento-utilizadores-container.ldf, copie o seguinte texto para um ficheiro do bloco de notas e, em seguida, guarde o ficheiro de texto com o nome, adicionar utilizadores-container.ldf.
dn: CN=Users,CN=nfs,DC=nfs
changetype: add
cn: Users
objectClass: container

O ficheiro de alteração dsheuristics.ldf

Para criar o ficheiro de alteração dsheuristics.ldf, copie o seguinte texto para um ficheiro do bloco de notas e, em seguida, guarde o ficheiro de texto com o nome dsheuristics.ldf de alteração.
dn: CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,DC=X
changetype: modify
replace: dsHeuristics
dsHeuristics: 0000002001001
-

O ficheiro answer.txt da instância de nfs

Para criar o ficheiro de nfs-instância-answer.txt, copie o seguinte texto para um ficheiro do bloco de notas e, em seguida, guarde o ficheiro de texto com o nome answer.txt da instância de nfs.
[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"
O script de fábrica-configuração-adlds.cmd efectua as seguintes operações:
  1. Gera um ficheiro ldf para especificar um contexto de atribuição de nomes predefinido para a instância ADLDS que vai ser criada posteriormente.
  2. Instala as funções SENF e AD LDS no servidor baseado no Windows Server 2008 ou baseados no armazenamento do Windows Server 2008.
  3. Cria uma nova instância de AD LDS utilizando o ficheiro answer.txt da instância de nfs.

    NotaEsta instância é denominada NFSInstance, a partição é "cn = nfs, dc = nfs," a instância é executado na porta 389 e o esquema é expandido com os seguintes atributos:
    • MS-inetorgperson
    • MS-utilizador
    • MS-adamschemaw2k8
  4. O ficheiro de conjunto defaultnamingcontext.ldf que foi criado no passo 1 define o contexto da instância NFSInstance de atribuição de nomes predefinido.
  5. O ficheiro de suplemento-uidnumber-gidnumber.ldf expande o esquema. Para isso, adiciona os atributos uidNumber e gidNumber para as classes de utilizador e de grupo.
  6. O ficheiro de suplemento-utilizadores-container.ldf é utilizado para adicionar um objecto de contentor é designado por utilizadores para conter objectos de utilizador e os objectos de grupo de clientes irão importar.
  7. Definições de segurança na instância de NFSInstance são alteradas para activar permissões de leitura a todos grupo.
  8. Senão segurofoi especificado como um argumento da linha de comandos quando o script de fábrica-configuração-adlds.cmd foi executada, a segurança o NFSInstance instância é mais suavizada para permitir acesso não local para a instância.

    NotaNormalmente, não é necessário adicionar onão seguroparâmetro nos cenários mais comuns.
  9. A origem de mapeamento de NFS estiver definida para utilizar a instância NFSInstance.
Na fase 1, siga estes passos:
  1. Copie o ficheiro de configuração de fábrica-adlds.cmd juntamente com os seguintes ficheiros relacionados ao computador em que está a executar o NFS:
    • Adicionar-uidnumber-gidnumber.ldf
    • Adicione-os utilizadores-container.ldf
    • alteração dsheuristics.ldf
    • answer.txt da instância de NFS
  2. Execute o ficheiro adlds.cmd da configuração de fábrica.
Depois de executar o ficheiro de configuração de fábrica-adlds.cmd, a instância de NFSInstance está preparada para que os objectos de utilizador e de grupo de objectos importados.

Lado do cliente (Phase2)

No lado do cliente, o script a seguir é necessário

O script de nfs-adlds-config.js

Para criar este ficheiro, copie o seguinte script para um ficheiro do bloco de notas e, em seguida, guarde o ficheiro de texto com o nome, 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);
            }
        }

    }
Na fase 2, o cliente executa o script de nfs-adlds-config.js. Este script preenche a instância NFSInstance com os objectos de utilizador e os objectos de grupo que sejam baseiam no ficheiro passwd e o ficheiro de grupo. Em seguida, este script cria grupos e utilizadores locais para fazer corresponder os objectos AD LDS.

Antes de executar o script

Copiar o script Nfs-adlds-config.js ao computador que está com o servidor para NFS e que requer mapeamentos de utilizador. Copie o ficheiro de palavra-passe e o ficheiro de grupo contém os utilizadores e grupos para ser mapeado de um computador baseado em UNIX para o computador com o servidor para NFS.

Em seguida, edite o ficheiro passwd e o ficheiro de grupo para remover os utilizadores ou grupos que não pretende mapear. Alguns utilizadores UNIX e grupos têm nomes idênticos, tal como: raiz do utilizador / grupo: raiz. O script irá falhar e pedir um aviso, se o ficheiro passwd e o ficheiro de grupo contenham nomes idênticos para os utilizadores e grupos. Por conseguinte, estes nomes devem ser alterados para se certificar de que todos os nomes são exclusivos. Por exemplo, tem de editar o ficheiro de grupo e altere o nome do grupo "raiz" para "rootgrp."

O script de nfs-adlds-config.js efectua as seguintes operações:
  • O script tem o ficheiro de palavra-passe e o ficheiro de grupo como entrada e gera um ficheiro ldf que importa todos os objectos de utilizador e grupo de objectos para a instância de NFSInstance.
  • O script define o atributo de uidNumber e o atributo gidNumber, com base no ficheiro passwd e o ficheiro de grupo.
  • O script gera um ficheiro cmd que contém comandos para criar utilizadores e grupos locais e o script adiciona os utilizadores ao respectivo grupo primário.
  • O script for executado, opcionalmente, os comandos para importar objectos de utilizador e de grupo de objectos e o script cria os grupos e utilizadores locais.

Cenário comum para clientes

Geralmente, depois é copiado o script e os ficheiros passwd e grupo são modificados, o cliente deve executar o seguinte comando:
Nfs-adlds-config.js /passwd:passwd /group:group /ldf:users.ldf /usercmd: criar-local-utilizadores-groups.cmd /execute /log: adlds.txt configurar
Se o/Executeargumento não for especificado, o users.ldf e criar-local-utilizadores-groups.cmd são criados. O cliente pode executar criar-local-utilizadores-groups.cmd e, em seguida, execute o seguinte comando para importar os utilizadores e grupos para a instância de NFSInstance:
Ldifde - I -f users.ldf -s localhost:389
Depois dos clientes executar o script, os clientes devem definir palavras-passe para os utilizadores locais que foram criados, com base em qualquer política de palavra-passe que utilizam no seu ambiente, para os utilizadores locais. Ou, tem de especificar o/userPasswordargumento quando executa o script de nfs-adlds-config.js. Este argumento ajuda-na gerar uma palavra-passe pode ser utilizada para todas as contas de utilizador. Até que uma palavra-passe for especificada, as contas de utilizador não estão activas e o servidor para NFS componente não pode utilizar estas contas.

Propriedades

Artigo: 973840 - Última revisão: 15 de outubro de 2010 - Revisão: 1.0
A informação contida neste artigo aplica-se a:
  • Windows Server 2008 Datacenter
  • Windows Server 2008 Enterprise
  • Windows Server 2008 Standard
Palavras-chave: 
kbexpertiseadvanced kbsurveynew kbinfo kbmt KB973840 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 973840

Submeter comentários

 

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