我有 2 个 perl 脚本,其中一个调用另一个(system() 调用)。我不希望任何其他东西能够执行第二个 perl 脚本。只有第一个 perl 脚本可以运行第二个。第二个 perl 脚本是一个巨人,有很多自己的包含、 fork 和嵌套系统调用,所以我想避免简单地将它作为子例程(或类似的东西)放在第一个脚本中。但是,可以将第二个 perl 脚本包装在 perl 模块/包或类似的文件中。但问题是我不希望第一个 perl 脚本的任何用户能够独立执行第二个 perl 脚本。
这样的事情可能吗?
这将在 RHEL6 上完成。
我打算用 perl 和 linux 来标记它,因为我也对基于 linux 的解决方案持开放态度。我将使用权限进行标记,因为这是我正在谈论的内容的核心。请注意,我没有 root。
最佳答案
为了防止意外误用,您可以简单地检查父进程 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|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.
关于linux - 可以将 perl 脚本的执行权限限制为从另一个 perl 脚本调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49457136/