Jump to content

"Benutzer kann Kennwort nicht ändern" global vorgeben


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo MCSE Team :-)

 

ich habe im Forum gesucht und google belästigt aber keine Lösung auf mein Problem gefunden deswegen möchte ich mich vertrauensvoll an euch wenden :-)

 

Wir haben ein Linux LDAP Server der in regelmäßigen abständen mit einem Active Directory sychronisiert. Es gibt ein Interface an denen User Ihre Passwörter ändern können, deshalb soll es im Active Directory verboten sein sein passwort zu ändern.

 

Ich möchte den Hacken "Benutzer kann Kennwort nicht ändern" setzen, das aber über das userAccountControl Attribut nicht funktioniert.

 

Gibt es eine möglichkeit das Global für alle User in einer Gruppe festzulegen? Wenn das global nicht funktioniert, wäre ich froh wenn es ohne ein vb script klappt, da ich alles andere (User,Pw,gruppenzugehörigkeit, usw.) auch von außerhalb über den MS LDAP einspiele.

 

Diesen Foreneintrag habe ich gefunden, löst aber nicht das Problem:

http://www.mcseboard.de/active-directory-forum-79/passwort-aendern-ausschalten-167175.html

 

Ich danke euch jetzt schonmal für eure Mühe.

 

Gruß jga

Link zu diesem Kommentar

Ja wir verwenden Windows Server 2008 R2, die Domäne läuft allerdings im Windows Server 2003 Modus. :)

 

Bitte entschuldigt das ich mich jetzt erst melde, ich hatte etwas ausprobiert und habe im Attribut-Editor direkt in der Hauptdomäne geändert und mich dann selbst ausgesperrt. :confused:

 

Kannst du mir bitte näheres zu einer fein abgestimmten Kennwortrichtlinie sagen?

Link zu diesem Kommentar
  • 1 Monat später...

Hi ihr,

ich brauche nochmal eure Hilfe.

und zwar möchte ich das ganze jetzt mit der PowerShell lösen.

Nur meine PowerShell kennt den Befehl Add-ADPermission nicht.

Habe dazu gelesen, das ich irgenwas mit exchange installieren muss das in powershell das modul integriert wird. Was aber ****sinn ist da ich weder ein Exchange betreibe noch die Exchange Mangement tools installieren möchte.

 

Hätte ich dieses Modul, könnte ich einfach mit dem Befehl das gewünschte ausführen.

 

Add-ADPermission -Account SELF,Everyone -ExtendedRight "User-Change-Password" -Deny -ApplyTo ThisObjectOnly

 

Als weitere Möglichkeit würde ich dann gerne die DSACLS Befehle ausführen, was aber aus der PowerShell herraus nicht funktioniert. Gibt es eine Möglichkeit den Befehl aus der PowerShell auszuführen?

 

DSACLS "cn=PhilippFoeckeler,dc=selfadsi,dc=org" /D Everyone:CA;"Change Password"

DSACLS "cn=PhilippFoeckeler,dc=selfadsi,dc=org" /D SELF:CA;"Change Password"

 

Ich hoffe ihr könnt mir helfen.

 

Gruß jga

Link zu diesem Kommentar

Hallo,

 

warum klappt denn der Aufruf des externen DSACL-Kommandos bei Dir aus der Powershell heraus nicht? Kannst du direkt auf der Kommandozeile heraus die Rechte ändern? Welche Fehlermeldung kommt da?

 

Außerdem hätte ich hier eine Alternative, wie du in VBSCript die Berechtigung ändern kannst:

 

Const ADS_SD_CONTROL_SE_OWNER_DEFAULTED = &H1
Const ADS_SD_CONTROL_SE_GROUP_DEFAULTED = &H2
Const ADS_SD_CONTROL_SE_DACL_PRESENT = &H4
Const ADS_SD_CONTROL_SE_SACL_PRESENT = &H10
Const ADS_SD_CONTROL_SE_SACL_DEFAULTED = &H20

Const ADS_SD_REVISION_DS = 4

