Windows - Criar pasta do usuário com direitos específicos de NTFS usando o CMD?

1

Situação:

Estou fazendo atualmente uma imagem padrão do Windows para nossos novos PCs. Estes novos sistemas vêm com um SSD (250GB) + HDD (500GB). Meu objetivo é ter o perfil de usuário principal ainda no SDD, mas redirecionar parte da pasta do usuário (Documents, Desktop, Movies, Music, Downloads) para o HDD. Então, no final, o SSD é usado apenas para configurações e coisas assim e o disco rígido para a maioria dos arquivos de usuários.

Meu método:

Criar GPO local com script de logon para todos os não administradores:

check if user folder (%USERNAME%) exists in d:\Users\ if not create the necessary folder structure and deleted the now unnecessary folders in c:\Users\%username% (no duplicates)

E, claro, o registro muda para o redirecionamento de pastas.

(não temos um domínio, portanto, preciso configurá-lo apenas por meio de GPOs locais)

Isso parece funcionar muito bem. O único problema é que, se houver mais de um usuário usando o sistema, eles poderão acessar a pasta de dados de outros usuários no HDD sem problemas.

Minha pergunta: É possível criar uma pasta em um script em lote com direitos específicos do NTFS, de modo que somente o proprietário / criador (não administrador) e os administradores possam acessá-lo. outros usuários normais serão bloqueados.

    
por Sonic 16.06.2015 / 13:35

2 respostas

1

O proprietário de um arquivo / pasta sempre pode alterar a segurança (mesmo que a segurança o proíba). E da mesma forma, um administrador sempre pode apropriar-se de um objeto (mesmo que a segurança o proíba).

Se um administrador criar algo, ele pertence ao grupo do administrador e não ao indivíduo.

A segurança é normalmente inerida da pasta pai.

Existe um usuário virtual de segurança chamado Proprietário / Criador - que se refere a qualquer usuário que seja o proprietário.

Então, você precisa configurar a pasta pai corretamente e, em seguida, tudo o mais deve ser automático.

Lembre-se de que a pasta é criada automaticamente, no primeiro logon e sempre no primeiro uso.

Pastas especiais do Moreon

Clique em Iniciar - Todos os Programas - Acessórios - Executar (ou pressione Winkey + R). Digite

sendto

Pode-se usar o protocolo shell: para abrir e criar pastas especiais.

Para abrir Documentos e criar, se não existir

Clique em Iniciar - Todos os Programas - Acessórios - Executar (ou pressione Winkey + R). Digite

shell:personal

Para obter uma lista de pastas que podem ser usadas com o shell: protocol

Iniciar - Todos os Programas - Acessórios - Clique com o botão direito do mouse em Prompt de Comando e escolha Executar como administrador. Digite (ou copie e cole com o botão direito do mouse na janela do prompt de comando e escolha Colar).

reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\FolderDescriptions" /v Name /s |findstr /c:Name|sort /+23

Que no Vista retorna

Name    REG_SZ    AddNewProgramsFolder
Name    REG_SZ    Administrative Tools
Name    REG_SZ    AppData
Name    REG_SZ    AppUpdatesFolder
Name    REG_SZ    Cache
Name    REG_SZ    CD Burning
Name    REG_SZ    ChangeRemoveProgramsFolder
Name    REG_SZ    Common Administrative Tools
Name    REG_SZ    Common AppData
Name    REG_SZ    Common Desktop
Name    REG_SZ    Common Documents
Name    REG_SZ    Common Programs
Name    REG_SZ    Common Start Menu
Name    REG_SZ    Common Startup
Name    REG_SZ    Common Templates
Name    REG_SZ    CommonDownloads
Name    REG_SZ    CommonMusic
Name    REG_SZ    CommonPictures
Name    REG_SZ    CommonVideo
Name    REG_SZ    ConflictFolder
Name    REG_SZ    ConnectionsFolder
Name    REG_SZ    Contacts
Name    REG_SZ    ControlPanelFolder
Name    REG_SZ    Cookies
Name    REG_SZ    CredentialManager
Name    REG_SZ    CryptoKeys
Name    REG_SZ    CSCFolder
Name    REG_SZ    Default Gadgets
Name    REG_SZ    Desktop
Name    REG_SZ    Downloads
Name    REG_SZ    DpapiKeys
Name    REG_SZ    Favorites
Name    REG_SZ    Fonts
Name    REG_SZ    Gadgets
Name    REG_SZ    Games
Name    REG_SZ    GameTasks
Name    REG_SZ    History
Name    REG_SZ    InternetFolder
Name    REG_SZ    Links
Name    REG_SZ    Local AppData
Name    REG_SZ    LocalAppDataLow
Name    REG_SZ    LocalizedResourcesDir
Name    REG_SZ    MAPIFolder
Name    REG_SZ    My Music
Name    REG_SZ    My Pictures
Name    REG_SZ    My Video
Name    REG_SZ    MyComputerFolder
Name    REG_SZ    NetHood
Name    REG_SZ    NetworkPlacesFolder
Name    REG_SZ    OEM Links
Name    REG_SZ    Original Images
Name    REG_SZ    Personal
Name    REG_SZ    PhotoAlbums
Name    REG_SZ    Playlists
Name    REG_SZ    PrintersFolder
Name    REG_SZ    PrintHood
Name    REG_SZ    Profile
Name    REG_SZ    ProgramFiles
Name    REG_SZ    ProgramFilesCommon
Name    REG_SZ    ProgramFilesCommonX86
Name    REG_SZ    ProgramFilesX86
Name    REG_SZ    Programs
Name    REG_SZ    Public
Name    REG_SZ    PublicGameTasks
Name    REG_SZ    Quick Launch
Name    REG_SZ    Recent
Name    REG_SZ    RecycleBinFolder
Name    REG_SZ    ResourceDir
Name    REG_SZ    SampleMusic
Name    REG_SZ    SamplePictures
Name    REG_SZ    SamplePlaylists
Name    REG_SZ    SampleVideos
Name    REG_SZ    SavedGames
Name    REG_SZ    Searches
Name    REG_SZ    SearchHomeFolder
Name    REG_SZ    SendTo
Name    REG_SZ    Start Menu
Name    REG_SZ    Startup
Name    REG_SZ    SyncCenterFolder
Name    REG_SZ    SyncResultsFolder
Name    REG_SZ    SyncSetupFolder
Name    REG_SZ    System
Name    REG_SZ    SystemCertificates
Name    REG_SZ    SystemX86
Name    REG_SZ    Templates
Name    REG_SZ    TreePropertiesFolder
Name    REG_SZ    UserProfiles
Name    REG_SZ    UsersFilesFolder
Name    REG_SZ    Windows

