Как я могу изменить разрешения Windows NTFS в Perl?

Я использую ActiveState Perl на Windows Server 2003.

Я хочу создать каталог в разделе Windows NTFS, а затем предоставить группе безопасности Windows NT доступ на чтение к папке. Возможно ли это в Perl? Должен ли я использовать команды Windows NT или для этого есть модуль Perl?

Небольшой пример был бы очень признателен!


person Mark Allison    schedule 19.11.2008    source источник


Ответы (2)


Стандартным способом является использование модуля 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 ) ) });

Обратите внимание, что Set перезапишет разрешения для этого каталога. Если вы хотите изменить существующие разрешения, вам нужно сначала Get их:

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

Вот общий пакет разрешений для 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;
person Vinko Vrsalovic    schedule 19.11.2008