Toon posts:

[XP/2003] Set File Permissions Using A Script

Pagina: 1
Acties:
  • 897 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Wat ik wil is via een CMD rechten zetten op een bestand. Opzicht niet zo 'moeilijk' gezien er gebruik gemaakt kan worden van XCACLS en CACLS. Echter zit ik met het 'probleem' dat er meerdere besturingssystemen zijn met verschillende talen.

Rechten moeten aangepast worden voor Users of voor Gebruikers.. Wat ik nu gadaan hebt is dit:

REM Set File/Folder Permissions

IF EXIST USER Gebruikers GOTO NL
IF EXIST USER Users GOTO ENG
GOTO END

:NL
Xcacls.exe "C:\Test" /T /G /C Gebruikers:F
GOTO END

:ENG
Xcacls.exe "C:\Test" /T /G /C Users:F

:END


Het probleem is dat IF EXIST USER Gebruikers niet werkt.. IF EXIST kan alleen gebruikt worden icm files.. Hoe zorg ik ervoor dat als de group gebruikers bestaat hij de ene regel moet pakken en als users bestaat de andere regel ?

Het probleem is dat het via een systeem word uitgerold en het script aangeeft dat het niet gelukt is omdat OF users OF gebruikers niet bestaat... Anders had ik het gedeelte van IF EXIST weg kunnen halen en dan runnen.. Helaas dus niet mogelijk..

  • mbrouwer
  • Registratie: September 2001
  • Laatst online: 09-03 08:31
Je zou eens kunnen googelen naar SetACL.exe daarmee kun je ACL zetten op basis van het SID. XCACLS.vbs kan dit trouwens ook, misschien is dit zelfs een betere optie omdat de parameters van SetACL.exe nogal dubieus in elkaar zitten.

"And As A Finishing Touch... God Created The Dutch"


Verwijderd

Topicstarter
mbrouwer schreef op vrijdag 15 september 2006 @ 08:15:
Je zou eens kunnen googelen naar SetACL.exe daarmee kun je ACL zetten op basis van het SID. XCACLS.vbs kan dit trouwens ook, misschien is dit zelfs een betere optie omdat de parameters van SetACL.exe nogal dubieus in elkaar zitten.
De rechten zetten is mijn probleem niet helaas.. Als ik b.v. 2 scripts heb:

Nederlands Rechten.cmd
Engels Rechten.cmd

Hoe run ik de 'juiste' cmd als een bepaalde groep bestaat ? Als de group users bestaat moet die Engels Rechten.cmd uitvoeren en voor Gebruikers andersom..

  • assembler
  • Registratie: Mei 2004
  • Niet online
Ik kom dit: http://www.freevbcode.com/ShowCode.asp?ID=4891 wel tegen maar ik weet niet of dat precies is wat je zoekt. Misschien staat er iets bruikbaars in.

  • Krypt
  • Registratie: April 2000
  • Laatst online: 12-02 20:18
Je kunt een FIND uitvoeren op NET LOCALGROUPS. Met een errorlevel kun je afvangen of "Gebruikers" gevonden is, zoja de "Nederlands Rechten.cmd" uitvoeren.

Maar waarom gebruik je inderdaad geen SIDs zoals mbrouwer aangeeft. XCACLS ondersteund die ook.. Weet niet of XCACLS.EXE het ondersteund maar de laatste XCACLS.VBS wel iig..

Well-known security identifiers in Windows operating systems
Daar heb je de lijst met veel voorkomende SIDs; S-1-5-32-545 is Users/Gebruikers

Pvouput live


  • shaowoo
  • Registratie: Mei 2005
  • Laatst online: 12-03 20:50
hmm..

je kan hetvolgende proberen:
net group gebruikers /domain

output hievan afvangen en kijken of de melding:could not be found staat.

Let wel , als je veel gebruikers hebt dan kan zo'n script aantal seconden duren..
Zo ja dan moet je gebruikers gebruiken anders users, ruwe code:.
FOR /F "tokens=*" %%i IN ('%windir%\system32\net group gebruikers /domain') do ( set tekst=%%i )
:: echo %tekst%

if %tekst% == <tekst> set taal=NL

anders zou ik toch vbs gebruiken..
suc6

IT Freelancer since 2005, and still loving it.


  • mbrouwer
  • Registratie: September 2001
  • Laatst online: 09-03 08:31
Ja maar de Users/Gebruikers is net als de Everyone/Iedereen, Administrarors/Beheerders (en andere) een speciale groep en zal op ieder systeem dezelfde SID hebben, een zogenaamd Well-Known SID: http://support.microsoft.com/kb/243330

Ik weet niet of dit een batch MOET zijn of dat het ook met bijvoorbeeld KiX of VBS mag, maar daar kun je naar ik weet iets makkelijker kijken of een groep bestaat. Binden en error afvangen.

"And As A Finishing Touch... God Created The Dutch"


Verwijderd

Topicstarter
mbrouwer schreef op vrijdag 15 september 2006 @ 08:38:
Ja maar de Users/Gebruikers is net als de Everyone/Iedereen, Administrarors/Beheerders (en andere) een speciale groep en zal op ieder systeem dezelfde SID hebben, een zogenaamd Well-Known SID: http://support.microsoft.com/kb/243330

Ik weet niet of dit een batch MOET zijn of dat het ook met bijvoorbeeld KiX of VBS mag, maar daar kun je naar ik weet iets makkelijker kijken of een groep bestaat. Binden en error afvangen.
Bedankt allemaal voor de snelle reacties..

Het MOET geen batch zijn, maar als ik de SID moet afvangen dan moet ik wel naar VBS..

  • mbrouwer
  • Registratie: September 2001
  • Laatst online: 09-03 08:31
