Как использовать 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.

Другие вопросы по тегам