1

Я пытаюсь узнать о разрешениях на веб-сервере Linux с Apache.

Некоторые подсказки к системе:
Сервер, с которым мне приходится играть, основан на Fedora. Apache работает как apache:apache. Чтобы позволить, например, php записывать в файл, файл должен быть chmod 777. 755 недостаточно.

Что мне интересно, так это то, как настроить права доступа, например, на «общем веб-хосте».

Моя основная проблема заключается в том, что если я установлю разрешение, чтобы один пользователь не мог получить доступ к домашней папке другого, то apache также не сможет читать из папки public_html.

Чтобы не пускать пользователей, мне нужно установить chmod 700. Но чтобы позволить apache читать, мне нужно хотя бы выполнить в мире, так что 701 в принципе работает, но не пускает некоторых пользователей.

Так что я действительно застрял в том, что делать. Решали добавить пользователя apache в список ниже, чтобы избежать необходимости добавлять флаг выполнения мира, но разве это плохо? Должно ли это быть наоборот, пользователи в группах ниже также должны быть в группе apache?

Я стремился иметь 4 группы:

1. веб-приложение
То же самое, что и dev_int, но это единственный файл, который может находиться в папке webapp/live, например, для обновления из репозитория.

2. dev_int
может читать, писать и выполнять все в «веб-корне», включая два ниже, но ничего кроме веб-корня

3. dev_ext
может читать, записывать и выполнять во всех клиентских папках, но не может получить доступ ни к чему, кроме корня веб-приложения

4. клиенты
Основные учетные записи ftp. Имеет домашнюю папку с public_html, но не может получить доступ к другим домашним папкам

Пример структуры папок:

  • Ни один пользователь из вышеупомянутых групп не может выйти за пределы
    • some_project : только dev_int
    • WebApp
      • Live : только веб-приложение
      • постановка : dev_int и: dev_ext
      • клиенты : dev_int и: dev_ext
        • client_1 : dev_int,: dev_ext и client1: клиенты
          • public_html
    • DEV
      • разработчик_1 разработчик_1: dev_int ИЛИ: dev_ext
        • public_html

2 ответа2

1

Я бы порекомендовал посмотреть на следующие два варианта:

  1. Использование многопроцессорного модуля для Apache (например, mpm-itk), который позволяет вам задавать конкретные UID и GID для каждого VHost. Это может позволить вам запускать Apache с необходимыми привилегиями для каждого каталога и немного повысить безопасность, поскольку процессы Apache будут работать с более узким доступом к файловой системе.

  2. Использование файловой системы Access Control Lists (некоторую информацию можно найти, например, в документации RHEL). Это хорошее решение, потому что все пользователи могут сохранять свои привилегии (и быть изолированными от других пользователей), но вы можете предоставить Apache права на доступ к их каталогам public_html .

Вы также можете объединить оба решения для настройки сильно изолированной среды. Я с радостью использовал оба подхода, объединенные на сервере с несколькими сотнями учетных записей оболочки и несколькими отдельными VHosts для различных веб-страниц.

0

Если вы используете установку Apache 2 с помощью yum, вы можете поместить файлы веб-страницы в любое место. Я использую /var/www/html/DomainName.com для хранения файлов каждого виртуального домена. Я храню информацию о доменах в отдельном файле вместо httpd.conf, поэтому мне не нужно просматривать весь файл, если мне нужно его редактировать.

Последняя строка моих файлов httpd.conf:

Include /etc/httpd/conf/domains.conf

Вот часть сценария, который я использую для создания новых витаминов.

DOMAIN=$1 
USERNAME=$2 
mkdir /var/www/html/$DOMAIN 
useradd -g apache  $USERNAME 
chown $USERNAME:    /var/www/html/$DOMAIN 
cd /home/$USERNAME 
ln -s /var/www/html/$DOMAIN www

echo "Adding httpd entry" 

echo "  " >>    /etc/httpd/conf/domains.conf 
echo "<VirtualHost *:80>" >>    /etc/httpd/conf/domains.conf
echo "      ServerAdmin webmaster@$DOMAIN" >> /etc/httpd/conf/domains.conf
echo "      DocumentRoot /var/www/html/$DOMAIN" >> /etc/httpd/conf/domains.conf
echo "      ServerName $DOMAIN" >> /etc/httpd/conf/domains.conf
echo "      ServerAlias www.$DOMAIN" >>   /etc/httpd/conf/domains.conf
echo "      ErrorLog logs/$DOMAIN-error_log" >>   /etc/httpd/conf/domains.conf
echo "      CustomLog logs/$DOMAIN-access_log common" >>   /etc/httpd/conf/domains.conf 
echo "</VirtualHost>" >> /etc/httpd/conf/domains.conf 

Надеюсь это поможет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .