Ruby项目 - 防止从OS命令行直接调用ruby文件

时间:2016-08-27 09:12:03

标签: ruby permissions file-permissions

我正在使用Ruby进行演示命令行项目。结构是这样的:

/ROOT_DIR
   init.rb
   /SCRIPT_DIR
      (other scripts and files)

我希望用户只使用init.rb进入应用程序,但就目前而言,任何人都可以进入子文件夹并直接调用其他ruby脚本。

问题:

  1. 可以采取哪些方法防止上述情况发生?
  2. 如果我要使用目录权限,那么在将代码从Windows机器运行到Linux机器时是否会重置?
  3. Ruby文件本身是否包含任何内容以防止从OS命令行直接调用它?

1 个答案:

答案 0 :(得分:2)

您无法使用文件权限执行此操作,因为用户需要读取文件;删除read权限意味着您也无法包含该权限。删除execute权限有助于表明这些文件不会被执行,但不会阻止用户输入ruby incl.rb

最简单的方法可能是在init.rb脚本中设置一个全局变量:

#!/usr/bin/env ruby

FROM_INIT = true
require './incl.rb'

puts 'This is init!'

然后检查是否在包含的incl.rb文件中定义了此变量:

unless defined? FROM_INIT
    puts 'Must be called from init.rb'
    exit 0
end

puts 'This is incl!'

第二种方法可能是检查$PROGRAM_NAMEincl.rb的值;这将存储当前程序名称(如许多其他语言中的argv[0]):

unless $PROGRAM_NAME.end_with? 'init.rb'
    puts 'Must be called from init.rb'
    exit 0
end

我不推荐这个,因为它不是很有前瞻性;如果您想重命名init.rb或制作第二个脚本,该怎么办?