Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails 3.2.1 rails runner在solaris 10上执行setuid脚本时失败_Ruby On Rails_Ruby_Solaris 10 - Fatal编程技术网

Ruby on rails rails 3.2.1 rails runner在solaris 10上执行setuid脚本时失败

Ruby on rails rails 3.2.1 rails runner在solaris 10上执行setuid脚本时失败,ruby-on-rails,ruby,solaris-10,Ruby On Rails,Ruby,Solaris 10,我们需要使用基于大型机的调度器而不是cron来执行实用程序任务。此计划程序与主机上的代理进行通信,然后主机执行一个通用setuid ksh脚本,该脚本将实用程序作为参数与所需的任何参数一起执行。然后,setuid ksh脚本使用其参数调用另一个脚本 在我的例子中,下一个脚本execute_something.ksh设置一些环境变量,将cd设置为Rails根目录,并执行Rails runner Module.function-e,其中environment是传递的参数 这就是: mainframe

我们需要使用基于大型机的调度器而不是cron来执行实用程序任务。此计划程序与主机上的代理进行通信,然后主机执行一个通用setuid ksh脚本,该脚本将实用程序作为参数与所需的任何参数一起执行。然后,setuid ksh脚本使用其参数调用另一个脚本

在我的例子中,下一个脚本execute_something.ksh设置一些环境变量,将cd设置为Rails根目录,并执行Rails runner Module.function-e,其中environment是传递的参数

这就是:

mainframe -> agent -> setuid_script -> execute_something.ksh -> Module.function
当我像我自己一样直接调用execute_something.ksh时,它工作得很好。调用setuid脚本时,出现以下错误:

/[path]/bin/rails:15:in'force_encoding':未知编码名称-二进制参数错误 from/[path]/bin/rails:15:in main

这不是权限问题。所有涉及的文件要么归setuid用户所有,要么具有setgid组的完全组权限,并且属于该组。是的,杀伤力太大了,但这就是我得到的

setuid脚本继承我的环境,但setuid用户有一个EUID

另外,正在执行的rails脚本与安装在我的linux笔记本电脑上的脚本不同,我提到这是solaris问题

rails脚本是:

#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'railties' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'rubygems'

version = ">= 0"

if ARGV.first
  str = ARGV.first
  str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
  if str =~ /\A_(.*)_\z/
    version = $1
    ARGV.shift
  end
end

gem 'railties', version
load Gem.bin_path('railties', 'rails', version)
这和我一样有效。我在PATH和LD_LIBRARY_PATH中明确删除了对我的主目录沙盒的所有引用-它仍然适用于我,而不适用于setuid用户

我没有在全局环境中更改内容的权限-我必须输入请求并等待。无法更改模块必须执行的方式

请某人-给我一些想法?我不认为这适用于很多人,但这不是一个有趣的难题吗

蒂亚


Carilda

rails命令的目的是调用script/rails(如果存在),因此您可以直接调用该脚本:

./script/rails runner Module.function -e <environment> 

谢谢你,但当我试着这么做时,我得到了以下信息:./script/rails:4:in expand_path::不安全的操作-expand_path SecurityError from./script/rails:4:in“你使用的是什么版本的Ruby修补程序?还有,$SAFE在你的应用程序中的值是多少?Ruby 1.9.3p125;在rails控制台中,$SAFE显示0。在应用程序本身和我使用rails runner时,情况是否相同?谢谢,应该是的。听起来你有一些错误的权限。我问Ruby的版本,因为不久前有一个相关的bug。