2008-11-19 11 views
4

J'utilise ActiveState Perl sur Windows Server 2003.Comment puis-je modifier les autorisations Windows NTFS en Perl?

Je souhaite créer un répertoire sur une partition Windows NTFS, puis accorder un accès en lecture au groupe de sécurité Windows NT au dossier. Est-ce possible en Perl? Devrais-je utiliser des commandes Windows NT ou existe-t-il un module Perl pour le faire?

Un petit exemple serait très apprécié!

Répondre

9

La méthode standard consiste à utiliser le module Win32::FileSecurity:

use Win32::FileSecurity qw(Set MakeMask); 

my $dir = 'c:/newdir'; 
mkdir $dir or die $!; 
Set($dir, { 'Power Users' 
      => MakeMask(qw(READ GENERIC_READ GENERIC_EXECUTE)) }); 

Notez que Set remplacent les autorisations pour ce répertoire. Si vous souhaitez modifier les autorisations existantes, vous devez d'abord les Get:

my %permissions; 
Win32::FileSecurity::Get($dir, \%permissions); 
$permissions{'Power Users'} 
    = MakeMask(qw(READ GENERIC_READ GENERIC_EXECUTE)) }); 
Win32::FileSecurity::Set($dir, \%permissions); 
6

Here est un package d'autorisations génériques pour ActivePerl.

use Win32::Perms; 

# Create a new Security Descriptor and auto import permissions 
# from the directory 
$Dir = new Win32::Perms('c:/temp') || die; 

# One of three ways to remove an ACE 
$Dir->Remove('guest'); 

# Deny access for all attributes (deny read, deny write, etc) 
$Dir->Deny('joel', FULL); 

# Set the directory permissions (no need to specify the 
# path since the object was created with it) 
$Dir->Set(); 

# If you are curious about the contents of the SD 
# dump the contents to STDOUT $Dir->Dump; 
Questions connexes