Автор Тема: apache2 виртуальные хосты от разных пользователей  (Прочитано 4580 раз)

Оффлайн Eric

  • Участник
  • *
  • Сообщений: 137
Приветствую всех участников!
С толкнулся с такой задачей:
Имеется сервер под управление altlinux, версия стоит сизиф, в общем то версия не сильно тут важна, вопрос по большей части в конфигурации апача!

В общем сервер используется мной как веб сервер, стоит апач+php ну в общем стандартный набор!
Есть несколько виртуальных хостов, все работает чудно, Но появился по работе человек которому надо дать доступ к файлам некоторых вирт хостов!

С доступом по FTP и chroot для каждого пользователя разбирался уже давно и с ним думаю проблем не возникнет.
В основном конфиге etc/httpd2/conf/httpd.conf есть строчки
User apache2
Group apache2
И веб сервер работает от имени этого юзера и группы. И, например, при закачке файлов через сайт, файлы заливаются на сервер с правами на apache2:apache2 с любого вирт хоста. Если изменить User и Group соответственно уже все файлы заливаются с правами на указанного юзера.
Все бы ничего, я один работал с сайтами и просто заходил с рута и перезаливал/удалял/правил и всячески "извращался" с файлами, мне было не важно кто был владелец этих файлов!
Теперь же, если я дам доступ по фтп другому человеку и он не сможет править/удалять файлы которые он залил с сайта и тп, т.к. они не принадлежат ему!

Извиняюсь что так много пишу, стараюсь подробней для ясности ситуации.
Попробовал добавить User Group в настройки вирт хостов, но увы, при перезапуске сервиса httpd2 меня отправили изучать апач, мол такие настройки не могут быть использованы в вирт хостах, а предназначены лишь для общего конфига, т.е. для всего веб сервер.
Погуглил, нашел типа поставить надо suexec, поставил, попробовал и так и сяк, но ничего не получилось, толком не описано как он работает.
Думаю что как раз suexec(но лишь предположение) должен мне помочь и прошу Вашей помощи, может кто сталкивался с такой ситуацией и нашел отличный выход.

Оффлайн speccyfan

  • Участник
  • *
  • Сообщений: 522
  • CCNA
    • speccyfan (Примеры различных конфигураций сетевых сервисов)
А почему бы не хранить файлы виртуального хоста непосредственно в домашней директории пользователя? Он тогда будет владельцем файлов, заливая их по ftp.
With best regards, Yury Konovalov aka 2:453/53

Оффлайн Eric

  • Участник
  • *
  • Сообщений: 137
А почему бы не хранить файлы виртуального хоста непосредственно в домашней директории пользователя? Он тогда будет владельцем файлов, заливая их по ftp.
Это да, но опять же говорю, файлы создаваемые php будут иметь владельца apache2:apache2

Оффлайн yaleks

  • Мастер
  • ***
  • Сообщений: 6 242
немного рекламная статья, но в начале приведены сведения о том, что вам нужно _samag.ru/archive/article/1196

Оффлайн Eric

  • Участник
  • *
  • Сообщений: 137
В общем нашел выход!
У меня всего для 1 человека надо доступ дать, так что завел нового юзверя, апач прописал запуск от этого пользователя, чрут дал каталог на каталог веб сервера с вирт хостами, запретил доступ ssh, настроил доступ по vsftp, установил владельца на все сайты которого создал. Человек не видит ничего кроме сайтов, то что мне и надо было.
Всем спасибо, а статья кстати чисто рекламная, толку от нее не было, но спасибо почитал.

Оффлайн Eric

  • Участник
  • *
  • Сообщений: 137
Вновь приветствую всех.
Прошло время и все же вновь пришлось вернуться к проблеме описанной выше. Появилась задача, организовать небольшой хостинг, ну и конечно для разных пользователей.
Посерфил по сети, почитал различной инфы, остановился на том что бы поднять apache+suexec
Ось: Сизиф 64
Поставил apache2 и дополнил модулем suexec, включил модуль a2enmod suexec, cgi
при запуске все отлично
Цитировать
[notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec2)

