簡體   English   中英

Ruby on Rails-如何以root身份運行bash腳本?

[英]Ruby on Rails- how to run a bash script as root?

我想要做的是使用'button_to'和朋友在linux服務器上啟動不同的腳本。 並非所有腳本都需要是root用戶,但有些腳本將會運行“apt-get dist-upgrade”等等。

PassengerDefaultUser在apache2.conf中設置為www-data

我已經嘗試從控制器運行腳本,這些腳本可以執行諸如寫入文本文件之類的操作,以便我知道我正在讓Rails正確執行腳本。 (換句話說,我知道如何從控制器運行腳本)但我無法弄清楚如何運行需要root訪問權限的腳本。 有人能給我帶頭嗎?

關於安全性的說明:感謝所有針對黑客行為的警告。 但是,您不需要放松任何睡眠,因為A)無法從公共互聯網訪問webapp,它只能在私有內部網上訪問,B)應用程序受密碼保護,而C)因為用戶不會能夠提供自定義輸入,只從表單中進行選擇,該表單將作為變量傳遞給腳本。 但是,因為我說這並不意味着我無視您的安全建議 - 我將在我的設計中非常仔細地考慮它們。

你應該使用setuid位來實現沒有sudo的相同功能。 但是你不應該運行Bash腳本。 Setuid比sudo更安全。 使用sudo或setuid,您正在以root身份運行程序。 但只有setuid(在某些語言的幫助下)提供了一些額外的安全措施。

基本上,您將使用暫時允許作為所有者運行的腳本,而不是使用調用它們的用戶。 Ruby和Perl可以檢測腳本作為與調用者不同的用戶運行的時間,並強制執行安全措施以防止不安全的調用。 這稱為污點模式。 Bash根本不會以污點模式運行。

污點模式基本上通過聲明來自外部源的所有輸入不安全以便在傳遞給系統調用時使用。

設置:

使用chmod將要運行的腳本的權限設置為4755,並將其所有者設置為root:

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

然后像往常一樣運行腳本。 setuid位啟動並運行腳本,就好像它是由root運行一樣。 這是臨時提升權限的最安全方式。

請參閱Ruby關於安全級別的文檔, 了解Ruby的衛生要求,以防止受污染的輸入造成傷害。 perlsec常見問題,以了解如何在Perl中完成相同的事情。

再次。 如果您在自動系統中以root用戶身份運行腳本時已經死定。 不要使用Bash! 使用Ruby或Perl代替Bash。 污點模式迫使您認真對待安全問題,並可以避免許多不必要的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM