Принудительно перемещенные (не скопированные) файлы наследуют разрешение родительской папки в той же файловой системе - PullRequest
0 голосов
/ 28 августа 2018

Я надеюсь mv действительно больших (10 с ГБ до ТБ) видеофайлов (и пакетов видеофайлов) в пределах одной и той же файловой системы из общего каталога («исходный код») в каталог обработки («» цель ») и в конечном итоге к хранению. Файлы поступают из разных источников в нашей сети, но обычно пользователь, который будет выполнять задачи (www-data), не имеет автоматически права на запись в файлы.

Исходные и целевые каталоги находятся на RAID, и я использую Ubuntu 16.04 и, возможно, в будущем буду работать на Mac.

У меня есть (в Ubuntu):

  • Установите ACL для исходного и целевого каталогов так, чтобы новые файлы получали 777 разрешений и для владельца / группы было установлено значение www-data.
  • Установите mask для предоставления rwx для любых созданных файлов
  • chown chgrp источник и цель www-data

Я знаю, что:

  • Я мог бы использовать cp --no-preserve=all

  • Я мог бы использовать rsync [...] chmod=ugo+rwx [...]

  • Я мог бы sudo chmod каждый раз, когда мне нужно что-то перевести

Но дело здесь в том, чтобы попытаться избежать копирования этих огромных файлов. И эти сценарии работают в основном за веб-приложением (таким образом, пользователь www-data). mv, похоже, не имеет способа изменить права доступа к файлу при его перемещении (я понимаю, почему вы хотели бы это по умолчанию), но есть ли какой-то другой подход, который я должен изучить?

Веб-приложение написано на python (с использованием Flask). Может, есть какой-то метод Python, которого я не видел (os.chmod() получает запрещенное разрешение)?

Спасибо!

Edit: Вот getfacl в исходном каталоге:

# file: raid_share/
# owner: root
# group: www-data
# flags: ss-
user::rwx
group::rwx
mask::rwx
other::rwx
default:user::rwx
default:user:myuser:rwx
default:group::rwx
default:group:www-data:rwx
default:mask::rwx
default:other::rwx

Вот getfacl для каталога, который отправляется SFTP (разумный способ, которым пользователи будут отправлять файлы на сервер) в исходный каталог сервера:

# file: test_05034/
# owner: myuser
# group: www-data
# flags: -s-
user::rwx
user:myuser:rwx         #effective:r-x
group::rwx          #effective:r-x
group:www-data:rwx      #effective:r-x
mask::r-x
other::r-x
default:user::rwx
default:user:myuser:rwx
default:group::rwx
default:group:www-data:rwx
default:mask::rwx
default:other::rwx

и getfacl для файла в этом каталоге:

# file: test_05034_r1.mov
# owner: myuser
# group: www-data
user::rw-
user:myuser:rwx         #effective:rw-
group::rwx          #effective:rw-
group:www-data:rwx      #effective:rw-
mask::rw-
other::rw-

Мой мозг растает ...

1 Ответ

0 голосов
/ 28 августа 2018

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

Предполагая, что это правильно, а не просто перемещать файл, как насчет перемещения и установки для записи? Как:

$ chmod 664 "$file"
$ mv "$file" new folder/.
...