我想在Uberspace 7上使用Ruby脚本,但在权限和安全设置方面遇到了一些问题,特别是在使用gems时。如何安装带有自定义宝石的CGI脚本?
发布于 2018-10-01 13:59:05
首先,请注意,Uberspace 7运行在SELinux上。这意味着~/html/中的CGI脚本文件不仅必须是可执行的,而且还需要正确的SELinux上下文。在这种情况下,类型必须是httpd_sys_content_t。
可以使用SELinux查看ls -lZ上下文。
$ ls -Z file1
-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1如果某些文件具有错误的上下文,则可以使用restorecon命令(例如restorecon -R ~/html/ )还原上下文。
Ruby的用户安装目录是~/.gem/。在Uberspace上,默认情况下,gem install安装到该目录中:
$ cat /etc/gemrc
gem: --no-document --user-install由于apache进程无法访问主目录,因此无法从CGI脚本执行安装在那里的gems。您可以在/var/www/virtual/$USER/gem中安装gems,然后用
$ mkdir /var/www/virtual/$USER/gem不能将--install-dir参数直接用于gem install,因为这与上面提到的默认参数冲突:
$ gem install mygem --install-dir /var/www/virtual/$USER/gem
ERROR: Use --install-dir or --user-install but not both相反,使用以下内容创建~/.gemrc以覆盖默认参数(用实际用户名替换<USERNAME> ):
gem: --install-dir /var/www/virtual/<USERNAME>/gem现在,安装gems应该是可行的:
$ gem install mygem若要在CGI脚本中使用gems,请在需要gems之前设置Gem.paths变量:
#!/usr/bin/ruby
Gem.paths = { 'GEM_PATH' => '/var/www/virtual/<USERNAME>/gem' }
require 'mygem'
(... rest of the script)这是需要的,因为我们不能修改apache的环境变量(即设置GEM_PATH)。
https://stackoverflow.com/questions/52592802
复制相似问题