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-Key: 275056

Url: https://administrator.de/contentid/275056

Printed on: April 26, 2024 at 02:04 o'clock

Member: DerWoWusste
DerWoWusste Jun 19, 2015 at 15:30:22 (UTC)
Goto Top
Hi.

Wenn ich's recht erinnere, geht das mit subinacl recht einfach.
Mitglied: 114757
114757 Jun 19, 2015 updated at 15:37:34 (UTC)
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
Member: tribas222
tribas222 Jun 19, 2015 at 15:49:34 (UTC)
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ß
Mitglied: 114757
Solution 114757 Jun 19, 2015 updated at 16:47:25 (UTC)
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 ...
Member: tribas222
tribas222 Jun 19, 2015 at 19:02:52 (UTC)
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
Mitglied: 114757
Solution 114757 Jun 19, 2015 updated at 21:02:31 (UTC)
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 ...