Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 14 Ответов
  • 2010 Просмотров
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
Подскажите, каким образом при помощи open_basedir отделить сайты (директории доменов) друг от друга? Чтобы если один сайт оказался зараженным, вредонос не смог ничего прочитать или записать в директории других сайтов по соседству.

Вариант с прописыванием в .htaccess не подойдет, так как потенциальный вредонос легко сможет данный .htaccess переписать. Толковых примеров для файла php.ini не нашел, соответственно не понимаю, как сразу несколько десятков хостов отделить / разграничить / изолировать.

Сайты на VPS, т. е. доступ к конфигам у меня полный.
« Последнее редактирование: 22.04.2019, 14:56:58 от dm-krv »
*

sivers

  • Живу я здесь
  • 2465
  • 336 / 0
Если у вас Apache, то необходимо заменить Apache MPM-Prefork на Apache MPM-ITK - это можно сделать в ISP Manager, если используете его (на вкладке "Возможности" в разделе ВЕб-сервера). Либо переустановить его вручную. Лучше потренироваться на отдельном ВПС. Если взять связку нгинкс+пхп-фпм (апач в этом случае можно полностью выпилить), то там по умолчанию так все настроено. Далее надо под каждый сайт создавать своего пользователя и переносить сайты из общего каталога в каталоги этих пользователей. После перехода на apache-itc надо будет подправить имеющиеся конфиги. Если будете делать - вышлю более подробные инструкции (остались со времен апача).
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
Не ISP - использую панель BrainyCP, стоить классическая связка LAMP, без nginx. Там и так можно отдельных пользователей делать, да только это убиться можно будет в процессе - слишком муторно и напоминает стрельбу по воробьям из орбитального лазера.

Поэтому и хочу хоть какую-то изоляцию через open_basedir попробовать сделать.
*

sivers

  • Живу я здесь
  • 2465
  • 336 / 0
Поэтому и хочу хоть какую-то изоляцию через open_basedir попробовать сделать.
Понятно. Отпишитесь, если найдете решение.
Может разные юзеры на каждый сайт и выглядит как перебор... Но это тоже подстраховка. У нас когда-то все сайты лежали у одного юзера. А потом вирус на локальной машине одного из разработчиков слил фтп-пароль и получил доступ сразу ко всем сайтам. Но и описанный вами способ заражения имел место )
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
Нашел инструкция на зарубежных сайтах о том, как правильно применять open_basedir к настройкам хост.
Дописал директиву в настройки сайта:

<VirtualHost 188.127.249.225:80 >
ServerName rvp74.ru
ServerAlias http://www.rvp74.ru 
DocumentRoot /home/optima/sites/rvp74.ru

php_admin_value open_basedir "/home/optima/sites/rvp74.ru:."

<IFModule proxy_fcgi_module>
ProxyFCGISetEnvIf "true" SCRIPT_FILENAME "/sites/rvp74.ru%{reqenv:SCRIPT_NAME}"
<FilesMatch \.php$>
#SetHandler "proxy:unix:/var/run/php-fpm/php56w-optima.sock|fcgi://rvp74.ru/sites/rvp74.ru"
SetHandler "proxy:unix:/var/run/php-fpm/php56w-optima.sock|fcgi://localhost/"
</FilesMatch>
</IFModule>

<Directory "/home/optima/sites/rvp74.ru">

AllowOverride All
Require all granted

</Directory>
           
           
CustomLog /etc/httpd/vhost_logs/rvp74.ru_access combined
ErrorLog /etc/httpd/vhost_logs/rvp74.ru_error
DirectoryIndex index.php index.html index.htm

</VirtualHost>


Однако у меня после этого упал apache ругаясь на вписанную строку:

● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Mon 2019-04-22 13:19:37 +05; 24ms ago
Docs: man:httpd.service(8)
Process: 8538 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
Main PID: 8538 (code=exited, status=1/FAILURE)
Status: "Reading configuration..."

Apr 22 13:19:36 rvp74.ru systemd[1]: Starting The Apache HTTP Server...
Apr 22 13:19:37 rvp74.ru httpd[8538]: AH00526: Syntax error on line 6 of /etc/httpd/vhost.d/rvp74.ru.conf:
Apr 22 13:19:37 rvp74.ru httpd[8538]: Invalid command 'php_admin_value', perhaps misspelled or defined by a module not included in the server configuration

Apr 22 13:19:37 rvp74.ru systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
Apr 22 13:19:37 rvp74.ru systemd[1]: Failed to start The Apache HTTP Server.
Apr 22 13:19:37 rvp74.ru systemd[1]: Unit httpd.service entered failed state.
Apr 22 13:19:37 rvp74.ru systemd[1]: httpd.service failed.


Подскажите, куда копать. Почему php_admin_value не сработала?
« Последнее редактирование: 22.04.2019, 11:44:04 от dm-krv »
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
потому что у вас php не как модуль апача, а как php-fpm. добавляйте это в конфигах php-fmp, а не апача.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
потому что у вас php не как модуль апача, а как php-fpm. добавляйте это в конфигах php-fmp, а не апача.

Нашел ровно один конфиг внутри каталога:
Код
/etc/php56w/php-fpm.d
Но ведь он применяется ко всем сайтам использующим эту версию php, а мне надо конфиги к каждого отдельному хосту. Нельзя ли здесь ничего сделать? Предопределить конфиг к конкретному виртуальному хосту?
« Последнее редактирование: 22.04.2019, 12:43:49 от dm-krv »
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
вы не поняли. или я неправильно выразился :) у вас есть блок
Код
<IFModule proxy_fcgi_module>
...
вот в нем и добавляйте
Код
ProxyFCGISetEnvIf "true" PHP_ADMIN_VALUE "open_basedir=/home/optima/sites/rvp74.ru:."
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
вы не поняли. или я неправильно выразился :) у вас есть блок
Код
<IFModule proxy_fcgi_module>
...
вот в нем и добавляйте
Код
ProxyFCGISetEnvIf "true" PHP_ADMIN_VALUE "open_basedir=/home/optima/sites/rvp74.ru:."

