Запуск cgi-скриптів в apache за допомогою suexec на сервері ubuntu

Розміщення серверів в надійних дата-центрах Європи. Відкрийте хмарний VPS / VDS сервер на швидких SSD за 1 хвилину!

Кращий хостинг:
- захистить дані від несанкціонованого доступу в охоронюваному європейському ЦОДі
- прийме оплату хоч в bitcoin.
- дозволить поставити свій дистрибутив

- захист від DDos-атак
- безкоштовний backup
- Uptime 99,9999%
- ЦОД - TIER III
- провайдер - TIER I

Підтримаємо російською мовою 24/7/365 Працюємо з юрособами і фізособами. Вам прямо зараз потрібно 24 ядра і 72 Gb RAM. Будь ласка!

Наші вигідні тарифи доведуть, що дешевий хостинг ви ще не знали!

Хвилинна справа: виберіть конфігурацію, оплатіть і CMS на VPS готова.
Money Back - 30 днів!

Банківськими картами, електронною валютою, через термінали Qiwi, Webmoney, PayPal, Новоплат і ін.

Задайте питання в службу підтримки 24/7/365

Знайдіть відповіді в нашій базі і познайомтеся з рекомендаціями

Apache - найпопулярніший веб-сервер в світі. Він обслуговує статичний і динамічний контент сайтів в різних контекстах.

Один з найпоширеніших способів генерування динамічного контенту - це використання інтерфейсу CGI (Common Gateway Interface, загальний шлюзовий інтерфейс), який дозволяє виконувати генеруючі веб-контент скрипти, написані на різних мовах програмування.

Однак запуск будь-якого виконуваного коду в веб-просторі завжди тягне за собою певний ризик.

Це керівництво допоможе запустити CGI-скрипт за допомогою модуля suexec, який дозволяє запускати сценарії, які не розширюючи привілеїв користувача без крайньої необхідності.

вимоги

підтримка CGI

В Ubuntu веб-сервер Apache підтримує окремий каталог CGI-скриптів, який порожній за замовчуванням.

В цілому, CGI-скрипт - це будь-яка програма, здатна повертати HTML і будь-які інші об'єкти або формати, які можна візуалізувати в браузері.

less /etc/apache2/mods-enabled/cgi.load
LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so

Цей файл містить директиву, яка включає модуль CGI.

Модуль вже завантажений, але поки що він не обслуговує скрипти; для цього його потрібно включити в певному середовищі.

Відкрийте стандартний файл віртуального хоста:

sudo nano / etc / apache2 / sites-enabled / 000-default

Спочатку в ньому потрібно вказати ServerName:

Трохи нижче в файлі знаходиться розділ, який відповідає за підтримку скриптів CGI:

ScriptAlias ​​/ cgi-bin / / usr / lib / cgi-bin /

AllowOverride None
Options + ExecCGI -MultiViews + SymLinksIfOwnerMatch
Order allow, deny
Allow from all

Розглянемо його докладніше.

Директива ScriptAlias ​​вказує каталог, з якого Apache може запускати скрипти. В даному випадку це каталог / usr / lib / cgi-bin. Другий аргумент задає шлях до каталогу скриптів, а перший (/ cgi-bin /) - це URL.

Це означає, що скрипт на ім'я script.pl, що зберігається в каталозі / usr / lib / cgi-bin, буде запускатися за посиланням:

Його висновок повернеться в браузер і буде візуалізовано на цій сторінці.

Розділ Directory містить правила роботи каталогу / usr / lib / cgi-bin. Зверніть увагу на:

Ця опція насправді не потрібна, оскільки всі налаштування призначені для каталогу скриптів CGI, зазначеного в ScriptAlias. Однак вона не зашкодить конфігурацію, тому її можна залишити.

Щоб мати можливість розміщувати CGI-скрипти поза каталогу ScriptAlias, потрібно додати в розділ Directory наступні опції:

Options + ExecCGI
AddHandler cgi-script .pl .rb [extensions to be treated as CGI scripts]

Збережіть і закрийте файл. Якщо ви внесли в нього будь-які поправки, перезапустіть веб-сервер:

sudo service apache2 restart

Тестовий CGI-скрипт

Тепер спробуйте створити тестовий CGI-скрипт.

Як зазначено в настройках, для зберігання скриптів CGI призначений окремий каталог / usr / lib / cgi-bin. Користувачі без прав root не мають права на запис в цьому каталозі, тому потрібно відкрити такий файл sudo:

sudo nano /usr/lib/cgi-bin/test.pl

Цей файл має розширення .pl, тому що це Perl-скрипт; Apache буде запускати всі файли в цьому каталозі і передавати їх відповідними програмами.

Вкажіть, що цей файл потрібно виконувати в Perl, додавши в початок скрипта:

