ACL setfacl по умолчанию не влияет на распакованный .tar - PullRequest
0 голосов
/ 06 августа 2020

Я устанавливаю текущий и стандартный Linux ACL для текущего каталога и могу удалить даже файлы, принадлежащие root:

iivanov@dssl /tmp/facl $ setfacl -dm u:iivanov:rwx .
iivanov@dssl /tmp/facl $ setfacl -m u:iivanov:rwx .
iivanov@dssl /tmp/facl $ sudo mkdir -p foo; sudo touch foo/x; rm -f foo/x; echo $?
0

Теперь у меня есть этот архив, содержимое которого принадлежит root:

iivanov@dssl /tmp/facl $ tar -tvf ../foo.tar
drwxr-xr-x root/root         0 2020-08-06 13:32 foo/
drwx------ root/root         0 2020-08-06 13:32 foo/foo/
-rw-r--r-- root/root         0 2020-08-06 13:32 foo/foo/baz
-rw-r--r-- root/root         0 2020-08-06 13:32 foo/foo/bar
-rw-r--r-- root/root         0 2020-08-06 13:32 foo/foo/foo
-rw-r--r-- root/root         0 2020-08-06 13:24 foo/baz
-rw-r--r-- root/root         0 2020-08-06 13:24 foo/bar

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

iivanov@dssl /tmp/facl $ sudo tar -xf ../foo.tar; rm -rf foo
rm: cannot remove 'foo/bar': Permission denied
rm: cannot remove 'foo/baz': Permission denied
rm: cannot remove 'foo/foo': Permission denied

Если я затем вручную создаю какой-то файл в в этом каталоге, я вижу, что getfacl выводит для него разные эффективные разрешения:

iivanov@dssl /tmp/facl $ sudo touch foo/x; getfacl foo/bar foo/x
# file: foo/bar
# owner: root
# group: root
user::rw-
user:iivanov:rwx #effective:r--
group::r-x       #effective:r--
mask::r--
other::r--

# file: foo/x
# owner: root
# group: root
user::rw-
user:iivanov:rwx #effective:rw-
group::r-x       #effective:r--
mask::rw-
other::r--

Могу ли я каким-то образом обойти это поведение и заставить распакованное содержимое tar вести себя аналогично регулярно создаваемым файлам? Я предполагаю, что могу просто setfacl -Rm foo, но это кажется немного странным

...