Const ADS_ACETYPE_ACCESS_ALLOWED = &H0
Const ADS_ACETYPE_ACCESS_DENIED  = &H1
Const ADS_ACETYPE_ACCESS_ALLOWED_OBJECT = &H5
Const ADS_ACETYPE_ACCESS_DENIED_OBJECT = &H6
Const ADS_FLAG_OBJECT_TYPE_PRESENT = &H1
Const ADS_FLAG_INHERITED_OBJECT_TYPE_PRESENT = &H2
Const ADS_ACEFLAG_CONTAINER_INHERIT_ACE = &H2
Const ADS_ACEFLAG_INHERITED_ACE  = &H10

Const ADS_RIGHT_DS_CONTROL_ACCESS = &H100

Const USER_CHANGE_PASSWORD = "{AB721A53-1E2F-11D0-9819-00AA0040529B}"

Const WKSID_SELF_SDDL = "S-1-5-10"
Const WKSID_SELF = "NT AUTHORITY\SELF"
Const WKSID_EVERYONE_SDDL = "S-1-1-0"
Const WKSID_EVERYONE =  "EVERYONE"

'__________________________________________________________________________________________________

'get existing user permission data
Set dso = GetObject("LDAP:")
Set user = dso.OpenDSObject("LDAP://yourserver/CN=test,OU=test,DC=EXAMPLE,DC=COM", "EXAMPLE\administrator", "Pa$$w0rd", 1)

Set userACL = user.get("nTSecurityDescriptor")
Set userDACL = userACL.DiscretionaryAcl
WScript.Echo user.distinguishedname & vbCrLf

'prepare new DACL to write for this user
Set newDAcl = CreateObject("AccessControlList")
newDAcl.AclRevision = ADS_SD_REVISION_DS
newDAcl.AceCount = 0

'check all existing dacl entries...
Set userAce = CreateObject("AccessControlEntry")  
For Each userAce In userDACL
'Debug: Output DACL entries
'WScript.Echo userAce.Trustee & ", " & userAce.AccessMask & ", " & userAce.AceType & ", " & userAce.AceFlags & ", " & userAce.Flags & ", " & userAce.ObjectType & ", " & userAce.InheritedObjectType

'build a new DACL with all the entries which are NOT related to "Change Password" (for Self / EveryOne)
If Not ((UCase(CStr(userAce.ObjectType)) = USER_CHANGE_PASSWORD) And ((UCase(CStr(userAce.Trustee)) = WKSID_SELF) Or ((UCase(CStr(userAce.Trustee)) = WKSID_EVERYONE)))) Then
	'only entries which are NOT inherited
	If ((userAce.AceFlags And ADS_ACEFLAG_INHERITED_ACE) = 0) Then
		newDAcl.AddAce userAce
	End If
End If
Next

'create new entry => deny "Change Password" for Everyone
Set newAce = CreateObject("AccessControlEntry")
newAce.Trustee    = WKSID_EVERYONE
newAce.AccessMask = ADS_RIGHT_DS_CONTROL_ACCESS
newAce.AceFlags   = 0
newAce.AceType    = ADS_ACETYPE_ACCESS_DENIED_OBJECT
newAce.Flags	  = ADS_FLAG_OBJECT_TYPE_PRESENT
newAce.ObjectType = USER_CHANGE_PASSWORD
newDAcl.AddAce newAce


'build new ACL to write for this user
Set newAcl = CreateObject("SecurityDescriptor")
newAcl.OwnerDefaulted = True
newAcl.GroupDefaulted = True
newAcl.SaclDefaulted = True
newAcl.DaclDefaulted = False
newAcl.Revision = 1
newAcl.Control = ADS_SD_CONTROL_SE_DACL_PRESENT Or ADS_SD_CONTROL_SE_SACL_PRESENT Or ADS_SD_CONTROL_SE_SACL_DEFAULTED Or ADS_SD_CONTROL_SE_OWNER_DEFAULTED Or ADS_SD_CONTROL_SE_GROUP_DEFAULTED
newAcl.DiscretionaryAcl = newDAcl

'write the ACL back to the user:
user.Put "ntSecurityDescriptor", newAcl
user.SetInfo

 

Sieht komplizierter aus als es ist :)

 

Gruß,

Philipp

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...