tribas222
Goto Top

Regini - Vererbung von Berechtigungen

Hallo liebe Helfer face-smile

Ich frage um Hilfe bei folgender Problematik: Ich möchte an PC's beim installieren ein Skript ausführen, welche Berechtigungen in der Registry erteilt.
Folgendes habe ich mir bereits zusammengeschustert, und es funktioniert face-smile

Es ist eigentlich nur ein kleines Tool (VBS) welches Regini benutzt und ein paar Berechtigungen setzt.


set oFSO = CreateObject("Scripting.FileSystemObject")
strFileName = oFSO.GetTempName
set oFile = oFSO.CreateTextFile(strFileName)
oFile.WriteLine "\registry\machine\software\wow6432node\Ubisoft [1 5 7 17]"
oFile.Close

' Change registry permissions with regini.exe
'
set oShell = CreateObject("WScript.Shell")
oShell.Run "regini " & strFileName, 8, true

' Delete temp file
'
oFSO.DeleteFile strFileName

WScript.Echo "Done"


Jetzt ist leider die Lage, dass diese Berechtigungen nicht vererbt werden.
Wenn man es händisch macht, werden diese vererbt, und genau das möchte ich jetzt auch per Skript erreichen.

Weiß jemand was ich bei meinem Tool verändern muss, damit die Vererbung aktiviert wird?


Im Endeffekt rufe ich nur eine .ini Datei mit folgendem Inhalt auf
\registry\machine\software\wow6432node\Ubisoft [1 5 7 17]


In der Command Line durch REGINI "Pfad" (zur .ini Datei)


Gibt es vielleicht eine Alternative für mich anstatt REGINI?

Und ich möchte das wirklich per Skript lösen ;)
Mir ist klar dass das anders besser geht.

Links zur Hilfestellung sind ebenfalls sehr willkommen und Danke bereits im Voraus für eure Hilfe.


Gruß

Content-ID: 275056

Url: https://administrator.de/forum/regini-vererbung-von-berechtigungen-275056.html

Ausgedruckt am: 11.04.2025 um 10:04 Uhr

DerWoWusste
DerWoWusste 19.06.2015 um 17:30:22 Uhr
Goto Top
Hi.