Работет  :D

Для проверки использовал небольшой скрипт, который показывает содержимое каталога на уровень и выше и там же создает тестовый файл:
Код
<?php

$files = scandir('../');

foreach ($files as $file) {
    echo $file . "<br>";
}

$test = "Проверка 7";

file_put_contents('../test.txt', $test);

?>

И если до установки директивы он все показывал и тестовый файл успешно создавал, то после установки директивы, как отрезало - ничего не показывает и запись на уровень выше тоже не идет.

Dmitry_stas, огромное спасибо, от души) Прям реально помог и сильно.
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
Для тех, кто зашел сюда полюбопытствовать, информирую, что для нормальной работы Joomla кроме open_basedir нужно еще две директивы рядом вписать, а именно (ниже примеры):
Код
ProxyFCGISetEnvIf "true" PHP_ADMIN_VALUE "open_basedir=/home/optima/sites/rvp74.rf"
ProxyFCGISetEnvIf "true" PHP_ADMIN_VALUE "upload_tmp_dir=/home/optima/sites/rvp74.rf/tmp"
ProxyFCGISetEnvIf "true" PHP_ADMIN_VALUE "session.save_path=/home/optima/sites/rvp74.rf/tmp"

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

upload_tmp_dir - определяет каталог для временного хранения загруженного файла. Если указан параметр open_basedir, то php будет пытаться открыть стандартную папку /tmp, то есть попытается выйти за пределы разрешённой директории и в результате будет выдавать ошибку, если захотите обновить Joomla.

session.save_path - все аналогично, только это папка для хранения сессий php.
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
или можно в Информации о PHP посмотреть куда upload_tmp_dir и session.save_path ссылаются, и добавить этот каталог в open_basedir
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
или можно в Информации о PHP посмотреть куда upload_tmp_dir и session.save_path ссылаются, и добавить этот каталог в open_basedir

Тоже вариант, только смысл сайтам давать доступ к временный файлам и сессиям друг-друга?

Еще хочу добавить напоследок. В интернетах также пишут, что для обеспечения большей безопасности можно запретить некоторые потенциально опасные функции. Директива:

Код
ProxyFCGISetEnvIf "true" PHP_ADMIN_VALUE "disable_functions=dl,shell_exec,exec,system,passthru,proc_open,proc_nice,socket_create,socket_open,proc_get_status,proc_close,proc_terminate,posix_mkfifo,popen"

Попробовал, вроде бы все основное в Joomle работает нормально, ничего не отвалилось. Хотя допускаю, что некоторые вещи могут перестать работать после включения этой директивы.

Собственно считаю на этом тему закрытой. Все работает и теперь могу вздохнуть чуть более спокойно)
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
смысл сайтам давать доступ к временный файлам и сессиям друг-друга?
а они не будут (по крайней мере не должны, если php-fpm настроен верно) его иметь в любом случае. но можно конечно и так, как сделали вы, указать разные.

В интернетах также пишут, что для обеспечения большей безопасности можно запретить некоторые потенциально опасные функции
имхо точно также не имеет смысла. всего "потенциально опасного" вы не запретите, иначе не будет работать многое, поэтому имхо это просто запрет ради запрета. имхо достаточно того, что вы ограничили выполнение open_basedir
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
Блин, опять проблемы. Почему то использование директивы:
Код
ProxyFCGISetEnvIf "true" PHP_ADMIN_VALUE "upload_tmp_dir=/home/optima/sites/rvp74.rf/tmp"

Полностью отменяет open_basedir - он банально прекращает работу, что я наблюдаю через тестовый скрипт. Не знает никто, в чем может быть проблема? Может запись неправильная?
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
Все, нашел корень проблемы. Правильная запись выглядит так:

ProxyFCGISetEnvIf "true" PHP_ADMIN_VALUE "open_basedir=/home/optima/sites/rvp74.rf:. \n upload_tmp_dir=/home/optima/sites/rvp74.rf/tmp \n session.save_path=/home/optima/sites/rvp74.rf/tmp"

Директивы все пишутся внутри кавычек и разделяются символьным переносом строк \n
Только в таком виде все работает.
« Последнее редактирование: 22.04.2019, 17:50:05 от dm-krv »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[РЕШЕНО] Добавить класс при условии JS?

Автор warlocksp

Ответов: 21
Просмотров: 1801
Последний ответ 26.02.2020, 11:07:53
от robert
Программное создание материалов в Joomla 3.8+ [ РЕШЕНО ]

Автор dm-krv

Ответов: 36
Просмотров: 2575
Последний ответ 12.12.2019, 21:06:08
от MDenis
Бесплатный звонок с сайта, через интернет [РЕШЕНО]

Автор dm-krv

Ответов: 8
Просмотров: 551
Последний ответ 03.04.2019, 09:43:32
от dm-krv
JQuery: как проигнорировать cors при парсинге? [РЕШЕНО]

Автор dm-krv

Ответов: 20
Просмотров: 2343
Последний ответ 17.01.2019, 20:11:58
от fsv
Скроллинг к элементу с определенным классом [РЕШЕНО]

Автор dm-krv

Ответов: 1
Просмотров: 1856
Последний ответ 05.11.2018, 08:51:39
от dm-krv