12223
Goto Top

Per Script Ordnerrechte ändern, etwas kniffelig

Hi Community,

kurz zur Ausgangssituation:

Eigene Dateien und Desktop sind umgebogen auf Netzwerkshares.

Server ist Windows Server 2003 R1, Client OS ist XP Pro SP2

Das Problem ist nun folgendes:

Wenn sich ein neuer User anmeldet, werden die Ordner auf den Shares erstellt, bekommen aber die Rechte vererbt. Und das sind nunmal nicht die Admins (Voll), User (Eingeschränkt), System (Voll) sondern Admins (Voll) DomUser (Eingeschränkt), System (Voll). Was nun zur folge hat, dass Alle Domänen Benutzer überall drauf dürfen, und das bei rund 700 Nutzern.

Meine Idee, ein Script was den Ordnername (=Nutzername) ausliest, die Rechte neu setzt und dann mit dem nächsten Ordner weiter macht. Ich hab zwar schon allerhand mit Batch gearbeitet, aber bin ein wenig eingerostet.

Jemand eine Idee oder ein paar Codeschnipsel?

Das zweite ist, ich würde das ganze dann gleich für neue User beim anmelden machen. Auch hier benötige ich ein paar Codeschnipsel.

Schon im Vorraus, seid Bedankt face-smile

Gruss

Sebastian

Content-Key: 143241

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

Printed on: April 23, 2024 at 08:04 o'clock

Member: Edi.Pfisterer
Edi.Pfisterer May 20, 2010 at 13:35:45 (UTC)
Goto Top
Hallo!
naja, so kniffelig ists dann wieder nicht face-wink

hier - aus Zeitmangel - ein Codeschnipsel, der zumindest mal die Ordnernamen liest:

Ordnerliste.vbs
Set WshShell = WScript.CreateObject("WScript.Shell")   
Set objFSO = CreateObject("Scripting.FileSystemObject")  
function ordner(pfad)

        Set objFolder = objFSO.GetFolder(pfad)
        Set colSubfolders = objFolder.Subfolders

        For Each objSubfolder in colSubfolders
        on Error resume next

                 vollername = objFSO.GetAbsolutePathName(objSubfolder)
                 WshShell.Run "cmd /c echo j|cacls " & vollername & " /G Administratoren:F ", 0, 1			    

         call ordner(ordnerneu)
        Next


end function

call ordner("C:\test")  
so in der Richtung... (komplett ungetetestet wegen Zeitmangels...)
cacls /? bringt die nötigen Flags, ob gelesen oder geschrieben oder whatever werden soll..

gutes gelingen
lg
Mitglied: 12223
12223 May 20, 2010 at 15:06:09 (UTC)
Goto Top
Hi, war auch nicht untätig, hab eigentlich alles zusammen, nur mag mein cacls.exe die Domänen-Benutzer nicht entfernen ... hab so ziemlich alle Deutschen und Englischen begriffe durch, jemand eine Idee?

rem config
set title=Rechteaenderungsprogramm v0.1a

@echo off

title=%title%
CLS


:lesen
echo Lese die Nutzer aus!

echo ###>user.txt
dir /B /O:N /A:D>>user.txt

:auswertung
title=%title%
cls
FOR /f "delims=" %%n in (user.txt) do set curdir=%%n

:rechte setzen
echo.
echo.
echo Setze Rechte fuer Verzeichnis: %curdir%
echo. 
echo. 
cacls %curdir% /T /E /C /G "Domänen-Benutzer":R>NUL
echo Domaenen-Benutzer sind entfernt worden aus ACL %curdir%
echo.
cacls %curdir% /T /E /C /G %curdir%:C>NUL
echo Nutzer %curdir% ist in hinzugefuegt worden in ACL %curdir%


findstr /v /c:"%curdir%" user.txt>user1.txt
del user.txt
rename user1.txt user.txt
echo.
echo. 
echo Taste druecken fuer naechsten Ordner.
echo.
pause>NUL

if %curdir%==### (goto :end)
goto :auswertung  

:end

title=%title%
CLS
echo.
echo Loesche temporaer Dateien
del user.txt
echo.
echo.
echo .......................................
echo.
echo Ende des Programms!
echo.
echo.
echo Zum Beenden beliebige Taste druecken!
pause>NUL
Member: bastla
bastla May 20, 2010 at 16:17:11 (UTC)
Goto Top
Hallo Saint2000!
hab so ziemlich alle Deutschen und Englischen begriffe durch
Dom„nen-Benutzer
hattest Du auch schon?

