Symfony создать новую папку разрешений

Я развернул проект с использованием Capifony и получил ошибку при создании папки. Следующий код находится внутри службы. Может быть внутри контроллера тоже не имеет значения.

$dir = $kernelDir . '/../web/newfolder/';// kerneldir is %kernel.root_dir%
$fs=new Filesystem();
$fs->mkdir($dir);

Это попытается создать новую папку внутри сети, но не удастся.

Проблема в разрешениях для веб-папки:

drwxrwxr-x 11 deploy deploy    4096 Feb 15 14:52 web

deploy это пользователь, который сделал развертывание на веб-сервере. Пользователь веб-сервера является пользователем по умолчанию www-dataНо нет ли проблемы, если я установлю www-данные в качестве владельца веб-каталога? Это означает, что каждый может изменить все в сети.

Я также попытался создать папку в web/uploads папка и то тоже не получается.

Как я могу иметь www-data создать папку в папке, к которой у нее нет доступа, не повредив безопасности? Нужно ли добавить одного из пользователей в новую группу или что-то еще? Нужно ли мне модифицировать мой файл развертывания? Нужно ли мне использовать www-данные в качестве пользователя развертывания? Как решить эту проблему?

Вот также мой файл Capifony, если он помогает (я заменил домен строкой. Развертывание работает):

set :application, "test"set :domain,      "domain"
set :deploy_to,   "/var/www/html/"set :app_path,    "app"
set :repository,  "file:///var/www/testproj"set :scm,         :git
set :branch, "master"
set :ssh_options, {
forward_agent: true,
paranoid: true,
keys: "~/.ssh/id_rsa"}

set :deploy_via, :rsync_with_remote_cache
default_run_options[:pty] = true

set :user, "deploy"set :model_manager, "doctrine"

role :web,        domain                         # Your HTTP server, Apache/etc
role :app,        domain, :primary => true       # This may be the same as your `Web` server

set  :keep_releases,  3

set :use_sudo, falseset :clear_controllers, false
set :shared_files,      ["app/config/parameters.yml"]
set :shared_children,     [app_path + "/logs", web_path + "/uploads", "vendor"]set :writable_dirs,     ["app/cache", "app/logs"]
set :webserver_user,    "www-data"set :permission_method, :acl
set :use_set_permissions, true

# Be more verbose by uncommenting the following line
logger.level = Logger::MAX_LEVEL

set :assets_install,                true
set :dump_assetic_assets,     true
set :use_composer,              true
set :composer_options,  "--dev --verbose --prefer-dist --optimize-autoloader --no-progress"

Я думал что-то вроде:

set :shared_children,     [app_path + "/logs", web_path + "/uploads", "vendor",web_path + "/newfolder"]set :writable_dirs,     ["app/cache", "app/logs", web_path + "/newfolder", web_path + "/medics"]

И это приведет к

drwxrwxrwx+ 4 deploy deploy   4096 Feb 15 15:36 cache

lrwxrwxrwx  1 deploy deploy     36 Feb 15 15:35 logs -> /var/www/html/testproj/shared/app/logs

lrwxrwxrwx  1 deploy deploy     38 Feb 15 15:35 newfolder-> /var/www/html/testproj/shared/web/newfolder

lrwxrwxrwx  1 deploy deploy     39 Feb 15 15:35 uploads -> /var/www/html/testproj/shared/web/uploads

Это нормально, если Capifony дает эти разрешения для этих папок?

1

Решение

  1. Создайте каталог, в котором вы будете создавать каталоги во время выполнения, например, app/mydirsи добавьте его в историю vcs.

  2. Добавьте каталог в конфигурацию развертывания:

    set :shared_children,     [app_path + "/logs", web_path + "/uploads", "vendor", app_path + "/mydirs"]
    set :writable_dirs,     ["app/cache", "app/logs", "app/mydirs"]
    
  3. Измените свой код, чтобы использовать этот каталог:

    $dir = $kernelDir . '/mydirs/newfolder/';// kerneldir is %kernel.root_dir%
    $fs=new Filesystem();
    $fs->mkdir($dir);
    

Объяснение того, что он делает «автоматически»:

set :permission_method, :acl

Пользы setfacl установить разрешения. Это не меняет владельца каталогов.
Разрешения применяются во время развертывания и влияют только на уже существующие каталоги.

Проблемы безопасности в отношении общедоступных каталогов:

Файлы, загруженные пользователями, никогда не следует доверять. Загрузка файлов в общедоступный каталог открывает множество возможных уязвимостей, и должна выполняться с большой осторожностью. В случае загруженных аватаров, это может быть решено обработкой изображений с помощью GD или imagick перед записью их в общедоступный каталог.

0

Другие решения

Других решений пока нет …