可以将Perl脚本的权限限制在另一个Perl脚本中



我有2个perl脚本,其中一个呼叫另一个(system((调用(。我不希望其他任何能够执行第二个Perl脚本。只有第一个perl脚本才能运行第二个。第二个perl脚本是一个巨人,其中包含大量的和围成嵌套的系统调用,因此我想避免将其简单地将其粘贴在第一个子例程中(或类似的东西(。但是,可以将第二个Perl脚本包装在Perl模块/软件包或类似内容中是可以的。但是问题是我不希望第一个Perl脚本的任何用户能够独立执行第二个Perl脚本。

是可能的吗?
这要在RHEL6上完成。

我将使用Perl和Linux标记此标签,因为我也向基于Linux的解决方案开放。而且我会用权限标记,因为这是我在说的内容的核心。请注意,尽管我没有根。

为了防止意外滥用,您可以简单地检查父进程ID并将其命令行执行与您的期望,类似以下内容(使用ps(查找该信息。但是,只要其他用户可以看到脚本的源代码,您就可以真正阻止他们仅复制/修改它以适合他们的需求,因此您可能需要在错误消息中发出警告为什么您认为这是一个坏主意。

script1.pl some_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|perls+script1.pl$|; # as suggested by @zdim
print "Have some pi : 3.14159n";

输出

$ 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.

最新更新