2009-10-24 6 views
3

내가하고 싶은건 'button_to'& 친구가 리눅스 서버에서 다른 스크립트를 시작하는 것입니다. 모든 스크립트가 루트 일 필요는 없지만 "apt-get dist-upgrade"등을 실행하기 때문에 일부 스크립트는 루트가되어야합니다. 이미 나는 데 알고 그냥, 그래서 등 텍스트 파일 쓰기와 같은 작은 일들을 컨트롤러에서 스크립트를 실행 시도Ruby on Rails- root로 bash 스크립트를 실행하는 방법은 무엇입니까?

은 PassengerDefaultUser은 apache2.conf의

에 www가 데이터로 설정 레일즈는 스크립트를 올바르게 실행합니다. (즉, 컨트롤러에서 스크립트를 실행하는 방법을 알고 있습니다.)하지만 루트 액세스가 필요한 스크립트를 실행하는 방법을 알 수는 없습니다. 아무도 내게 리드를 줄 수 있습니까?

보안 메모 : 해킹에 대한 경고 메시지를 보내 주셔서 감사합니다. A) 웹 앱은 공용 인터넷에서 액세스 할 수 없으므로 개인 인트라넷에만 있어야합니다. B) 앱이 비밀번호로 보호되어 있고, C) 사용자가되지 않기 때문에 잠을 자지 않아도됩니다. 사용자 정의 입력을 제공 할 수 있으며, 스크립트로 변수로 전달 될 양식에서만 선택을합니다. 그러나 이것이 내가 귀하의 보안 권고 사항을 무시하고 있음을 의미하지 않는다고 말했기 때문에 제 설계에서 매우 신중하게 고려할 것입니다.

+1

어떻게해야할지 모르겠지만 버그는 웹 액세스 루트 액세스 권한을 가진 사용자에게 부여 할 수 있습니다. –

+0

필자는 충분히 강조 할 수 없습니다. ** 자동화 된 시스템에서 호출 할 때 Bash 스크립트에 루트 액세스 권한을 부여하지 마십시오. ** – EmFi

+0

양식 입력을 확인하고 싶습니다. 선택 상자를 사용하는 경우에도.사용자가 기대하지 않은 데이터로 POST 요청을 만들 수있는 이유가 없습니다. 루트로 실행할 수있는 모든 것을 허용하는 것은 매우 위험한 일입니다. 호기심이 많은 사용자가 시스템을 호스하는 것뿐입니다. – EmFi

답변

6

sudo없이 동일한 기능을 수행하려면 setuid 비트를 사용해야합니다. 그러나 Bash 스크립트를 실행해서는 안됩니다. Setuid는 sudo보다 훨씬 안전합니다. sudo 또는 setuid를 사용하여 루트로 프로그램을 실행하고 있습니다. 그러나 (특정 언어의 도움으로) setuid만이 몇 가지 추가 보안 조치를 제공합니다.

기본적으로 스크립트를 호출 한 사용자 대신 일시적으로 소유자로 실행할 수있는 스크립트를 사용하게됩니다. Ruby와 Perl은 스크립트가 호출자와 다른 사용자로 실행될 때이를 감지하고 안전하지 않은 호출로부터 보호하기위한 보안 조치를 강요합니다. 이를 Taint 모드라고합니다. Bash는 오염 모드에서 전혀 실행되지 않습니다.

테일 모드는 기본적으로 외부 소스의 모든 입력을 시스템 호출에 전달할 때 사용하기에 안전하지 않다고 선언함으로써 작동합니다.

것은 그것을 설정 :

사용 chmod를 사용하면 4755으로 실행하고 설정하려는 스크립트에 대한 사용 권한을 설정하려면 루트로 사용 :

$ chmod 4755 script.rb 
$ chown root script.rb 

그럼 그냥 보통으로 스크립트를 실행 할 것이다. setuid 비트가 실행되어 마치 루트로 실행 된 것처럼 스크립트를 실행합니다. 이것은 일시적으로 권한을 상승시키는 가장 안전한 방법입니다.

유해한 입력을 방지하기 위해 Ruby의 위생 요구 사항을 이해하려면 safe levels and taint에 관한 Ruby 설명서를 참조하십시오. 또는 perlsec faq을 통해 Perl에서 동일한 작업을 수행하는 방법을 배울 수 있습니다.

다시. 자동화 된 시스템에서 루트로 스크립트를 실행하는 것이 죽은 경우. 배쉬를 사용하지 마십시오! Bash 대신 Ruby 또는 Perl을 사용하십시오. 테 인트 모드는 보안을 중요하게 생각하고 줄을 따라 많은 불필요한 문제를 피할 수 있습니다.