Після цього необхідно вказати тип генерованого контенту. Це потрібно для того, що веб-браузер розумів, як відображати отриманий висновок. Наприклад, даний скрипт буде виводити контент HTML (text / html) за допомогою стандартної функції Perl.

print "Content-type: text / html \ n \ n";

Додайте до перших двох обов'язкових рядках наступний набір компонентів. В результаті вийде такий скрипт:

#! / Usr / bin / perl
print "Content-type: text / html \ n \ n";
print "Hello There. ";
print "";
print "


";
print "

This is some regular text.

";
print "

The possibilities are great.

";
print "";

Збережіть і закрийте файл.

Зробіть його виконуваним:

sudo chmod 755 /usr/lib/cgi-bin/test.pl

Якщо тепер відкрити в браузері домен і каталог CGI, а потім додати ім'я скрипта, на екрані з'явиться висновок даного скрипта.

your_domain.com/cgi-bin/test.pl
Hello, World.
This is some regular text.
The possibilities are great.

Як бачите, ця найпростіша сторінка правильно відображається.

Hello There.


This is some regular text.


The possibilities are great.

Включення модуля SuExec

Створюючи скрипт, який може виконати будь-який користувач, ви піддаєте безпеку сервера деякому ризику. В ідеалі, право на запуск скриптів має бути тільки у одного заблокованого користувача. Для цього і призначений модуль suexec.

Встановіть модифіковану версію модуля suexec, яка дозволяє налаштовувати підтримувані каталоги (раніше цю функцію можна було отримати тільки шляхом перекомпіляції модуля з вихідного коду).

sudo apt-get install apache2-suexec-custom

sudo a2enmod suexec

Створіть нового користувача, якому будуть належати всі права на файли скрипта. Якщо сервер обслуговує декілька сайтів, створіть окремого користувача для кожного з них.

sudo adduser script_user

Можна припустити все запити даних (включаючи запит на установку пароля).

Створіть каталог скриптів в домашньому каталозі нового користувача:

sudo mkdir / home / script_user / scripts

Модуль suexec вимагає дуже суворого контролю над правами на запис в каталозі. Передайте права на каталог користувачеві script_user і змініть права доступу, щоб ніхто не міг писати в ньому:

sudo chown script_user: script_user / home / script_user / scripts
sudo chmod 755 / home / script_user / scripts

Тепер створіть скрипт-файл, а потім скопіюйте та вставте в нього створений раніше скрипт:

sudo -u script_user nano /home/script_user/scripts/attempt.pl
#! / Usr / bin / perl
print "Content-type: text / html \ n \ n";
print "Hello There. ";
print "";
print "


";
print "

This is some regular text.

";
print "

The possibilities are great.

";
print "";

Зробіть файл виконуваним. Всі права на файл повинні бути тільки у користувача script_user; їх можна налаштувати за допомогою модуля suexec:

sudo chmod 700 /home/script_user/scripts/attempt.pl

Після цього внесіть настройки віртуального хоста Apache, щоб новий користувач міг запускати скрипт.

sudo nano / etc / apache2 / sites-enabled / 000-default

Спочатку налаштуйте каталог CGI; замість директиви ScriptAlias ​​використовуйте директиву Alias ​​в комбінації з опцією ExecCGI і директивою SetHandler.

Додайте в файл:

Alias ​​/ scripts / / home / script_user / scripts /

Options + ExecCGI
SetHandler cgi-script

Тепер можна отримати доступ до скриптів, перейшовши в підкаталог / scripts. Для увімкнення цих функцій suexec, додайте наступний рядок поза розділу Directory, але в рамках розділу VirtualHost.

SuexecUserGroup script_user script_user

Збережіть і закрийте файл.

Тепер потрібно задати каталоги, які модуль suexec буде вважати валідними (це та функція, яка відсутня в стандартній версії модуля). Відкрийте конфігураційний файл suexec.

sudo nano / etc / apache2 / suexec / www-data

На початку файлу потрібно вказати шлях до каталогу scripts.

Збережіть і закрийте файл.

Тепер запустіть веб-сервер.

sudo service apache2 restart

Відкрийте в браузері посилання:

І на екрані з'явиться:

Hello, World.
This is some regular text.
The possibilities are great.

Зверніть увагу: після настройки модуля suexec звичайний каталог CGI не працює; така поведінка призначене для контролю привілеїв скриптів.

висновок

Тепер ви можете створювати сценарії CGI і запускати їх відносно безпечним способом. Скрипти CGI дуже корисні, оскільки дозволяють швидко додати на сайт динамічний контент. А за допомогою модуля suexec можна захистити ці скрипти.

Однак будьте гранично уважні при роботі з модулем suexec! Неправильне налаштування модуля може створити додаткові уразливості безпеки. Щоб з'ясувати потенційні уразливості suexec, вивчіть конфігурацію модуля.