Laravel 9 storage permissions

dakata__92

Super Moderator
Здравейте.
Как правите настройките на достъпите, на файловата система? Дори да ги въведа коректно при създаване на нови папки постоянно ми трещи грешка, че не може да пише в дадена папка или да я създаде. Въпроса сега е да въртя в крон постоянно по-долният код примерно или трябва да се настройва apache user-а? Ако да как да го настроя? Не ми се иска да давам на storage 777 а накрая така ще стане.

Аз при deploy правя следното:
Bash:
# Chane mode permissions to directories.
find /var/www/user/storage -type d -exec chmod 755 {} \;
find /var/www/user/storage/framework -type d -exec chmod 777 {} \;
find /var/www/user/storage/logs -type d -exec chmod 777 {} \;
find /var/www/user/bootstrap -type d -exec chmod 755 {} \;
find /var/www/user/bootstrap/cache -type d -exec chmod 777 {} \;

# Chane mode permissions to files.
find /var/www/user/public -type f -exec chmod 644 {} \;
find /var/www/user/storage -type f -exec chmod 644 {} \;
find /var/www/user/bootstrap -type f -exec chmod 644 {} \;
 
Код:
cd into your Laravel project.
sudo chmod -R 644 /var/www/user/storage/framework
sudo chmod -R 644 /var/www/user/storage/logs

Как ги създаваш? При създаването не е ли добра идея или дори по дифолт да идват създадени с едни еднакви. С какво идва иначе? Но не дръж 755
 
Код:
cd into your Laravel project.
sudo chmod -R 644 /var/www/user/storage/framework
sudo chmod -R 644 /var/www/user/storage/logs

Как ги създаваш? При създаването не е ли добра идея или дори по дифолт да идват създадени с едни еднакви. С какво идва иначе? Но не дръж 755
644 са файловете. Директориите са 755, но когато са на production иска все да са 777 директориите на storage. Писва ми все да пищи за права, на кешове и прочие. Накрая ще си пусна един крон да ги върти и да не ме занимава.


По подразбиране в local диска са visibility public 755 към 644 и private с 700 към 600 по памет.Screenshot_20221026_224730_com.android.chrome.jpg
 
Последно редактирано:
Аз правя следното:

- всички папки във "/storage/" да са със права 0755 -R
- всички файлове, който се създават от скритпа/кода да имат същия owner т.е owner-а да не www-data (примерно), а да е или твоя user, с който се логваш и ъплоудваш файлове, или да са и 2та, така няма да гърми ако утре направиш скрипт да свали 2 файла от нета във /storage папката.

Едит: хубаво е да видиш с крона като мине с какъв user е (вероятно е www-data) и да разрешиш и двата user-а да Own-ват директориите, тук е описана командата.
 
Аз правя следното:

- всички папки във "/storage/" да са със права 0755 -R
- всички файлове, който се създават от скритпа/кода да имат същия owner т.е owner-а да не www-data (примерно), а да е или твоя user, с който се логваш и ъплоудваш файлове, или да са и 2та, така няма да гърми ако утре направиш скрипт да свали 2 файла от нета във /storage папката.

Едит: хубаво е да видиш с крона като мине с какъв user е (вероятно е www-data) и да разрешиш и двата user-а да Own-ват директориите, тук е описана командата.
Искаш да кажеш, че навсякъде трябва да сменям chown при създаване на папка или файл?
 
А кроновете на проекта подкарвате ли ги да са под различен от root потребител? Добра практика ли е да се извикат в crontab с права на apache?
 
Ще дам отговор какво направих. Създадох си команда, която по определен шаблон от конфигурацията, да минава рекурсивно или не определени папки. На практика направих така, че целият проект да е с права 0755 на папките и 0644, на файловете и да е собственост на root потребителя. След това папките storage и bootstrap ги прехвърлих да са собственост на apache потребителя. Кроновете ги движа с root потребителя. Реално при deploy ще изпълнявам логиката за да правя корекции на файловете, но на практика нямам нужда вече да го правя. Чудя се дали и public папката, която е на ниво config да я прехвърля на apache потребителя?
Това са настройките на командата, която си драснах.
PHP:
<?php
return [
    'system:security-project' => [
        /*
         * The directory names in the base_path() function.
         * For project root adjustment you need to use symbol * like array key.
         */
        'directories' => [
            '*' => [ //The entire project belongs to user root.
                'recursive' => true,
                'directory' => [
                    'permissions' => 0755,
                    'group' => 0,
                    'user' => 'root',
                ],
                'file' => [
                    'permissions' => 0644,
                    'group' => 0,
                    'user' => 'root',
                ],
            ],
            'bootstrap' => [ //Directory belongs to user apache.
                'recursive' => true,
                'directory' => [
                    'permissions' => 0755,
                    'group' => 0,
                    'user' => 'apache',
                ],
                'file' => [
                    'permissions' => 0644,
                    'group' => 0,
                    'user' => 'apache',
                ],
            ],
            'storage' => [ //Directory belongs to user apache.
                'recursive' => true,
                'directory' => [
                    'permissions' => 0755,
                    'group' => 0,
                    'user' => 'apache',
                ],
                'file' => [
                    'permissions' => 0644,
                    'group' => 0,
                    'user' => 'apache',
                ],
            ],
            'storage/logs' => [ //Directory belongs to user root.
                'recursive' => true,
                'directory' => [
                    'permissions' => 0755,
                    'group' => 0,
                    'user' => 'root',
                ],
                'file' => [
                    'permissions' => 0644,
                    'group' => 0,
                    'user' => 'root',
                ],
            ],
        ],
    ],
];
 

Back
Горе