Ізоляція віртуальних хостів Apache від решти системи


11

Я налаштовую веб-сервер, на якому розміщуватимуться різні веб-сайти як Apache VirtualHosts, кожен з них матиме можливість запускати сценарії (в першу чергу PHP, інші можливості).

Моє запитання полягає в тому, як я ізолюю кожну з цих VirtualHosts від інших і від решти системи? Я не хочу, щоб, наприклад, веб-сайт X читав конфігурацію веб-сайту Y або будь-який із "приватних" файлів сервера.

На даний момент я встановив VirtualHosts за допомогою FastCGI, PHP та SUExec, як описано тут ( http://x10hosting.com/forums/vps-tutorials/148894-debian-apache-2-2-fastcgi-php-5-suexec -easy-way.html ), але SUExec лише заважає користувачам редагувати / виконувати інші файли, крім власних - користувачі все ще можуть читати конфіденційну інформацію, таку як конфігураційні файли.

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

Я також розглядав використання chroot, але, схоже, це можна зробити лише на сервері, а не на основі віртуального хоста.

Я шукаю будь-які пропозиції, які будуть ізолювати мої VirtualHosts від решти системи.

PS Я запускаю сервер Ubuntu 12.04

Мій ВІДПОВІДЬ: Я закінчив майже дотримуючись моєї поточної конфігурації, але робив тюрьму chroot для всіх віртуальних хостів, наприклад, маючи в'язницю chroot, /var/wwwа потім маю всі дані користувачів у папках, кожен з дозволами групи / інші r / w / x інвалід. Цей варіант був бажаним, особливо тому, що він можливий без будь-яких змін вихідного коду.

Я вибрав відповідь @Chris, тому що вона була ретельно написана, а також вважалася FTP та SELinux

Відповіді:


4

Це можна зробити, включивши модуль mod_users в Apache.

Вам потрібно буде налаштувати UserDir у вашій конфігурації apache. Я пропоную вам зробити це в окремому конфігураційному файлі та включити його. Оберніть включити

<IfModule mod_users.c>
   Include conf/extra/userdir.conf
</IfModule>

Я можу дати вам весь підручник, але для цього слід розпочати налаштування Apache: http://www.techytalk.info/enable-userdir-apache-module-ubuntu-debian-based-linux-distributions/

Підказка, якщо ви працюєте з SELinux (і вам слід), вам доведеться надати Apache читати доступ до будинків користувачів. Це можна зробити, встановивши:

sudo setsebool -P httpd_enable_homedirs=On

Також потрібні дозволи файлів до каталогу dirs public_html та дозволу rx у батьківських каталогах до root.

Очевидно, вам потрібно встановити chroot для користувачів, наприклад, в vsftpd. Встановити:

apt-get vsftpd

Для налаштування хротування відкрийте /etc/vsftpd/vsftpd.conf за допомогою vi або nano. Знайдіть і скаментуйте або додайте: chroot_local_user = так

Ви можете отримати таку саму поведінку для sftp, яку я рекомендую через FTP, відкрити / etc / ssh / sshd_config та додати блок Match та цей рядок:

Subsystem   sftp    internal-sftp

Match Group web_users
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no
Match

Це призведе до хронізації будь-якого користувача з групи web_users . Також вам потрібно буде заборонити доступ до оболонки, встановивши її на / sbin / nologin:

useradd -G "web_users" -s /sbin/nologin new_user

Якщо це сервер загальнодоступного виробництва, я також настійно пропоную застосувати деякі загартовування на ОС, OpenSSH, Apache, PHP, vsftpd та застосувати деякі суворі iptables та TCP обгортки. Я рекомендую також залишити SELinux на місці.


3
Я не бачу, як mod_userdirпропонується віртуальний хостинг окремих доменів. Крім того, я маю занепокоєння щодо безпеки в частині ізоляції, оскільки я не в змозі знайти нічого про це між каталогами користувачів в Apache. Це, здається, не пропонує цю функцію.
gertvdijk

6

Пропоную поглянути suphpабо PHP-FPM .

В основному це дозволить інтерпретатору PHP «су» для певного конкретного користувача, налаштованого для цього VirtualHost. Це дозволить вам використовувати загальні дозволи файлової системи для ізоляції кожного окремого VirtualHost.

Я б рекомендував FPM з міркувань продуктивності. На домашній сторінці це найбільше цікавить вас:

Також цікаві параметри користувача та групи для одного пулу, які дозволяють запускати цей конкретний пул fpm під заданими uid та gid; до побачення suphp!


4

1
Я переглянув ці посилання, але, схоже, я не можу хротувати на основі віртуального хоста. Можливо, я повинен визначити глобальний каталог каталогів, щоб хронізувати подібне /var/www, і чи всі хости знаходяться там у підкаталозі, кожен з цих підкаталогів видалив глобальний дозвіл на виконання / читання?
JesperB

Моя основна суть була chroot, і ви можете це зробити на віртуальному сервері. Ось приклад. У цьому випадку вони використовують mod_chroot.
такотутор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.