Je kunt de XCACLS.VBS natuurlijk ook afroepen vanuit je batch. Vervang in je eigen script Xcacls.exe door cscript Xcacls.vbs (met de aangepaste parameters natuurlijk) en je hebt je script. Het aanpassen van de XCACLS.vbs lijkt me sowieso niet zo'n goed plan.

"And As A Finishing Touch... God Created The Dutch"


Verwijderd

Topicstarter
mbrouwer schreef op vrijdag 15 september 2006 @ 09:29:
Je kunt de XCACLS.VBS natuurlijk ook afroepen vanuit je batch. Vervang in je eigen script Xcacls.exe door cscript Xcacls.vbs (met de aangepaste parameters natuurlijk) en je hebt je script. Het aanpassen van de XCACLS.vbs lijkt me sowieso niet zo'n goed plan.
Helaas is dat dus juist het probleem.. Dat IF EXIST USER werkt niet.. Anders had de CMD met cacls ook gewerkt..

  • Krypt
  • Registratie: April 2000
  • Laatst online: 12-02 20:18
Als je XCACLS.VBS gebruikt hoef je helemaal geen IF EXIST USER te gebruiken.

Je zet gewoon de rechten op een SID. Voor Windows XP NL is de SID voor Gebruikers exact hetzelfde als de SID voor USERS in Windows XP EN (en elk willekeurige taal en ook voor WinNT, Win2k & Win2k3)... Dat is juist het mooie van SIDs

"CSCRIPT.EXE Xcacls.vbs "C:\Test" /T /G SID#S-1-5-32-545:F" zou dan moeten werken..

Wat die '/C' van jou doet snap ik niet echt..

[ Voor 30% gewijzigd door Krypt op 15-09-2006 10:18 ]

Pvouput live


Verwijderd

Topicstarter
Krypt schreef op vrijdag 15 september 2006 @ 10:14:
Als je XCACLS.VBS gebruikt hoef je helemaal geen IF EXIST USER te gebruiken.

Je zet gewoon de rechten op een SID. Voor Windows XP NL is de SID voor Gebruikers exact hetzelfde als de SID voor USERS in Windows XP EN (en elk willekeurige taal en ook voor WinNT, Win2k & Win2k3)... Dat is juist het mooie van SIDs

"CSCRIPT.EXE Xcacls.vbs "C:\Test" /T /G SID#S-1-5-32-545:F" zou dan moeten werken..

Wat die '/C' van jou doet snap ik niet echt..
Ik wil jullie allen danken voor de snelle reply's.. Het werkt..

Hoe Krypt het aangeeft werkt inderdaad ook.. Ik heb het nu zo gedaan:

REM Set File/Folder Permissions

NET LOCALGROUP Gebruikers
IF ERRORLEVEL=1 GOTO ENG

:NL
Cacls.exe "C:\TestingFolder" /T /E /P Gebruikers:F
GOTO END

:ENG
Cacls.exe "C:\TestingFolder" /T /E /P Users:F

:END

  • Krypt
  • Registratie: April 2000
  • Laatst online: 12-02 20:18
Het werkt wel, maar erg netjes vind ik het niet..

Je gaat nu op een error af. Als NET een error geeft dan ga je er van uit dat het engels is..

Vraagje: Waarom gebruik je geen SIDs?

Pvouput live


Verwijderd

Topicstarter
Krypt schreef op vrijdag 15 september 2006 @ 11:22:
Het werkt wel, maar erg netjes vind ik het niet..

Je gaat nu op een error af. Als NET een error geeft dan ga je er van uit dat het engels is..

Vraagje: Waarom gebruik je geen SIDs?
Dank je man.. Waardeer dit echt.. Ben er best lang mee bezig geweest namelijk.. Heb het net een uur getest en alles werkt via de SID.. Mijn leidinggevende is het nu aan het testen en gooit het daarna in productie..

Thanks allemaal...

  • Krypt
  • Registratie: April 2000
  • Laatst online: 12-02 20:18
Stiekem vraag ik me nu wel af wat je nu in die batchfile hebt staan..

Pvouput live


Verwijderd

Topicstarter
Krypt schreef op vrijdag 15 september 2006 @ 12:56:
Stiekem vraag ik me nu wel af wat je nu in die batchfile hebt staan..
cscript xcacls.vbs "C:\Test" /T /G SID#S-1-5-32-545:R"

Heb nu dit staan.. Wat ik wel heb is als je gebruik maakt van /E wat hetvolgende betekent "Edit ACL instead of replacing it." haald die alle andere groepen weg..

Als ik gebruik maak van /G dan zet die netjes een vinkje bij Read, maar laat die de rest staan die de folder heeft ge-inherit.. De inherit permissions moeten voor alleen die user verwijderd worden zodat de gebruiker alleen read rechten heeft en alle andere groepen moet blijven staan..

Met xcacls doet die het wel goed:

xcacls "C:\Test" /T /E /P Gebruikers:R

Maar zelfde commando met xcacls.vbs laat die de inherited rechten staan..

[ Voor 14% gewijzigd door Verwijderd op 15-09-2006 14:29 ]


Verwijderd

Topicstarter
Het lukt nog niet helemaal helaas..

Als ik rechten zet via het script zet die 2x gebruikers neer omdat 1x de group gebruikers de rechten inherit van de root van C.. Als ik gebruik maak van /I COPY dan haald die alsnog alle groepen weg..

cscript xcacls.vbs C:\Test /T /E /P SID#S-1-5-32-545:R /I COPY

Als ik eerst met de hand het vinkje weg haal bij "Inherit from parent the permission entries that apply to the child object" en dan de rechten geef doet die het prima..
Pagina: 1