Одна из проблем с командой chown
(но на самом деле, это связано с системным вызовом chown()
) заключается в том, что в качестве меры безопасности она удаляет биты setuid и setgid в разрешениях.
Это также не распространяется на ACL.
Для работы с этим можно использовать rsync
на каталоге поверх себя в режиме update и с опцией --usermap
:
$ ls -ln
total 6732
-rwsr-xr-x 1 1002 1000 6888896 Nov 3 21:50 a
drwxr-xr-x+ 2 1002 1000 4096 Nov 3 21:46 x
$ getfacl -n x
# file: x
# owner: 1002
# group: 1000
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:1002:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
$ sudo rsync -rAau --usermap=1002:1000 . .
$ ls -ln
total 6732
-rwsr-xr-x 1 1000 1000 6888896 Nov 3 21:50 a
drwxr-xr-x+ 2 1000 1000 4096 Nov 3 21:46 x
$ getfacl -n x
# file: x
# owner: 1000
# group: 1000
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:1000:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
1002 изменено на 1000 как в владельцах файлов, так и в записях ACL.
Она также корректно обрабатывает сим-ссылки.
Взгляните на pam-tmpdir и pam-mount.
pam-mount mounts и размонтирует каталоги, когда сессии PAM начинаются и заканчиваются (в том числе, когда пользователи входят и выходят из системы).
pam-tmpdir создаёт пользовательскую временную директорию каждый раз, когда кто-то входит в систему, что может пригодиться, если вы пытаетесь изолировать пользователей друг от друга.
Обратите внимание, что в любом случае могут быть демоны, у которых есть файлы в /tmp
, которые они ожидают хранить дольше, чем сеанс пользователя; поэтому я бы порекомендовал использовать временную директорию, специфичную для пользователя, с использованием либо pam-mount, либо pam-tmpdir.