Beschreibung des Skripts verwenden, um Benutzer-Konto-Zuordnung zwischen einem UNIX-Client und einem Windows-basierten Server vereinfachen

Einführung

Dieser Artikel ist für OEMs oder interessierte Kunden im Umgang mit Windows Server 2008 oder Windows Storage Server 2008 als einem Network File System (NFS) File Server für UNIX-Clients in einer Umgebung, in der Active Directory-Dienst nicht vorhanden ist. Der Artikel enthält Informationen zur Konfigurationsskript alle erforderlichen Komponenten ermöglichen Benutzer Konto-Zuordnung zwischen UNIX-Clients und Windows-basierten Server.

Weitere Informationen

Die Skripts arbeiten in den folgenden zwei Phasen.

Phase 1:

Die erste Phase stellt Active Directory Lightweight Directory Services (AD LDS) Instanz und die erforderliche Zuordnung Benutzerdienst unterstützt NFS konfiguriert.

Einige OEMs, Lief Windows Storage Server 2008 AD LDS-Dienst als Teil ihrer Installation Factory vorkonfigurieren kann.

Kunden der AD LDS-Dienst nutzen können dieselben Skripts die Konfiguration automatisieren für Windows Server 2008.

Phase 2:

Die zweite Phase erstellt lokale Benutzer und Gruppen entsprechend der AD LDS-Objekte. Dies erfolgt normalerweise vom Debitor als Prozess zum Exportieren und Importieren von Benutzern für die UNIX-Clients geeignete Kontenzuordnung in Bezug auf Windows-basierten Server herstellen.

OEM oder Kunden Seite (Phase1)

OEMs oder Kunden des Dienstes installieren benötigen die folgenden Dateien.

Die Factory-Setup-adlds.cmd-Datei

Factory-Setup-adlds.cmd-Datei erstellen, kopieren Sie den folgenden Text in eine Editor-Datei und speichern die Datei unter dem Namen Factory-Setup-adlds.cmd.
setlocal enabledelayedexpansionset 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

Add-Uidnumber-gidnumber.ldf-Datei

Add-Uidnumber-gidnumber.ldf-Datei erstellen, kopieren Sie den folgenden Text in eine Editor-Datei und speichern Sie die Textdatei mit dem Namen Add-Uidnumber-gidnumber.ldf.
dn: CN=User,CN=Schema,CN=Configuration,DC=Xchangetype: 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:
-

Datei hinzufügen Benutzer container.ldf

Hinzufügen Benutzer container.ldf-Datei erstellen, kopieren Sie den folgenden Text in eine Editor-Datei und speichern die Datei unter dem Namen hinzufügen Benutzer container.ldf.
dn: CN=Users,CN=nfs,DC=nfschangetype: add
cn: Users
objectClass: container

Die Datei dsheuristics.ldf ändern

Ändern dsheuristics.ldf-Datei erstellen, kopieren Sie den folgenden Text in eine Editor-Datei und speichern die Datei unter dem Namen dsheuristics.ldf ändern.
dn: CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,DC=Xchangetype: modify
replace: dsHeuristics
dsHeuristics: 0000002001001
-

Nfs-Instanz-answer.txt-Datei

Nfs-Instanz-answer.txt-Datei erstellen, kopieren Sie den folgenden Text in eine Editor-Datei und speichern die Datei unter dem Namen Nfs-Instanz-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"

Das Factory-Setup-adlds.cmd Skript führt die folgenden Operationen:
  1. Generiert eine Ldf-Datei um eine Standard-Namenskontext ADLDS-Instanz angeben, die später erstellt werden.
  2. NFS und AD LDS-Rollen installiert auf dem Windows Server 2008 oder Windows Storage Server 2008-basierten Server.
  3. Erstellt eine neue AD LDS-Instanz mithilfe der Nfs-Instanz-answer.txt-Datei.

    Hinweis Diese Instanz namens NFSInstance ist die Partition "Cn = Nfs, dc = Nfs," Port 389 die Instanz ausgeführt wird und das Schema mit den folgenden Attributen erweitert:
    • MS inetorgperson
    • MS-Benutzer
    • ms-adamschemaw2k8
  4. Set-defaultnamingcontext.ldf-Datei, die in Schritt 1 erstellten legt den Standardnamenskontext Instanz NFSInstance.
  5. Add-Uidnumber-gidnumber.ldf-Datei erweitert das Schema. Zu diesem Zweck hinzugefügt Benutzer- und Klassen die Attribute UidNumber und GidNumber.
  6. Hinzufügen Benutzer container.ldf Datei wird ein Container-Objekt hinzufügen, die Benutzern zum Speichern von Benutzer- und Gruppenobjekten, die Kunden importieren wird verwendet.
  7. Sicherheitsrichtlinien für die NFSInstance-Instanz geändert, um Leseberechtigungen jeder aktivieren Gruppe.
  8. Wenn Unsichere als Befehlszeilenargument angegeben wurde das Factory-Setup-adlds.cmd-Skript ausgeführt wurde, wird die Sicherheit für die NFSInstance-Instanz weiter zu lokalen Zugriff auf die Instanz gelockert.

    Hinweis Normalerweise müssen Sie keinen unsicheren Parameter in den häufigsten Szenarien hinzufügen.
  9. Die Zuordnungsquelle NFS soll NFSInstance-Instanz verwendet werden.
