Почему пользователь www-data не имеет доступа к файлам в домашней директории другого пользователя?

У меня возникла проблема с установкой Debian 12 через WSL2 на Windows 10. При установке nginx и создании папки для сайта с файлом index.html я сталкиваюсь с ошибкой "permission denied" в логах nginx. Вот что я уже проверил: 

1. Я попытался прочитать файл index.html от имени пользователя www-data:
   <pre><code>$ sudo -u www-data cat ./html/index.html
   cat: ./html/index.html: Permission denied</code></pre>
   
2. Однако, если я проверяю доступ к файлу index.html в другой папке, все работает корректно:
   <pre><code>$ sudo -u www-data cat ./index.html
   TEST (в файле просто написано слово "TEST")</code></pre>
   
3. Я проверил группы пользователя:
   <pre><code>$ id -Gn
   users www-data</code></pre>
   
4. И группы для www-data:
   <pre><code>$ sudo -u www-data id -Gn
   www-data users</code></pre>
   
5. Информация о папке выглядит следующим образом:
   <pre><code>File: /home/testuser/html
     Type: directory
     Size: 5 bytes      Blocks: 8          IO Block: 4096   directory
   Device: 8,32 Inode: 16174       Links: 2
    Attrs: --------------e-------
   Access: (0755/drwxr-xr-x)  Uid: (1000/testuser)   Gid: (100/users)</code></pre>

Из описания проблемы видно, что nginx, запущенный от пользователя www-data, не может читать папки пользователей. Что я мог упустить, если на других серверах аналогичная настройка работает?
  • 30 декабря 2024 г. 13:23
Ответы на вопрос 2
Проблема, с которой вы столкнулись, связана с тем, как работают разрешения в Unix-подобных системах, таких как Debian. Давайте рассмотрим основные моменты, которые могут помочь вам понять, почему пользователь `www-data` не имеет доступа к файлам в вашем домашнем каталоге (`/home/testuser/html`).

### Разрешения и владельцы

1. **Разрешения на директорию**: У вас есть директория `/home/testuser/html`, для которой установлены разрешения `0755`. Это означает, что:
   - Владелец (пользователь `testuser`) имеет полные права (`rwx`).
   - Группа (`users`) имеет права на чтение и выполнение (`r-x`).
   - Остальные пользователи имеют такие же права, как группа (`r-x`).

   Таким образом, если `www-data` не принадлежит группе `users`, он будет иметь только права на чтение и выполнение, что позволяет ему входить в директорию, но не читать содержимое.

2. **Чтение файла в директории**: Для того чтобы `www-data` мог прочитать файл `index.html`, ему нужно иметь права доступа к директории, содержащей этот файл. При этом, даже если у него есть права на чтение файла, он должен иметь право `execute` на директории, чтобы получить доступ к их содержимому.

### Возможные решения

1. **Добавление пользователя www-data в группу users**:
   Вы можете добавить пользователя `www-data` в группу `users`, чтобы предоставить ему доступ к директории:
   ```bash
   sudo usermod -aG users www-data
   ```

   После внесения изменений, вам нужно перезапустить сервис nginx или перезагрузить систему, чтобы изменения вступили в силу.

2. **Изменение группы файлов и директорий**:
   Еще один способ — изменить группу непосредственно для папки `/home/testuser/html` и всех файлов в ней:
   ```bash
   sudo chown -R testuser:users /home/testuser/html
   ```

   Или же вы можете изменить разрешения, чтобы группа `www-data` имела доступ к `index.html`:
   ```bash
   sudo chmod 750 /home/testuser/html/index.html
   ```

   или
   ```bash
   sudo chmod 775 /home/testuser/html
   ```

3. **Разрешения на толстовку**:
   Изменив права доступа к папке, можно попробовать добавить права доступа для других:
   ```bash
   sudo chmod o+rx /home/testuser/html
   ```

### Итог
Проблема в том, что `www-data` не может получить доступ к содержимому директории из-за ограничений прав доступа. Изменение групп файлов/директорий или добавление пользователя `www-data` в соответствующую группу решит вашу проблему.
Нет разрешения на traversal папки html (x)
Похожие вопросы