Назад | Перейти на главную страницу

ubuntu, папка perms, drwxrwx ---, пользователь php в группе, не может создать файл

Я застрял и мне нужна помощь в понимании разрешения на создание файла для членов группы.


в php я хочу открыть / создать файл в папке, принадлежащей mysql: mysql (для импорта данных в mysql)

папка -ld

drwxrwx--- 2 mysql mysql 4096 Dec 14 14:33 /var/lib/mysql-files

php работает как пользователь www-data

я добавил пользователя www-data в группу mysql

sudo usermod -a -G groupName userName 

проверено

sudo groups www-data
    www-data : www-data mysql

похоже, моя учетная запись пользователя php «www-data» имеет права на запись в папку через членство в группе, но я получаю сообщение об ошибке 13 «доступ запрещен».


при вводе этого вопроса аналогичный вопрос (https://serverfault.com/a/534000/65092)

получил ответ, что родительские папки (/ var и / var / lib) должны иметь разрешения x для пользователя или группы, я понимаю, что это означает:

php пользователь www-data должен иметь возможность заглядывать в / var, читать / lib, читать / mysql-files.

/var = drwxr-xr-x 16 root root 
/var/lib = drwxr-xr-x 62 root root 

и похоже, что это уже включено.


какие-либо предложения или комментарии? Спасибо.

Решение:

Я применил предложенное Майком решение ссылки

sudo chmod g+s /var/li/mysql-files

(который должен установить идентификатор группы любых новых созданных файлов, равный группе его родительской папки), но мне все еще не удалось создать файл в этой папке с помощью php.

При дальнейшем чтении я узнал, что разрешения применяются после входа в систему (да, конечно), но поскольку пользовательские www-данные не имеют пароля и не могут войти в систему, мне нужно было перезагрузить сервер, чтобы увидеть, повлияют ли новые разрешения. .

Затем я протестировал создание файла через php с терминала, но он все еще не работал. Вскоре я понял, что cli php был запущен из моей учетной записи на терминале, поэтому он не работал как пользовательские www-данные, поэтому в разрешении отказано. Я запустил php из терминала для работы под пользовательскими www-данными sudo -u www-data php -a и Виола! файл был создан.

проверка прав доступа к файлу после создания, владельцем был www-data, группа была правильно настроена на группу ее родительской папки, однако разрешение на запись не было установлено. Дальнейшее чтение об umask привело меня к использованию sudo setfacl -d -m group:mysql:rwx /var/lib/mysql-files (чтобы настроить список управления доступом, чтобы включить разрешение на запись для группы для новых файлов, созданных в папке. Оказалось, что разрешение на запись в папку уже было включено для групп, поэтому я не уверен, зачем понадобился этот дополнительный шаг.)

Дальнейший тест из командной строки, запускающий php от имени пользователя www-data, прошел.

Тест с использованием полного скрипта php пройден.

Спасибо!