Alle vorhandenen Profile für Administratoren lesbar machen

  • #1
M

Martin von Wittich

Guest
So, ich mal wieder. Lang ist's her :>

Ich will knapp 200 Profile von einem Windows-Server auf einen Linux-Server kopieren; zweiterer soll ersteren in absehbarer Zeit ersetzen. Praktischerweise wurden die meisten Profile jedoch so angelegt, dass der Benutzer selber Besitzer des Profils ist, und die Admins nicht reinschauen dürfen. Mein erster Gedanke war: irgendwie das SeBackupPrivilege aktivieren, um sich an den blöden Permissions vorbeizumogeln. Ideal wäre es, einfach per cygwin+rsync+SeBackupPrivilege die Profile auf den Linux-Server zu übertragen. Leider reicht es wohl nicht, einfach nur dem Prozess irgendwie das SeBackupPrivilege zu geben und der Rest klappt dann schon, nein, so ziemlich jeder API-Aufruf, der von Cygwin durchgeführt wird, muss ebenfalls bescheid wissen, dass SeBackupPrivilege verwendet werden soll. Da ich jetzt gerade keine Lust habe, Cygwin neuzuschreiben, fällt mir nur noch eine Alternative ein...

Ein Script muss her, dass in einer for-Schleife alle Profilordner durchgeht, den Besitz aller Ordner übernimmt, die Administratoren und den Benutzer zur ACL hinzufügt, und dann den Besitz an den Benutzer wieder zurückgibt. Bevor ich das jetzt selberschreibe... hat sowas schon mal jemand gemacht? :)

Martin
 
  • #2
Hi,

wieso nicht per GPO die Option setzen, dass Administratoren den Benutzerprofilen hinzugefügt werden sollen?

Gruß
Sven
 
  • #3
Wird das dann noch nachträglich behoben, oder gilt das nur für neue Profile? Für neue Profile würde mir ja nichts mehr nützen, da der Server eh wegkommt.
 
  • #4
Hi,

sobald die GPO zieht - also sprich bei der nächsten Nutzeran- bzw. Abmeldung.
Daher _KANN_ es natürlich eine Weile dauern, bis sich alle User einmal an-und abgemeldet haben.

Gruß
Sven
 
  • #5
IMHO funktioniert das nicht nachträglich... Die Berechtigigung muss bereits bei der Erzeugung des Profils via GPO erteilt sein.
 
  • #6
Richtig, nachträglich funzt das nicht.
 
  • #7
Ich hab mal angefangen, ein Script zu schreiben, dass die Berechtigungen für einen einzelnen Ordner korrigiert.

Code:
@echo off

REM Besitz übernehmen
REM /a: Administratoren den Besitz geben
REM /r: rekursiv
REM /d J: Ja, ich bin sicher ;)
REM /f: Dateiname, %1: übergebener Benutzername
ECHO Uebernehme den Besitz von %1...
TAKEOWN /a /r /d J /f %1>nul

REM ACL durch Administratoren:Vollzugriff ersetzen
ECHO Setze Vollzugriff fuer Administratoren...
ICACLS %1 /GRANT:R Administratoren:F /T>nul

REM ACL-Eintrag fuer den Benutzer
ECHO Setze Vollzugriff fuer %1...
ICACLS %1 /GRANT:R %1:F /T>nul

REM Besitz zurueckgeben
ECHO Besitz zurueckgeben...
ICACLS %1 /setowner %1 /T

Theoretisch würde das wunderbar funktionieren, praktisch scheitert es aus einen mir völlig unerklärbaren Grund an icacls /setowner:

Code:
PS D:\Profile> icacls Albert.Einstein /setowner albert.einstein /t
Albert.Einstein: Zugriff verweigert
0 Dateien erfolgreich verarbeitet, bei 1 Dateien ist ein Verarbeitungsfehler aufgetreten.

Tja... was nützt mir die ach-so-tolle PowerShell, wenn der Rest des Systems scheiße ist? :/
Ich glaub, ich geh gleich ins Bett und träume von chown.

Martin
 
  • #8
Martin schrieb:
Tja... was nützt mir die ach-so-tolle PowerShell, wenn der Rest des Systems *Mist* ist? :/

Hm, denk ich mir, auch wenn du das alles in die PS eintippst, nutzt du ja nicht irgendwelche sonstige Funktionalität davon. Also, gesagt, getan:

Code:
$acl=get-acl albert.einstein
$act = New-Object system.security.principal.ntaccount(albert.einstein)
$acl.setowner($act)

PS D:\Profile> $acl | format-list
Path  : Microsoft.PowerShell.Core\FileSystem::D:\Profile\albert.einstein
Owner : GSS-OS\Albert.Einstein
Group : GSS-OS\Domänen-Benutzer
Access : VORDEFINIERT\Administratoren Allow FullControl
     GSS-OS\Albert.Einstein Allow FullControl
Audit :
Sddl  : O:S-1-5-21-1547161642-1450960922-725345543-2167G:DUD:PAI(A;OICI;FA;;;BA)(A;OICI;FA;;;S-1-5-21-1547161
     642-1450960922-725345543-2167)

PS D:\Profile> set-acl -aclobject $acl -path albert.einstein
Set-Acl : Die Sicherheits-ID darf nicht der Besitzer dieses Objekts sein.
At line:1 char:8
+ set-acl <<<< -aclobject $acl -path albert.einstein
 
  • #9
Ich hab noch keine Lösung, aber zumindest die Ursache gefunden:
Kurz zusammengefasst: auch wenn ich als Admin das Privileg zum Setzen von Besitzern zur Verfügung habe (SE_RESTORE_NAME), müssen die Anwendungen dieses Privileg auch aktivieren, ansonsten darf ich als Besitzer nur mich selbst setzen. Die grafische Oberfläche tut dies, icacls und die PowerShell offensichtlich nicht. Klasse.
 
  • #10
oh man, ich habs geschafft.

Code:
@echo off

ECHO Uebernehme den Besitz von %1...
TAKEOWN /a /r /d J /f %1>nul

ECHO Aktiviere Vererbung...
ICACLS %1 /RESET /T>NUL

ECHO Setze Vollzugriff fuer %1...
REM nicht rekursiv, da alle Objekte die Einstellungen dieses Ordner erben
ICACLS %1 /GRANT %1:(CI)(OI)(F)>nul

ECHO Besitz zurueckgeben...
SETACL -on D:\Profile\%1 -ot file -actn setowner -ownr n:%1;s:n -rec cont_obj -silent

Benötigt , scheint wohl die einzige Software zu sein, die SE_RESTORE_NAME nutzt. Dass die Powershell das nicht macht, betrachte ich als Bug.
 
Thema:

Alle vorhandenen Profile für Administratoren lesbar machen

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben