Insecure operation - file? (SecurityError)

Podczas odpalania Grunt-a dostaje taki błąd z Ruby-ego:

Warning: /Users/ograbek/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/rubygems/basic_specification.rb:62:in `file?': Insecure operation - file? (SecurityError)
	from /Users/ograbek/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/rubygems/basic_specification.rb:62:in `block (2 levels) in contains_requirable_file?'
	from /Users/ograbek/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/rubygems/basic_specification.rb:62:in `each'
	from /Users/ograbek/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/rubygems/basic_specification.rb:62:in `any?'
	from /Users/ograbek/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/rubygems/basic_specification.rb:62:in `block in contains_requirable_file?'
	from /Users/ograbek/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/rubygems/basic_specification.rb:60:in `each'
	from /Users/ograbek/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/rubygems/basic_specification.rb:60:in `any?'
	from /Users/ograbek/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/rubygems/basic_specification.rb:60:in `contains_requirable_file?'
	from /Users/ograbek/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/rubygems/specification.rb:925:in `block in find_inactive_by_path'
	from /Users/ograbek/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/rubygems/specification.rb:924:in `each'
	from /Users/ograbek/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/rubygems/specification.rb:924:in `find'
	from /Users/ograbek/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/rubygems/specification.rb:924:in `find_inactive_by_path'
	from /Users/ograbek/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/rubygems.rb:185:in `try_activate'
	from /Users/ograbek/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:132:in `rescue in require'
	from /Users/ograbek/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:144:in `require'
	from /Users/ograbek/.rvm/gems/ruby-2.1.1@eqipia/bin/ruby_executable_hooks:9:in `<main>' Use --force to continue.

Grunt próbuje odpalić compass server (wersja gem-a 1.0.0.alpha.19) i wtedy rzuca błędami. Wersja Ruby nie ma znaczenia, przełączałam się też na wersję 2.1.2 oraz 2.0.0 i ten sam błąd leci tylko w inny miejscu:

Warning: Command failed: /Users/ograbek/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/site_ruby/2.0.0/rubygems/specification.rb:729:in `[]': Insecure operation - each_gemspec (SecurityError)

Sprawdziłam zmienną $SAFE, jest ustawiona na 0. Może ktoś miał podobny problem, niekoniecznie podczas uruchamiania Grunt-a? Nie za wiele mogę znaleźć informacji na temat tego błędu i możliwych przyczyn (oprócz ustawień zmiennej $SAFE).

Środowisko:
OSX 10.9.4
rvm 1.25.28
ruby-2.1.1 (2.1.2, ruby-2.0.0-p353)
compass 1.0.0.alpha.19

Ktoś, coś ? :smile:

Mój pierwszy strzał byłby właśnie w $SAFE >= 2

Pytanko gdzie sprawdziłeś wartość $SAFE ? Ponieważ to jest zmienna globalna-dla-wątku więc możliwe że jest podnoszona wewnątrz wątku. Patrz: http://ruby-hacking-guide.github.io/security.html

1 Like

Dzięki za linka. Na to nie trafiłam. Skoro to jest przenoszone wewnątrz wątku, to wylogowałam sobie wartość $SAFE wewnątrz pliku, gdzie leci błąd:

basic_specification.rb -> linia 62

Robię to tak:

Przed linią 62 ustawiam logger:

log = Logger.new('~/logfile.log')
log.level = Logger::DEBUG
log.debug("Linia 62:#{$SAFE}")

Odpalam Grunta, wynik w pliku logfile.log:

D, [2014-07-13T08:46:29.797529 #43663] DEBUG -- : Linia 62, wartość $SAFE: 1

Posprawdzałam jeszcze kilka innych rzeczy. Linia 62 to następujący kod:

suffixes.any? { |suf| File.file? "#{base}#{suf}" }

suffixes to Array z następującymi wartościami:

["", ".rb", ".bundle"]

Natomiast wartość base to np.

/Users/ograbek/.rvm/gems/ruby-2.1.1/gems/arel-4.0.2/lib/executable-hooks/hooks

I dla tego przypadku leci wyjątek. Wobec tego sprawdziłam jeszcze czy base jest oznaczone jako tainted. I rzeczywiście jest! Zatem wygląda na to, że to dlatego leci błąd. Co z tym fantem dalej zrobić ? :open_mouth:
Z tego co wiem, to $SAFE dafaultowo powinno być ustawione na 0. Zatem to Grunt coś przestawia (wydaje mi się, że tak, tuaj znalazłam ciekawe informacje http://bit.ly/1s9z1S8) ? I czy normalne jest, że dla Arel ta ścieżka jest ustawiana jako tained ?

Dobra, problem rozwiązany :slight_smile: Problem polegał na tym, że gdzieś nadałam niepotrzebnie SUID, no i się prawa dostępu nie zgadzały. Wielkie dzięki za nakierowanie, gdzie może tkwić problem :smiley:

Cieszę sięże się udało :smiley:

Swoją drogą, jeżeli pracujecie na Mac-u i kiedyś coś namieszacie z prawami dostępu, to Mac ma w Application/Utilities
coś takiego jak Disk Utility i opcję Repair Disk Permissions. Działa bardzo fajnie.