Aqui está outro jeito. O ponto deste post é que as pastas têm breves descrições.

De acordo com a documentação de programação, a execução de um comando paticular para abrir uma pasta especial criará essa pasta se ela não existir.

Se vDir for definido como um dos ShellSpecialFolderConstants e a pasta especial não existir, essa função criará a pasta.

Crie as duas linhas seguintes no bloco de notas. Substitua 0 após abrir com o número da lista abaixo da pasta que você deseja abrir e criar, se ele não existir. Pastas como Documentos e Vídeos possuem duas pastas, uma pessoal e outra comum a todos os usuários.

set objShell = CreateObject("Shell.Application")
objShell.Open(0)

Veja um exemplo para as duas pastas de vídeos.

Este pequeno programa tenta abrir sua pasta de vídeo pessoal e a pasta de vídeo comum.

Copie as três linhas abaixo no bloco de notas. Salve-o como "OpenAndCreateVideoFolders.vbs" (as aspas são parte do que você precisa digitar para o nome e desaparecerá assim que for salvo)

set objShell = CreateObject("Shell.Application")
objShell.Open(13)
objShell.Open(55)

Clique duas vezes no pequeno programa que acabou de escrever.

Lista de pastas especiais

CSIDL_DESKTOP 0 Desktop 
CSIDL_INTERNET 1 Internet Explorer (icon on desktop) 
CSIDL_PROGRAMS 2 Start Menu\Programs 
CSIDL_CONTROLS 3 My Computer\Control Panel 
CSIDL_PRINTERS 4 My Computer\Printers 
CSIDL_PERSONAL 5 My Documents 
CSIDL_FAVORITES 6 \Favorites 
CSIDL_STARTUP 7 Start Menu\Programs\Startup 
CSIDL_RECENT 8 \Recent 
CSIDL_SENDTO 9 \SendTo 
CSIDL_BITBUCKET 10 \Recycle Bin 
CSIDL_STARTMENU 11 \Start Menu 
CSIDL_MYDOCUMENTS 5 Personal was just a silly name for My Documents 
CSIDL_MYMUSIC 12 "My Music" folder 
CSIDL_MYVIDEO 13 "My Videos" folder 
CSIDL_DESKTOPDIRECTORY 16 \Desktop 
CSIDL_DRIVES 17 My Computer 
CSIDL_NETWORK 18 Network Neighborhood (My Network Places) 
CSIDL_NETHOOD 19 \nethood 
CSIDL_FONTS 20 windows\fonts 
CSIDL_TEMPLATES 21 
CSIDL_COMMON_STARTMENU 22 All Users\Start Menu 
CSIDL_COMMON_PROGRAMS 23 All Users\Start Menu\Programs 
CSIDL_COMMON_STARTUP 24 All Users\Startup 
CSIDL_COMMON_DESKTOPDIRECTORY 25 All Users\Desktop 
CSIDL_APPDATA 26 \Application Data 
CSIDL_PRINTHOOD 27 \PrintHood 
CSIDL_LOCAL_APPDATA 28 \Local Settings\Applicaiton Data (non roaming) 
CSIDL_ALTSTARTUP 29 non localized startup 
CSIDL_COMMON_ALTSTARTUP 30 non localized common startup 
CSIDL_COMMON_FAVORITES 31 Never actually implemented 
CSIDL_INTERNET_CACHE 32 Temp Internet Files 
CSIDL_COOKIES 33 Internet cookies 
CSIDL_HISTORY 34 Internet History 
CSIDL_COMMON_APPDATA 35 All Users\Application Data 
CSIDL_WINDOWS 36 GetWindowsDirectory() 
CSIDL_SYSTEM 37 GetSystemDirectory() 
CSIDL_PROGRAM_FILES 38 C:\Program Files 
CSIDL_MYPICTURES 39 C:\Program Files\My Pictures 
CSIDL_PROFILE 40 USERPROFILE 
CSIDL_SYSTEMX86 41 x86 system directory on RISC 
CSIDL_PROGRAM_FILESX86 42 x86 C:\Program Files on RISC 
CSIDL_PROGRAM_FILES_COMMON 43 C:\Program Files\Common 
CSIDL_PROGRAM_FILES_COMMONX86 44 x86 Program Files\Common on RISC 
CSIDL_COMMON_TEMPLATES 45 All Users\Templates 
CSIDL_COMMON_DOCUMENTS 46 All Users\Documents 
CSIDL_COMMON_ADMINTOOLS 47 All Users\Start Menu\Programs\Administrative Tools 
CSIDL_ADMINTOOLS 48 \Start Menu\Programs\Administrative Tools 
CSIDL_CONNECTIONS 49 Network and Dial-up Connections 
CSIDL_COMMON_MUSIC 53 All Users\My Music 
CSIDL_COMMON_PICTURES 54 All Users\My Pictures 
CSIDL_COMMON_VIDEO 55 All Users\My Video 
CSIDL_RESOURCES 56 Resource Direcotry 
CSIDL_RESOURCES_LOCALIZED 57 Localized Resource Direcotry 
CSIDL_COMMON_OEM_LINKS 58 Links to All Users OEM specific apps 
CSIDL_CDBURN_AREA 59 USERPROFILE\Local Settings\Application Data\Microsoft\CD Burning 
CSIDL_COMPUTERSNEARME 60 Computers Near Me (computered from Workgroup membership) 

