Задать вопрос
  • Какой путь прописать для upload_tmp_dir?

    Vamp
    @Vamp
    к примеру для папки /var/www/mysite/ - владелец - пользователь nginx (полный доступ) и группа mysite (только чтение), а остальным все запрещено

    Ну нет же, не nginx. Зачем nginx'у полный доступ? При обнаружении уязвимости в nginx, такие права позволят взломать сайт. Сделайте себя владельцем всех папок и файлов сайта. Тогда вы сможете обновлять сайт без лишних проблем, а nginx и php нет, так как получают права группы, у которой права на запись есть только в специальные папки (сессии, tmp и т.п). Nginx получает доступ на чтение, так как состоит одновременно в группах mysite и example.

    Разграничение доступа группами работает только при использовании нескольких php-fpm пулов. Насколько я понял, вы не собираетесь делать отдельный пул для каждого сайта, поэтому заморочки с пользователями и группами не нужны.
  • Какой путь прописать для upload_tmp_dir?

    Vamp
    @Vamp
    Если разграничивать доступ группами, то без вариантов необходимо использовать отдельный пул для каждого сайта. Если же не хочется плодить пулы, то конфигурацию каждого хоста нужно вписывать в php.ini при помощи секций.

    или это делается, просто путем перечисления все возможных путей, типа:
    php_value[open_basedir] = /var/www/example.com/:/tmp/:/var/www/mysite.com/ ?

    Такая настройка сводит на нет всю идею open_basedir, так как скрипты сайта example.com будут иметь доступ к папке mysite.com.

    Имея 2 домена: example и mysite, задаем права:
    chmod nginx:mysite -R 750 /var/www/mysite/
    chmod nginx:example -R 750 /var/www/example/
    тем самым пользователь www-data - или другой, но не nginx, который не имеет прав доступа к этой папке

    Написали "... или другой, но не nginx, ...", но при этом "chmod nginx:mysite". Как же так?
  • Какой путь прописать для upload_tmp_dir?

    Vamp
    @Vamp
    В конфиге 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 или конфигурации пула:

    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/


    Конфигурации пулов могут быть в отдельных файлах в папке /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 пул будет иметь доступ только к своей папке, но не к папке соседа.
  • Неправильно приходят байты?

    Vamp
    @Vamp
    Возможно из-за того, что кор.
  • Неправильно приходят байты?

    Vamp
    @Vamp
    Размер пакета регулируется операционной системой. Повлиять на это вы не можете.
  • Неправильно приходят байты?

    Vamp
    @Vamp
    Никак. Это фундаментальная особенность работы сети. Если не хотите заниматься сборкой пакетов вручную, то найдите того, кто будет делать это за вас. Я не в курсе что предлагает spigot для решения этой проблемы, но видел плагин ProtocolLib. Вероятно, он может помочь.
  • Как команда ping преобразует адреса?

    Vamp
    @Vamp
    Тут не в протоколе дело, а в софте, его имплементирующем. Судя по всему, протестированные вами реализации SSH и RDP используют эту же самую функцию для преобразования адреса из char массива в структуру in_addr. Только и всего.
  • Как запретить на сайте нажатие CTRL+SHIFT+I и F12?

    Vamp
    @Vamp
    Так автор не знает - можно или нет. Иначе не спрашивал бы.
  • PHP SOAP и сертификат?

    Vamp
    @Vamp
    Тем не менее, другие люди будут приходить из гугла и копипастить ваш ответ в свои проекты бездумно, даже не догадываясь о последствиях. Хотя бы добавьте в ответ ремарку о том, что это решение костыльное и небезопасное.
  • Как вывести все существующие символы?

    Vamp
    @Vamp
    На каком языке требуется пример? В тегах java и javascript, а в примере вообще php. Три совершенно разных языка.
  • Зачем и где именно писать @Override?

    Vamp
    @Vamp
    Показателен пример с переопределением Object.equals(Object) - люди часто ошибаются с сигнатурой: class MyClass { public boolean equals(MyClass o) { /* blah-blah */ } }. В итоге определили новый метод, а не переопределили родительский. Причём ошибка может не сразу обнаружиться.

    Ладно equals() можно запомнить очень быстро. Базовый метод, как-никак. Часто на слуху. Но в нетривиальных случаях можно неплохо подпортить себе нервы, пытаясь отдебажить проблему, которую можно было переложить на компилятор аннотацией @Override.
  • Навыки PHP программиста

    Vamp
    @Vamp
    Получается я прав, но только на половину.
  • Навыки PHP программиста

    Vamp
    @Vamp
    Правильный ответ: обе одинаковые. На самом деле тут дело не в передаче объекта по ссылке, а во особенностях работы интерпретатора с памятью. Например, $str = '123'; $str2 = $str; В памяти будет только один объект со строкой '123', $str и $str2 указатели на один и тот же объект. Новый объект для $str2 выделится только во время модификации.

    $str = '123';
    $str2 = $str;
    $str2 .= '4'; // копирование объекта происходит только на этом этапе
    print $str.'-'.$str2; // 123-1234