В конфиге nginx нельзя устанавливать опции PHP с уровнем PHP_INI_SYSTEM, который как раз и имеют open_basedir (с оговорками), upload_tmp_dir и sys_temp_dir. Опция session.save_path имеет уровень PHP_INI_ALL, поэтому её можно установить откуда угодно. Хоть из php скриптов.
PHP_INI_SYSTEM можно установить только в php.ini или конфигурации пула:
Конфигурации пулов могут быть в отдельных файлах в папке /etc/php7/pool или в одном - это дело вкуса. Проще разделять по разным.
Что до разделения по юзерам, то нужно создавать отдельные пользовательские группы для каждого сайта:
; Имя пула
[mysite]
; Пользователь и группа
user = www-data
group = mysite
; Прием FastCGI-запросов
listen = /var/run/mysite.sock
; Пользователь и группа, который будет владельцем unix сокета
listen.owner = nginx
listen.group = nginx
; Права на чтение и запись
listen.mode = 0660
; добавляем конфиг php
php_value[open_basedir] = /var/www/mysite.ru/:/tmp/
php_value[upload_tmp_dir] = /var/www/mysite.ru/tmp/
php_value[sys_temp_dir] = /var/www/mysite.ru/tmp/
php_value[session.save_path] = /var/www/mysite.ru/sessions/
; Имя пула
[vasya]
; Пользователь и группа
user = www-data
group = vasya
; Прием FastCGI-запросов
listen = /var/run/vasya.sock
; Пользователь и группа, который будет владельцем unix сокета
listen.owner = nginx
listen.group = nginx
; Права на чтение и запись
listen.mode = 0660
; добавляем конфиг php
php_value[open_basedir] = /var/www/vasya/:/tmp/
php_value[upload_tmp_dir] = /var/www/vasya/tmp/
php_value[sys_temp_dir] = /var/www/vasya/tmp/
php_value[session.save_path] = /var/www/vasya/sessions/
Соответственно, права и владелец папки /var/www/mysite.ru должны быть tolly:mysite и 750, а у /var/www/vasya - tolly:vasya и 750.
Не сильно важно от какого пользователя будут запускаться разные php-fpm пулы, главное чтобы не от nginx или tolly. Разграничение доступа при такой схеме строится только на группах.
Пользователь nginx должен состоять одновременно в группах mysite и vasya, чтобы иметь доступ к файлам всех сайтов, тогда как php-fpm пул будет иметь доступ только к своей папке, но не к папке соседа.
Никак. Это фундаментальная особенность работы сети. Если не хотите заниматься сборкой пакетов вручную, то найдите того, кто будет делать это за вас. Я не в курсе что предлагает spigot для решения этой проблемы, но видел плагин ProtocolLib. Вероятно, он может помочь.
Тут не в протоколе дело, а в софте, его имплементирующем. Судя по всему, протестированные вами реализации SSH и RDP используют эту же самую функцию для преобразования адреса из char массива в структуру in_addr. Только и всего.
Тем не менее, другие люди будут приходить из гугла и копипастить ваш ответ в свои проекты бездумно, даже не догадываясь о последствиях. Хотя бы добавьте в ответ ремарку о том, что это решение костыльное и небезопасное.
Показателен пример с переопределением Object.equals(Object) - люди часто ошибаются с сигнатурой: class MyClass { public boolean equals(MyClass o) { /* blah-blah */ } }. В итоге определили новый метод, а не переопределили родительский. Причём ошибка может не сразу обнаружиться.
Ладно equals() можно запомнить очень быстро. Базовый метод, как-никак. Часто на слуху. Но в нетривиальных случаях можно неплохо подпортить себе нервы, пытаясь отдебажить проблему, которую можно было переложить на компилятор аннотацией @Override.
Правильный ответ: обе одинаковые. На самом деле тут дело не в передаче объекта по ссылке, а во особенностях работы интерпретатора с памятью. Например, $str = '123'; $str2 = $str; В памяти будет только один объект со строкой '123', $str и $str2 указатели на один и тот же объект. Новый объект для $str2 выделится только во время модификации.
$str = '123';
$str2 = $str;
$str2 .= '4'; // копирование объекта происходит только на этом этапе
print $str.'-'.$str2; // 123-1234
PHP_INI_SYSTEM можно установить только в php.ini или конфигурации пула:
Конфигурации пулов могут быть в отдельных файлах в папке /etc/php7/pool или в одном - это дело вкуса. Проще разделять по разным.
Что до разделения по юзерам, то нужно создавать отдельные пользовательские группы для каждого сайта:
Соответственно, права и владелец папки /var/www/mysite.ru должны быть tolly:mysite и 750, а у /var/www/vasya - tolly:vasya и 750.
Не сильно важно от какого пользователя будут запускаться разные php-fpm пулы, главное чтобы не от nginx или tolly. Разграничение доступа при такой схеме строится только на группах.
Пользователь nginx должен состоять одновременно в группах mysite и vasya, чтобы иметь доступ к файлам всех сайтов, тогда как php-fpm пул будет иметь доступ только к своей папке, но не к папке соседа.