.

    
por 17.06.2015 / 23:05
0

Obrigado pelos comentários e respostas úteis!

este meu script de logon de trabalho:

@echo off
IF EXIST D:\USERS\%USERNAME% GOTO EXISTS
GOTO FIRSTLOGON

:FIRSTLOGON
:: Create user folder on D:\
mkdir "D:\USERS\%USERNAME%"
:: copy folder structure from template to new user folder
xcopy "D:\USERS\template\*.*" "D:\USERS\%USERNAME%" /E /Y /Q
:: Set rights on new folder
::: Remove inheritance, grant owner everything and admin everything
icacls "D:\USERS\%USERNAME%" /inheritance:r /grant %USERNAME%:(OI)(CI)F
icacls "D:\USERS\%USERNAME%" /grant Administratoren:(OI)(CI)F
:: User Notification
msg "%username%" Profilefiles were created, please logon again.
:: Logoff
ping 1.1.1.1. -n 1 -w 5000 > NUL
shutdown /l /f
GOTO END

:SECONDLOGON
:: Remove old user folders on C:\
IF EXIST "c:\Users\%username%\Desktop" rmdir /S /Q "c:\Users\%username%\Desktop"
IF EXIST "c:\Users\%username%\Documents" rmdir /S /Q "c:\Users\%username%\Documents"
IF EXIST "c:\Users\%username%\Downloads" rmdir /S /Q "c:\Users\%username%\Downloads"
IF EXIST "c:\Users\%username%\Music" rmdir /S /Q "c:\Users\%username%\Music"
IF EXIST "c:\Users\%username%\Pictures" rmdir /S /Q "c:\Users\%username%\Pictures"
GOTO END

:EXISTS
IF EXIST "c:\Users\%username%\Desktop" GOTO SECONDLOGON
echo Benutzerordner existiert bereits

:END

O redirecionamento da pasta é feito por uma groupolicy local personalizada (ela está ausente no Windows por padrão).

O caminho de importação, claro, são essas duas linhas

icacls "D:\USERS\%USERNAME%" /inheritance:r /grant %USERNAME%:(OI)(CI)F

icacls "D:\USERS\%USERNAME%" /grant Administratoren:(OI)(CI)F

/ inheritance: r - remove todos os direitos herdados e eu concedo ao usuário e ao administrador atuais todos os direitos que também se aplicam a todas as subpastas e arquivos (OI), (CI).

    
por 19.06.2015 / 13:51