Цитировать
# suexec2 -V
 -D AP_DOC_ROOT="/home"
 -D AP_GID_MIN=500
 -D AP_HTTPD_USER="apache2"
 -D AP_LOG_EXEC="/var/log/httpd2/suexec.log"
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=500
 -D AP_USERDIR_SUFFIX="public_html"

Моя мнение по этому поводу получается такое:
/home только в этой директории будет работать suexec (рекурсивно)
GID и UID с этим все ясно, не должны быть менее этих, да ниже системной зарезервированы
httpd_user - это юзер из под которого должен работать сам апач

userdir_suffix - вот тут у меня два варианта в голове, попробовал оба. 1 - это все виртуальные хосты должы быть по пути /home/public_html 2 - это файлы php и другие файлы сайта должны находиться в этой директории, т.е. /home/blablalba.ru/public_html

Создаю виртхост

Цитировать
<VirtualHost *:80>
        ServerAdmin "webmaster@rim76.ru"
        ServerName "rim76.ru"
        ServerAlias "www.rim76.ru"
        DocumentRoot "/home/public_html/rim76.ru/public_html"

        # Директория для CGI-скриптов
        ScriptAlias /cgi-bin/ "/home/public_html/rim76.ru/cgi-bin/"
        AddType application/x-httpd-php .php
        SuexecUserGroup rim76 rim76

        <Directory /home/public_html/rim76.ru>
        Options +ExecCGI
        </Directory>
        Action application/x-httpd-php /cgi-bin/php
 
      # Файлы логов
        ErrorLog "/var/log/httpd2/rim76.ru.error_log"
</VirtualHost>

По советам из мануалов конечно закинул копию интерпретатора php в директорию cgi-bin

Завел юзера и группу rim76, создал все нужные каталоги, перезапустил сервис апача.
На сайт закинул скрипт для проверки юзера
<?php
echo "user=";
system("whoami");
?>

Запускаю его и увы, вижу лишь user=apache2, пользователь из под которого запущен апач, но не тот что мне нужен rim76

Посидел еще почитал, попробовал по разному конфиги менять, в итоге не получилось добиться нужного результата.

Кто ставил и разбирался с suexec, прошу вашей помощи в решении данной задачи.

Оффлайн Eric

  • Участник
  • *
  • Сообщений: 137
Серьезно что-ли никто не ставил suexec?

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
У меня вообще апач не используется (nginx всю дорогу пользую без бакэндов). Так что не удивлюсь, если действительно никто не пользовал. Можете еще в рассылках поспрашать, как вариант в сисадминскую рассылку запостите, может кто откликнется.

Оффлайн Eric

  • Участник
  • *
  • Сообщений: 137
У меня вообще апач не используется (nginx всю дорогу пользую без бакэндов). Так что не удивлюсь, если действительно никто не пользовал. Можете еще в рассылках поспрашать, как вариант в сисадминскую рассылку запостите, может кто откликнется.
Ну для хостинга чистый nginx не подойдет, для обычных пользователей непонять будет, ведь там не все функции работают как в апаче, точнее колдовать надо, тот же rewrite

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 370
Интересный вопрос... Вообще, мне ответ на него хотелось бы знать тоже, но я не озадачивался пока.
Гугление вывело меня на информацию о модуле mpm_itk_module  и AssignUserId <user> <group>. Как модуль, этого в ALT не собрано, но есть apache2-httpd-itk, если его установить и запустить, то на AssignUserId, по крайней мере, апач ругаться перестаёт. Но эффекта нет всё равно...

Если этих apache2-httpd-* установлено несколько, надо сделать так:
alternatives-manual /usr/sbin/httpd2.itk /usr/sbin/httpd2
alternatives-update

На этом я, пока, остановился, но к вопросу надо будет вернуться.

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 370
но есть apache2-httpd-itk, если его установить и запустить, то на AssignUserId, по крайней мере, апач ругаться перестаёт. Но эффекта нет всё равно...
Эффект, оказывается, есть: процессы http2 запускаются с указанным UID. Просто phpinfo() показывает совсем не то. А вот posix_getuid() показывает то, что надо.