Win32::FileSecurity模組允許程式去裡理Windows NT處理檔案和目錄的security descriptor。此模組只能在Windows NT上執行,且只有在支援NT安全模組的地方使用檔案和目錄才會成功。
Get函式取得檔案和目錄的存取控制列表(Discretionary Access Control List, DACL)。Get的參數是一個指向雜湊的參考,執行後會在雜湊中存入帳戶名稱以及一些由存取旗標位元遮罩所組成的值。
Set函式的參數是一個檔案或目錄名稱,以及一個儲存帳戶名稱與相對應的位元遮罩的雜湊表。Get和Set都受於使用者本身的權限。
EnumerateRights函式轉換一個位元遮罩到一個陣列。
MakeMask函式轉換一個儲存權限的串列成位元遮罩。
下面程式列出一個檔案的DACL
use Win32::FileSecurity;
use strict;
die "usage:$0 filelist\n" unless @ARGV;
my($file, %perms, $account, $mask, @rights);
foreach $file(@ARGV){
next unless -e $file;
if(Win32::FileSecurity::Get($file, \%perms)){
while(($account, $mask)=each %perms){
print "$account:\n\t";
Win32::FileSecurity::EnumerateRights($mask, \@rights);
print join("\n\t", @rights), "\n";
}
}else{
die "Get: $!";
}
}


下面程式給予Administrator帳戶部份檔案和目錄的完全控制權。
use Win32::FileSecurity;
my $file_mask=Win32::FileSecurity::MakeMask(qw(FULL));
my $dir_mask= Win32::FileSecurity::MakeMask(qw(FULL GENERIC_ALL));
die "usage:$0 file\n" unless @ARGV;
my($file, %perms);
foreach $file(@ARGV){
$file =~ s/\\$//;
next unless -e $file;
Win32::FileSecurity::Get($file, \%perms);
$perms{Administrator}=(-d $file)? $dir_mask: $file_mask;
Win32::FileSecurity::Set($file, \$perms);
}

jck11 發表在 痞客邦 PIXNET 留言(0) 人氣()