Grüße
bastla
Member: Edi.Pfisterer
Edi.Pfisterer May 20, 2010 at 19:44:31 (UTC)
Goto Top
Hallo!
hab mir jetzt - in aller Ruhe - mal Dein Problem durchgelesen und glaube zu erkenne, dass dieses Skript zwar interessant, aber dennoch - bei richtiger Verwendung der NTFS-Berechtigungen - nicht verwendet werden muss.

Dein Problem beruht ja auf der Vererbung der Berechtigungen des Grundordners Deines Shares.

Und genau hier ist anzusetzen:
Vererbung abdrehen und fertig. Weil: Vollzugriff bekommt der jeweilige User ohnehin auf seinen Ordner ohne Dein Zutun beim Erstellen des Accounts im AD.

Wie ist diese Vererbung abzudrehen?
Sicherheitseinstellungen / Erweitert / Bearbeiten (der Domänen-Benutzer) --> Nur dieser Ordner + Lesen

Fertig!
(Wenns nur per Skript ginge, dann würde es Dein Skript längstens in Millionenfacher Ausfertigung geben....)

Gratuliere trotzdem zu Deinem Rechteaenderungsprogramm v0.1a, hat Dich sicher um einige Erkenntnisse reicher werden lassen...
(und wenn Du die 700 User schon angelegt hast, kannst Du es für diese auch gut gebrauchen face-wink
In Zukunft sollte es dann ohne Skript laufen...)

lg
Edi
Mitglied: 12223
12223 May 21, 2010 at 06:16:13 (UTC)
Goto Top
Naja,

das Problem daran ist aber, dass die Domäne hier ein wenig ... mmh .. verbogen ist. Heisst: Neuer User wird über ein SUN Ldap ins AD geschossen, Nutzer meldet sich an und dann werden seine Ordner (Desktop, EigeneDateien und Profil) angelegt.

Das heisst, der Grundordner (z.B. desktop) benötigt aber die DomainUsers, weil sonst nicht im Kontext des Users sein Ordner darunter angelegt werden kann.

Sonst wärs ja einfach *G*
Mitglied: 12223
12223 May 21, 2010 at 14:25:20 (UTC)
Goto Top
Hallo ich habe das Problem gelöst.

Mithilfe von Batch, CACLS und fileACL (http://www.gbordier.com/gbtools/fileacl.asp)

REM Programm aendert Rechte aus Ordner in dem die Batch liegt!
REM Alle Ordner werden ausgelesen und in die Datei user.txt geschrieben.
REM Anhand dieser Dateien werden auf jeden Ordner die Rechte des Ordnernamens 
REM gesetzt.
REM
REM History:
REM v0.1a - 20.05.2010 - 
REM v0.2a - 21.06.2010 - 



rem config
set title=Rechte Aenderungsprogramm v0.2a

@echo off

title=%title%
CLS


:lesen
echo Lese die Nutzer aus!

echo ###>user.txt
dir /B /O:N /A:D>>user.txt

:auswertung
title=%title%
cls
FOR /f "delims=" %%n in (user.txt) do set curdir=%%n
if %curdir%==### (goto :end)

:rechte setzen

echo.
echo.
echo Setze Rechte fuer Verzeichnis: %curdir%
echo. 
echo.
fileacl.exe %curdir% /R Dom„nen-Benutzer /protect /files>NUL
echo. 
echo Domaenen-Benutzer sind entfernt worden aus ACL %curdir%
echo.
echo Vererbung ist aufgehoben worden fuer %curdir%
echo.
cacls %curdir% /T /E /C /G %curdir%:C>NUL
echo Nutzer %curdir% ist in hinzugefuegt worden in ACL %curdir%


findstr /v /c:"%curdir%" user.txt>user1.txt
del user.txt
rename user1.txt user.txt
echo.
echo. 
echo Taste druecken fuer naechsten Ordner.
echo.
pause>NUL

if %curdir%==### (goto :end)
goto :auswertung  

:end

title=%title%
CLS
echo.
echo Loesche temporaer Dateien
del user.txt
echo.
echo.
echo .......................................
echo.
echo Ende des Programms!
echo.
echo.
echo Zum Beenden beliebige Taste druecken!
pause>NUL
Ich liebe Batch *g*

Für die Nachwelt face-smile

Danke für eure Hilfen!

@bastla, du siehst, auch du wurdest gewürdigt *g*