LINUX.ORG.RU
ФорумAdmin

nginx 403 при попытке открыть файл из хранилища s3.

 , ,


0

1

Есть сайт с папкой uploads, в которой накопилось много говна, что диск сервера уже на исходе.

Я примонтировал к папке uploads при помощи утилиты s3fs хранилище s3. Все классно примонтировалось. Права на папку uploads такие же, как и были.

Кидаю test.png в папку uploads, пытаюсь открыть соответствующий URL в браузере – и получаю 403.

При том, что в оригинальной папке uploads (которая хранится на самом диске сервера, и к ней не монтируется хранилище s3) этот же файл с тем же владельцем и правами прекрасно открывается.

Короче, у папки uploads и файла test.png один и тот же владелец и права в обоих случаях, но в случае, если папка uploads – это хранилище s3 – я получаю 403, а в случае, если uploads – это локальное хранилище сервера – файл прекрасно открывается в браузере.

Если что – сервер с сайтом тоже в Амазоне, то есть, как бы это не то, что сервер у меня дома. Сервер и хранилище s3 вроде как «близко» друг к другу.

Короче, капец. Не пойму, в чем дело.

Перемещено hobbit из general

Ответ на: комментарий от firkax

А логи nginx-а посмотреть ты не догадался?

Ну посмотрел я логи.

Там такое

2025/03/30 13:15:45 [error] 831#831: *439 openat() "/var/www/mysite.com/web/wp-content/uploads/test.png" failed (13: Permission denied), client: 1.2.3.4, server: mysite.com, request: "GET /wp-content/uploads/test.png HTTP/2.0", host: "mysite.com"

И что мне делать с этим? Permission denied. Права на файл и владелец у файла точно такие, как и у локального файла.

truebin
() автор топика
Последнее исправление: truebin (всего исправлений: 1)
Ответ на: комментарий от firkax

Это fuse? Запускал рутом?

Рутом запускал, и в команде монтирования писал от кого монтировать папку – от того юзера, от которого запущен сайт.

Да, это fuse.

Что mount пишет про это монтирование?

Вот, что пишет:

s3fs on /var/www/clients/client1/web3/web/wp-content/uploads type fuse.s3fs (rw,nosuid,nodev,relatime,user_id=0,group_id=0)
truebin
() автор топика
Последнее исправление: truebin (всего исправлений: 2)
Ответ на: комментарий от truebin

и в команде монтирования писал от кого монтировать папку – от того юзера, от которого запущен сайт.

user_id=0,group_id=0

Покажи ls -la /var/www/clients/client1/web3/web/wp-content/ | grep uploads

Dimez ★★★★★
()
Последнее исправление: Dimez (всего исправлений: 1)
Ответ на: комментарий от Dimez

Вот:

root@www-test:~# ls -la /var/www/clients/client1/web3/web/wp-content/ | grep uploads
drwxr-xr-x  1 web3 client1      0 Jan  1  1970 uploads
drwxr-xr-x 14 web3 client1 147456 Mar 30 12:51 uploads-original

uploads-original – это локальная папка с файлами (переименовал её).

uploads – в эту папку примонтировано хранилище s3.

user_id=0,group_id=0 - и да, mount показывает так.

Команда для монтирования такая (уберу из нее адреса своих ресурсов):

s3fs -o iam_role=auto -o endpoint=eu-*** -o url="https://s3-eu-***.amazonaws.com" -o umask=0022,uid=5005,gid=5005 mybucket:/uploads /var/www/mysite.com/web/wp-content/uploads
truebin
() автор топика
Последнее исправление: truebin (всего исправлений: 3)
  1. fuse часто монтируются только для того пользователя, который и смонтировал диск. все остальные получат permission denied, даже если этот другой - root. монтируй от того же пользователя или внимательно читай доки

  2. selinux (не похоже) или apparmor

  3. заведи привычку проверять права доступа через sudo -u user /bin/bash, а потом file. сразу отпадет много вопросов

router ★★★★★
()
Ответ на: комментарий от router

fuse часто монтируются только для того пользователя, который и смонтировал диск. все остальные получат permission denied, даже если этот другой - root. монтируй от того же пользователя или внимательно читай доки

Например, sshfs

       By default, only the mounting user will be able to access the filesystem. Access for
       other  users  can be enabled by passing -o allow_other. In this case you most likely
       also want to use -o default_permissions.

доки к s3fs читать будешь сам ;)

router ★★★★★
()
Ответ на: комментарий от router

монтируй от того же пользователя

Ну а как монтировать от системного пользователя? Я же указал в команде от какого пользователя монтировать при помощи параметров uid=5005,gid=5005 – или этого недостаточно?

Вы не могли бы привести пример для монтирования, допустим, ext4 от юзера 5005 ?

truebin
() автор топика
Ответ на: комментарий от truebin

в смысле как? sudo -u /bin/bash, потом монтируй

Я же указал в команде от какого пользователя монтировать при помощи параметров uid=5005,gid=5005

А ты знаешь, что эти параметры делают?

router ★★★★★
()
Ответ на: комментарий от router

fuse часто монтируются только для того пользователя, который и смонтировал диск. все остальные получат permission denied, даже если этот другой - root. монтируй от того же пользователя или внимательно читай доки

Не «часто» а всегда, если не указано allow_other. Что и у автора причина проблемы.

firkax ★★★★★
()
Ответ на: комментарий от router

allow_other это не фича sshfs, это фича fuse, оно везде одинаково работает.

А вот права доступа (которые chown делает) могут работать по-разному. Если не указано default_permissions то проверятся они на стороне fuse-демона, который может их и игнорировать, как с этим в s3fs я не знаю.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)