런타임에 레일스 프로젝트에서 루비에 인수를 제공하는 방법을 찾고 있습니다. 본질적으로, 우리 프로젝트는 공개 키 암호화를 사용하여 민감한 클라이언트 데이터를 암호화하고 런타임에 비밀 키 파일에 암호를 제공 할 수있는 기능을 원합니다.Rails 런타임에서 인수 제공
답변
쉬운 방법은 'init.rb'에서 'gets'를 사용하여 인수를 취하는 레일즈 플러그인을 만드는 것입니다.
디렉토리 확인 : 내가 요리 업에 대한 빠른 코드 예제를 허용 '$ railsRoot을/공급 업체/플러그인/startup_args/lib에'
은 $ railsRoot/공급 업체/플러그인 '에 저장 인수 데이터 객체를 생성 /startup_args/lib/startup_args.rb '
module StartupArgs
@@argHash = {}
def self.setArg(key, value)
@@argHash[key.to_sym] = value
end
def self.getArg(key)
return @@argHash[key.to_sym]
end
end
로드 레일 프로젝트의 네임 스페이스에 StartupArgs 모듈이의 인수로 채우'
/공급 업체/플러그인/startup_args/init.rb '$ railsRootrequire "startup_args"
promptString = "Enter arg name (type nothing to continue):"
puts promptString
while (newArg = gets.chomp) != ""
puts "Enter value for '#{newArg}':"
newVal = gets.chomp
StartupArgs.setArg(newArg, newVal)
puts promptString
end
이제 Rails 프로젝트가 시작될 때 콘솔에서 키 - 값 쌍을 가져 오려고 시도합니다. 이 쌍은 나중에 액세스 할 수 있도록 전역 이름 공간 개체 StartupArgs에 저장됩니다 ('StartupArgs.getArg()'를 통해).
데몬이 시작 시간 동안 콘솔에 액세스 할 수없는 시나리오에 Rails 프로젝트가 전개 될 것으로 예상되는 경우 콘솔의 표준 입력 대신 명명 된 파이프에서 읽을 수 있습니다.
'require'문을 제외하고 'init.rb'의 모든 부분을 제거하고 관련 매개 변수를 웹을 통해 게시물로 가져 오는 컨트롤러에이 설정을 수행하는 작업을 추가 할 수 있습니다 . 액세스 또는 오류를 기록하는 로그 파일에 잠재적으로 중요한 매개 변수 (예 : 암호)가 입력되지 않도록 Rails를 구성하십시오 (특히 URL에 매개 변수가있는 HTTP GET으로 사용될 경우).
(당신은 설치 작업이 전역 객체에 적절한 매개 변수를 저장 한 때까지 요청을 무시하는 다른 레일 작업을 구성하는 경우 위에 설명 된 시스템과 동일한 효력이 방법을 얻을.)
참고 사항에 대한 미카 : 나는 당신의 포스트에 직접적으로 논평 할 명성이 없기 때문에 여기에 내 코멘트를 포함 할 것이다. 파일 시스템에서 암호를 표현할 필요가없는 시스템을 고려해야 할 몇 가지 이유가있을 수 있습니다. 예를 들어 개발자는 다양한 운영 체제와 다양한 환경에 배포 할 수있는 레일스 프로젝트를 계획하고있을 수 있습니다. 개발자가 관리 또는 루트 사용자가 손상되거나 신뢰할 수 없거나 기밀 유지 및 보안 계약에 서명 할 수없는 시나리오가 있다고 판단한 경우 개발자는 암호를 메모리에 저장하는 추가 난독 화를 추가하기로 결정할 수 있습니다 암호를 훔치는 데 조금 덜 안전한 시스템이나 약간 더 똑똑한 공격을 요구하는 경우에만). 아마도 그것은 상대적 비용의 문제로 간주 될 수 있습니다. 저렴한 비용으로 암호를 검색하기 위해 더 많은 지식을 필요로하는 방식으로 암호를 숨길 수 있습니다.
웹 서버 사용자 만 읽을 수 있도록 chmoded 된 파일에 비밀번호를 넣는 것이 잘못된 이유는 무엇입니까?
모든 Ruby 스크립트는 ENV 해시를 통해 로컬 환경 변수에 액세스 할 수 있습니다.다음과 같이 스크립트를 호출 할 때
puts ENV['PATH']
그래서 모든 POSIX 시스템 (리눅스, 유닉스, 맥 OS)를 사용하면 간단하게 설정할 수 있습니다 :
MY_ARG=supersecret ruby script.rb
에도 동일한 레일에 유효합니다. 당신이 당신의 environment.rb에에 puts ENV['MY_ARG']
을 넣고 서버를 시작하는 경우 :
$ MY_ARG=supersecret mongrel_rails start
** Starting Mongrel listening at 0.0.0.0:3000
** Starting Rails with development environment...
supersecret
** Rails loaded.
** Loading any Rails specific GemPlugins
** Signals ready. TERM => stop. USR2 => restart. INT => stop (no restart).
** Rails signals registered. HUP => reload (without restart). It might not work well.
** Mongrel 1.1.5 available at 0.0.0.0:3000
** Use CTRL-C to stop.
환경 변수는 내 의견에 훨씬 간단한 방법입니다.
내 솔루션보다 확실히 쉽습니다. 리눅스 환경에서 root는 프로세스의 환경을 열거 할 수 있지만 (예 :/proc/[pid]/environ) 독점적으로 루비의 메모리에서 암호 문자열을 가져 오는 데 더 많은 지식과 노력이 필요하다고 우려 할 수 있습니다. – Jsnydr
Windows에서 'cmd.exe'에서 실행 파일을 호출 할 때 환경 변수를 인라인으로 설정하는 방법이 있는지 궁금합니다. – Jsnydr
흠, 좋은 지적/proc/[pid]/environ. 그러나 실제로는 일반 텍스트 파일에 키를 쓰는 것보다 (그리고 덜 직관적 인) 좀 더 많은 작업이 필요합니다. – webmat
- 1. Drupal Views 인수 - 기본 인수 제공 : PHP 코드
- 2. after_save 옵저버에 대한 rails 인수
- 3. Datastore Plus (NDB)의 트랜잭션에 인수 제공
- 4. 런타임에서 HeapDumpOnOutOfMemoryError를
- 5. 런타임에서 컨트롤
- 6. 단일 도메인에서 여러 Rails 앱 제공
- 7. Rails - 결제 후 다운로드 가능한 파일 제공
- 8. Code :: Blocks를 사용하여 디버깅 할 때 프로그램 인수 제공
- 9. 런타임에서 3d 이미지를 그려야합니다.
- 10. 런타임에서 간접 참조를 만족합니다.
- 11. 런타임에서 CABasicAnimation의 setvalue를 수정합니까?
- 12. 런타임에서 log4j 구성하기
- 13. 런타임에서 언어 변경
- 14. 안드로이드 런타임에서 도형 사용
- 15. 런타임에서 뷰 편집
- 16. 런타임에서 Xpath 표현 생성
- 17. 런타임에서 일대일 관계 매핑
- 18. Python 런타임에서 객체 생성하기
- 19. 런타임에서 매핑 테이블
- 20. 런타임에서 안드로이드에서 이미지 자르기
- 21. 런타임에서 C# 컴파일
- 22. 0 인수 오류 1 formtastic, mongomapper and rails 3.1
- 23. Rails 앱에 앱 별 명령 행 인수 전달 (서버 시작시)?
- 24. Rails 3.1 공급 업체/자산/이미지의 이미지 제공
- 25. xml을 Rails 3에서 ActiveRecord Object로 변환하는 기본 제공 방법은 무엇입니까?
- 26. 런타임에서 최대 실행 시간 감지
- 27. Android - 런타임에서 TextView로 변환 버튼
- 28. WPF의 런타임에서 TextBox 크기 조정
- 29. ASP.NET 런타임에서 내 컨트롤 배열
- 30. GWT 런타임에서 이상한 ClassNotDefFoundException 받기
그렇다면 프로세스 모니터가 죽은 프로세스를 어떻게 다시 시작합니까? ;-) 재시동을 자동화하자마자, 그런 종류의 기밀을 포기해야합니다. 결국 서버 (또는 프로세스를 다시 시작하는 시스템)에 대한 액세스를 안전하게 보호해야합니다. – webmat