Как я могу изменить разрешения Windows NTFS в Perl? - PullRequest
5 голосов
/ 19 ноября 2008

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

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

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

Ответы [ 2 ]

10 голосов
/ 19 ноября 2008

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