Как использовать Ruby CGI-скрипты в Uberspace
Я хочу использовать сценарии Ruby CGI в Uberspace 7, но столкнулся с несколькими проблемами с разрешениями и настройками безопасности, особенно при использовании гемов. Как мне установить CGI-скрипты с пользовательскими гемами?
1 ответ
Во-первых, обратите внимание, что Uberspace 7 работает на SELinux. Это означает, что файлы сценариев CGI в ~/html/
не только должны быть исполняемыми, но и иметь правильный контекст 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. Вы можете установить драгоценные камни в /var/www/virtual/$USER/gem
вместо этого создайте каталог с
$ 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
Теперь установка драгоценных камней должна работать:
$ gem install mygem
Чтобы использовать драгоценные камни в CGI-скриптах, установите Gem.paths
переменная, прежде чем требовать драгоценных камней:
#!/usr/bin/ruby
Gem.paths = { 'GEM_PATH' => '/var/www/virtual/<USERNAME>/gem' }
require 'mygem'
(... rest of the script)
Это необходимо, так как мы не можем изменять переменные окружения (т.е. GEM_PATH
) для процесса apache.