linux - 可以将 perl 脚本的执行权限限制为从另一个 perl 脚本调用吗?

标签 linux perl permissions

我有 2 个 perl 脚本,其中一个调用另一个(system() 调用)。我不希望任何其他东西能够执行第二个 perl 脚本。只有第一个 perl 脚本可以运行第二个。第二个 perl 脚本是一个巨人,有很多自己的包含、 fork 和嵌套系统调用,所以我想避免简单地将它作为子例程(或类似的东西)放在第一个脚本中。但是,可以将第二个 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.

关于linux - 可以将 perl 脚本的执行权限限制为从另一个 perl 脚本调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49457136/

相关文章:

c++ - CMake 传递的变量编译器无法编译简单程序

linux - Fiji(ImageJ) 加载时间太长(在 Linux 上),以及冗长的错误消息

perl - 如何控制 Perl Data::Dumper 中的变量名?

permissions - 以root身份拒绝可执行文件的权限

Linux crontab 脚本通过 ssh 登录到本地用户

Linux内核操作系统寄存器

regex - Perl:通过搜索和替换解析 Excel

regex - Perl:正则表达式:捕获组

azure - 是否缺少此 Terraform 代码权限或 Azure 帐户(附加错误)以及如何修复它?

visual-studio - VS Marketplace添加成员显示无效域错误