簡體   English   中英

是否可以將一個Perl腳本的執行權限限制為只能從另一個Perl腳本調用?

[英]Can execute permissions of a perl script be restricted to call from another perl script?

我有2個perl腳本,其中一個調用另一個(system()調用)。 我不希望其他任何東西能夠執行第二個Perl腳本。 只有第一個perl腳本可以運行第二個。 第二個Perl腳本是一個龐大的腳本,它具有很多包含自身的派生,派生和嵌套系統調用,因此我想避免將它作為子例程(或類似的東西)簡單地粘貼在第一個腳本中。 但是,可以將第二個perl腳本包裝在perl模塊/軟件包或類似文件中。 但是,我不希望第一個Perl腳本的任何用戶能夠獨立執行第二個Perl腳本。

這樣的事情可能嗎?
這將在RHEL6上完成。

我將同時使用perl和linux對其進行標記,因為我也對基於Linux的解決方案持開放態度。 我將標記權限,因為這是我所討論的核心。 請注意,盡管我沒有root。

為了防止意外濫用,您可以簡單地檢查父進程ID,並將其命令行執行與您期望的執行進行比較,如下所示,該過程使用ps查找該信息。 但是,只要腳本的源代碼對其他用戶可見,您就永遠無法真正阻止他們僅根據他們的需要對其進行復制/修改,因此您可能希望在錯誤消息中發出警告, 說明為什么認為這真是個壞主意。

script1.plsome_other_script.pl (兩者相同,但名稱不同)

#!/usr/bin/env perl

use warnings;
use strict;

(system('./script2.pl') == 0)
    or die "Unable to run script2.pl!";

script2.pl

#!/usr/bin/env perl

use warnings;
use strict;

chomp(my $ppid = `ps -o ppid= -p $$`);
chomp(my $parent_command = `ps -o command= $ppid`);

die "script2.pl must only be called from script1.pl!"
    unless $parent_command =~ m|perl\s+script1\.pl$|; # as suggested by @zdim

print "Have some pi : 3.14159\n";

輸出

$ perl script1.pl
Have some pi : 3.14159

$ perl script2.pl
script2.pl must only be called from script1.pl! at script2.pl line 9.

$ perl some_other_script.pl
script2.pl must only be called from script1.pl! at ./script2.pl line 9.
Unable to run script2.pl! at some_other_script.pl line 6.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM