WindowsServer2003でActiveStatePerlを使用しています。
Windows NTFSパーティションにディレクトリを作成してから、WindowsNTセキュリティグループにフォルダへの読み取りアクセス権を付与したいと思います。これはPerlで可能ですか?Windows NTコマンドを使用する必要がありますか、それともそれを行うためのPerlモジュールがありますか?
小さな例をいただければ幸いです。
WindowsServer2003でActiveStatePerlを使用しています。
Windows NTFSパーティションにディレクトリを作成してから、WindowsNTセキュリティグループにフォルダへの読み取りアクセス権を付与したいと思います。これはPerlで可能ですか?Windows NTコマンドを使用する必要がありますか、それともそれを行うためのPerlモジュールがありますか?
小さな例をいただければ幸いです。
標準的な方法は、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);
以下は、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;