Folgendermaßen Sie in Phase 1 vor:
  1. Kopieren Sie die Datei Factory-Setup-adlds.cmd mit zugehörigen Dateien auf dem Computer, auf dem NFS ausgeführt:
    • add-uidnumber-gidnumber.ldf
    • add-users-container.ldf
    • change-dsheuristics.ldf
    • nfs-instance-answer.txt
  2. Die Factory-Setup-adlds.cmd-Datei ausführen.
Nach dem Ausführen der Factory-Setup-adlds.cmd-Datei ist die NFSInstance-Instanz für Benutzer- und Gruppenobjekte importiert.

Seite (Phase 2)

Klicken Sie auf Debitor muss das folgende Skript

Nfs-Adlds-config.js-Skript

Diese Datei erstellen, kopieren Sie das folgende Skript in eine Editor-Datei und speichern die Datei unter dem Namen 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);
}
}

}

In Phase 2 führt der Kunde das Nfs-Adlds-config.js Skript. Dieses Skript füllt die NFSInstance-Instanz mit Benutzer- und Gruppenobjekte, die die Kennwortdatei und die Gruppendatei sind. Dann erstellt das Skript lokale Benutzer und Gruppen entsprechend der AD LDS-Objekte.

Bevor Sie das Skript ausführen

Kopieren Sie das Skript Nfs-Adlds-config.js Computer mit Server für NFS und erfordert normalerweise. Kopieren Sie die Kennwortdatei und die Gruppen-Datei, die die Benutzer und Gruppen von UNIX-basierten Computer auf dem Computer zugeordnet werden, der Server für NFS ausgeführt wird.

Dann bearbeiten Sie Kennwortdatei und Gruppendatei entfernen Sie Benutzer oder Gruppen, die Sie nicht zuordnen möchten. Einige UNIX-Benutzer und Gruppen haben identische Namen wie Benutzer: Root / Stamm:. Das Skript fehl und fordert eine Warnung enthält die Kennwortdatei und die Gruppendatei identische Namen für Benutzer und Gruppen. Daher müssen diese Namen geändert werden, um sicherzustellen, dass alle Namen eindeutig sind. Beispielsweise müssen Sie die Gruppendatei bearbeiten und ändern Sie den Namen der Gruppe "Root" in "Rootgrp."

Nfs-Adlds-config.js Skript führt die folgenden Operationen:
  • Das Skript verwendet die Kennwortdatei und die Gruppen-Datei als Eingabe und generiert eine Ldf-Datei, die die Benutzer- und Gruppenobjekte in der NFSInstance-Instanz importiert.
  • Das Skript wird das UidNumber-Attribut und das GidNumber-Attribut auf der Grundlage der Kennwortdatei und die Gruppendatei.
  • Das Skript generiert eine Cmd-Datei, die Befehle zum Erstellen von lokale Benutzer und Gruppen enthält, und das Skript fügt die Benutzer ihrer primären Gruppe.
  • Das Skript führt optional die Befehle Benutzer- und Gruppenobjekte importiert und das Skript erstellt die lokale Benutzer und Gruppen.

Häufig für Kunden

Im Allgemeinen muss das Skript kopiert und die Kennwort- und Gruppendateien geändert, der Kunde den folgenden Befehl ausführen:
Nfs-adlds-config.js /passwd:passwd /group:group /ldf:users.ldf /usercmd:create-local-users-groups.cmd /execute /log:configure-adlds.txt
Wenn das Argument / execute nicht angegeben ist, werden users.ldf und erstellen-Local-Benutzer-groups.cmd erstellt. Kunden kann erstellen-Local-Benutzer-groups.cmd ausführen, und führen Sie folgenden Befehl an die Benutzer und Gruppen in der NFSInstance-Instanz importieren:
LDIFDE – I – f users.ldf s - Localhost:389
Nach Kunden das Skript ausführen, müssen Kunden Kennwörter für lokale Benutzer festlegen, die erstellt wurden, basierend auf den Kennwortrichtlinien, für lokale Benutzer in ihrer Umgebung nutzen. Oder geben Sie das /userpassword -Argument beim Ausführen des Skripts Nfs-Adlds-config.js. Dieses Argument können Sie ein Kennwort zu generieren, die für alle Benutzerkonten verwendet werden können. Bis ein Kennwort angegeben wird, Benutzerkonten sind nicht aktiv, und der Server für NFS-Komponenten können keine Konten.
Eigenschaften

Artikelnummer: 973840 – Letzte Überarbeitung: 13.01.2017 – Revision: 1

Feedback