将脚本限制为用户子集

时间:2012-02-08 22:28:04

标签: perl bash unix hidden

假设我有一个perl(或python)脚本,可以做一些高度秘密的事情;我只想让某些用户真正能够使用该脚本。目前,我通过维护名为allowedUsers.txt的只读文本文件来获得此功能,并检查以下内容:

my $username = `whoami`; 
my %allowedUsers; 
open ALLOWED_USERS, "allowedUsers.txt"; 
while(<ALLOWED_USERS>) { 
    $allowedUsers{$_} = 1; 
}
if($allowedUsers{$username} != 1) {
    die "Sorry, user $username does not have access.\n"; 
}

这很好用,但是因为脚本必须是可读的(否则Perl本身就无法执行它),没有什么能阻止人们简单地制作脚本副本,注释掉这部分代码,然后运行他们的“黑客”版本来规避身份检查!

是否有更好的方法来实现对用户子集的脚本执行限制?例如,我可以使用不可读但只能以某种方式可由所有人执行的perl代码吗?

2 个答案:

答案 0 :(得分:7)

仅允许某些group用户阅读/执行您的脚本,并将相关用户放入此群组。

编辑:更确切地说:

  • 使用您首选的用户管理工具
  • 创建一个名为trusted_users的组
  • 将授权用户添加到此论坛
  • 使用chgrp设置脚本的组:chgrp trusted_users my_script.pl
  • 使用chmod设置其权限:chmod u=rwx,g=rx,o= my_script.pl(所有者可以阅读,编写,执行;群组成员可以阅读并执行;其他人无法执行任何操作)

答案 1 :(得分:2)

脚本检查它是否可以运行,如果不能运行则退出,但具有可执行权限意味着脚本的读取权限,因此用户可以简单地复制它,删除那个愚蠢的检查并运行它。

创建一组用户,并仅允许该组中的用户读取和执行该文件。然后,您只需将要授予此权限的用户添加到该组即可!有关示例,请参阅Unix - File Permission / Access Modes