Не удалось записать файл журнала (отказано в доступе)

Linux
Не удалось записать файл журнала (отказано в доступе)

Друзья, которые использовали Laravel, возможно, столкнулись с проблемой сбоя записи ежедневного лог-файла после установки фреймворка, далее мы обсудим причины сбоя записи лог-файла и соответствующие решения.

Прежде чем говорить об этой проблеме, может быть необходимо кратко рассказать о правах собственности и разрешениях файлов в системе Linux.

  • Ownership

  • User

    Пользователь является владельцем файла, по умолчанию пользователь создает файл, а владельцем файла является пользователь.

  • Group

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

  • Other

    Любой другой пользователь может получить доступ к файлу, поэтому предоставление разрешения другому пользователю эквивалентно предоставлению этого разрешения для всех пользователей.

  • Permission

    Каждый файл и каталог в системе UNIX/Linux имеет 3 разрешения, ниже приводится обсуждение трех владельцев.

    • Читать:Это разрешение дает вам право открывать и читать файл. Имея доступ для чтения к каталогу, вы можете просмотреть его содержимое.
    • Напишите:Прочитайте доступ, вы можете изменить содержимое файла. Имейте разрешения на запись в каталог, вы можете добавить, удалить и переименовать файлы в этом каталоге. Рассмотрим сценарий, в котором у вас есть запись в файл, но не записать доступ к файлам, хранящимся в каталоге, вы все равно можете изменить содержимое файла, но вы не можете переименовать, перемещать и удалять файлы в каталоге.
    • Выполнять:В системах Windows исполняемая программа обычно имеет суффикс .exe, и ее можно легко запустить. В UNIX/Linux вы не можете запустить программу, если вам не предоставлено разрешение на выполнение. Если разрешения на выполнение не предоставлены, вы можете просматривать и изменять программный код (предоставлены разрешения на чтение и запись), но не можете его запускать.

Скриншот отображения информации о файлах под linux

Скриншот отображения информации каталога под linux

На приведенном выше снимке экрана показана информация о файле и папке, мы можем видеть:

  • rозначает читаемый,wпредставляет записываемый,xпредставляет собой исполняемый файл.
  • отображение первого файла-, файл показываетd.
  • Первая картинка выше,rw-rw-r-—середина. Первая группаrw-Указывает, что владелец файла имеет права на чтение, запись и неисполнение файла. Вторая группаrw-Указывает, что пользователь в группе, к которой принадлежит файл, имеет права на чтение, запись и неисполнение файла. Третья группаr-—Указывает, что у любого другого пользователя есть разрешения на чтение, запись и выполнение файла.
  • rw-rw-r--представлен в двоичном виде как664, каждый с разрешения1, иначе0, первые триrw-представлен в двоичном виде как110Он преобразуется в десятичный6, две последние группы и так далее, и, наконец, получим664.
  • первая картинка вышеdior www-dataУказывает, что владельцем файла являетсяdiorпользователь, файл принадлежитwww-dataГруппа.

Мы знаем, что журналы во многих прикладных системах записываются в файлы, и файлы именуются по дате. Таким образом, пользователь, создавший журнал в первый раз, особенно важен, если файл создаетсяOnwerа такжеGroupНет, другие пользовательские триггеры для записи в файл журнала не сработают.

Далее мы обсудим, сколько разных пользователей могут создавать лог-файлы:

  • CrontabЗапланированные задачи, выполненные вCrontabПользователь, связанный с файлом, созданным в это времяOwnerа такжеGroupЗначения пользовательское и значение по умолчаниюGroup.
  • Некоторые резидентные фоновые процессы, такие как в Laravelqueue work, файл журнала, созданный в это времяOwnerа такжеGroupЗначения — это пользователь, выполняющий процесс, и значение по умолчанию, которому он принадлежит.Group.
  • Файлы журналов, созданные обычными пользователями, обращающимися к веб-сайту, файлы журналов, созданные в это времяOwnerа такжеGroupобеwww-data,www-dataПользователь — это пользователь веб-сервера по умолчанию.

Из приведенного выше анализа мы, вероятно, нашли решение проблемы.

  • Разрешения для исполняющего пользователя для создания файла журнала:664Более уместно, что требует, чтобы umask текущего пользователя был0002.
  • По умолчанию для текущего исполняющего пользователяGroupдолжен быть установлен наwww-data.

Вот мое конкретное решение:

Укажите пользователя www-data для выполнения crontab:

sudo crontab -u www-data -e

Измените разрешения для создания файлов журнала в Laravel:

редактироватьconfog/logging.phpдокумент

Добавить к'permission' => 0664

'daily' => [
		'driver' => 'daily',
		'path' => storage_path('logs/laravel.log'),
		'level' => 'debug',
		'days' => 14,
		'permission' => 0664,
],

У вас есть лучший способ? Добро пожаловать, чтобы оставить сообщение!