Я хочу дать пользователям возможность создавать файлы записи и чтения в другом пользовательском каталоге, но не иметь возможности удалить файл после создания (закрепление не будет работать здесь ...), например:
У меня есть пользователь manager
с каталогом. У repository
меня есть пользователь, worker1
которому нужно записывать файлы, /manager/repository
но я не могу удалить файлы. У
меня есть пользователь, worker2
которому нужно записать файлы, /manager/repository
но я не могу удалить файлы, в
которые есть пользователь, worker3
которому нужно записать файлы, /manager/repository
но я не могу удалить файлы
но worker 1-2-3
не может удалить файлы только после создания manager
и root
может удалить worker 1-2-3
созданные файлы .
Я попробовал немного chown
и chmod
уловок с применением липкой части без успеха.
источник
worker*
Пишут ли пользователи в каталог определенным образом? Вы упомянули в комментарии, что файлы журналов идут сюда, значит ли это, что для создания файлов здесь запускается определенный исполняемый файл? Если это так, вы можете датьworker
группеsudo
разрешение на запуск исполняемого файла от имениmanager
. Затем исполняемый файл будет создавать журналы какmanager
пользователь, который может быть доступен для чтения рабочим.Ответы:
В отличие от Windows, в Unix / Linux нет четкого разрешения на удаление. Право на удаление (или создание или переименование) файла привязано к каталогу, в котором он находится. Удалите разрешение на запись для рабочих
/manager/repository/
, чтобы запретить рабочим создавать, удалять и переименовывать файлы.Обратите внимание, что невозможно разрешить создание файлов, но запретить их удаление.
источник
Прежде всего убедитесь, что ACL включен в вашей системе, затем выполните эту команду
Как это устроено
Эта команда предоставит права на чтение, запись и выполнение для владельца каталога
/manager/repository
. Он будет отменить все разрешения наworker1
,worker2
иworker3
.Это даст другим пользователям доступ для чтения и записи, но запретит удаление.
От
man setfacl
:источник
echo " " > $file
то, что содержимое файла будет "" ", что технически является записью, но эффективно удаляет содержимое. Похоже, что реальный репозиторий, такой как svn, будет лучшим выбором.Чтобы сделать это с разрешениями, вам потребуется система с поддержкой списков ACL, аналогичных спискам управления доступом NFSv4. Например, во FreeBSD, если файловая система смонтирована с
nfsv4acls
флагом, вы можете сделать:Чтобы явно отказать в
delete_child
разрешении членамworker-group
группы.Однако обратите внимание, что, поскольку работники будут владельцами создаваемых ими файлов, они все равно смогут изменять списки ACL для них и, предоставляя себе
delete
разрешение, это будет иметь приоритет надdelete_child
разрешением родительского каталога, и я не Конечно, есть способ обойти это (по крайней мере, в файловых системах UFS во FreeBSD). Например, они могут сделать:источник
Чтобы взять разрешения на запись из
/manager/repository
папки. Таким образом, все пользователи, не являющиеся root, смогут писать или удалять файлы внутри/manager/repository
, но не удалять файлы из этого каталога.источник
мы можем изменить файлы и папки, но не можем удалить.
Чтобы удалить атрибуты, выполните следующие команды:
Для файлов:
Для каталогов:
источник
a
атрибут означает «только добавление». Могут ли пользователи редактировать эти файлы? (2) Каково влияние установкиa
атрибута на каталог?