Wenn ich's recht erinnere, geht das mit subinacl recht einfach.
114757
114757 19.06.2015 aktualisiert um 17:37:34 Uhr
Goto Top
Moin,
machs doch mit Powershell, hier ein Beispiel für deinen Key in HKLM und deinen angegebenen Berechtigungen:
$key = (get-item "HKLM:\software\wow6432node\Ubisoft").Name.replace("HKEY_LOCAL_MACHINE\","")  
$regkey = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey($key,[Microsoft.Win32.RegistryKeyPermissionCheck]::ReadWriteSubTree)
$acl = $regkey.GetAccessControl()
# Administrators FullControl
$rule = new-object System.Security.AccessControl.RegistryAccessRule((new-object System.Security.Principal.SecurityIdentifier('S-1-5-32-544')),"FullControl","ContainerInherit,ObjectInherit","None","Allow")  
$acl.SetAccessRule($rule)
# Creator FullControl
$rule = new-object System.Security.AccessControl.RegistryAccessRule((new-object System.Security.Principal.SecurityIdentifier('S-1-3-0')),"FullControl","ContainerInherit,ObjectInherit","None","Allow")  
$acl.SetAccessRule($rule)
# World FullControl
$rule = new-object System.Security.AccessControl.RegistryAccessRule((new-object System.Security.Principal.SecurityIdentifier('S-1-1-0')),"FullControl","ContainerInherit,ObjectInherit","None","Allow")  
$acl.SetAccessRule($rule)
# System FullControl
$rule = new-object System.Security.AccessControl.RegistryAccessRule((new-object System.Security.Principal.SecurityIdentifier('S-1-5-18')),"FullControl","ContainerInherit,ObjectInherit","None","Allow")  
$acl.SetAccessRule($rule)

#Rules speichern
$regkey.SetAccessControl($acl)
$regkey.close()
Gruß jodel32
tribas222
tribas222 19.06.2015 um 17:49:34 Uhr
Goto Top
Hallo, die Lösung mit Powershell gefällt mir sehr. Danke dir face-smile

Wofür steht "('S-1-5-32-544')" sowie ""None","Allow"" in diesem Fall?

Also, worauf bezieht sich das 'None' & 'allow' und wofür stehen die oben genannten Werte?

Gruß
114757
Lösung 114757 19.06.2015 aktualisiert um 18:47:25 Uhr
Goto Top
Zitat von @tribas222:
Wofür steht "('S-1-5-32-544')"
Das ist die WellKnown SID der Administratoren:
Die Liste der SIDs findest du hier: https://support.microsoft.com/en-us/kb/243330/de
sowie ""None","Allow"" in diesem Fall?
Das sind die Propagation Flags und der AccessType und bestimmen wie vererbt wird
https://msdn.microsoft.com/de-de/library/ms147899%28v=vs.110%29.aspx
In diesem Fall wollen wir ja an alles vererben, deshalb muss das auf "None" stehen.
http://stackoverflow.com/questions/3282656/setting-inheritance-and-prop ...
tribas222
tribas222 19.06.2015 um 21:02:52 Uhr
Goto Top
Habe ein wenig damit gekämpft, und es lässt sich nur auf x86 Basis ausführen.
Die Fehlermeldungen waren aber wenigstens aufschlussreich face-smile


Noch eine klitzekleine Anschlussfrage ;__;

Nehmen wir an ich möchte gleich auf mehrere Ordner Berechtigungen vergeben mit meinem Skript, inwiefern muss ich meinen
Code abändern, dass das Skript noch läuft?

Sprich Zugriff auf \ODBC und noch ein paar mehr, die aber keine Unterordner sind.

Ich denke ich muss einfach nur die Variabeln verändern .. weiß aber noch nicht wie, powershell programmieren werde ich mir wohl mal selbst beibringen müssen, das zeigt einem niemand face-sad Hauptsache man lernt Java in der Schule und ja nichts sinnvolles.... ;) ..


Kannst du mir noch einmal auf die Sprünge helfen, jodel?

Gruß face-smile
114757
Lösung 114757 19.06.2015 aktualisiert um 23:02:31 Uhr
Goto Top
Du schreibst deine Pfade in ein Array, in iterierst dann einfach über dieses Array, ganz einfach wie in jeder Programmiersprache:
$keys = @(
'HKLM:\software\key1',  
'HKLM:\software\key2',  
'HKLM:\software\key3'  
)

$keys | %{
$acl = Get-ACL $_
# Administrators FullControl
$rule = new-object System.Security.AccessControl.RegistryAccessRule((new-object System.Security.Principal.SecurityIdentifier('S-1-5-32-544')),"FullControl","ContainerInherit,ObjectInherit","None","Allow")  
$acl.SetAccessRule($rule)
# Creator FullControl
$rule = new-object System.Security.AccessControl.RegistryAccessRule((new-object System.Security.Principal.SecurityIdentifier('S-1-3-0')),"FullControl","ContainerInherit,ObjectInherit","None","Allow")  
$acl.SetAccessRule($rule)
# World FullControl
$rule = new-object System.Security.AccessControl.RegistryAccessRule((new-object System.Security.Principal.SecurityIdentifier('S-1-1-0')),"FullControl","ContainerInherit,ObjectInherit","None","Allow")  
$acl.SetAccessRule($rule)
# System FullControl
$rule = new-object System.Security.AccessControl.RegistryAccessRule((new-object System.Security.Principal.SecurityIdentifier('S-1-5-18')),"FullControl","ContainerInherit,ObjectInherit","None","Allow")  
$acl.SetAccessRule($rule)

Set-ACL $_ $acl
}

Und das mit 32/64Bit hat mit dem Registry Redirector zu tun wie beim Ordner System32 und Syswow64 unter c:\windows.
Das verhält sich genauso in der Registry mit dem Software-Knoten wenn man mit 32-Bit dort reinschreibt landen die Zugriffe im Wow6432node Ordner.
https://msdn.microsoft.com/en-us/library/windows/desktop/ms724072(v=vs.8 ...