
Я создаю несколько папок для пользователей (userA/, userB/ и т. д.), где любой может создавать/читать файлы/папки в любом каталоге (userC может создавать fileX внутри userA/). Однако только владелец каталога может изменять или удалять файлы в этой папке (userC может изменять/удалять файлы только внутри userC/).
Я попробовал изменить права доступа к каталогу на 7777, однако SUID не применяется к каталогам.
Как разрешить загруженным файлам наследовать владельца каталога?
Редактировать:UserZ владеет каталогом dirZ/. UserZ может создавать (загружать), изменять, удалять и читать все внутри dirZ/.
Аналогично, UserY владеет каталогом dirY/. Пользователь Y может создавать, изменять, удалять и читать все внутри dirY/.
Пользователь Y может получить доступ к dirZ/. Пользователь Y может создавать или читать что угодно внутри dirZ/. Пользователь Yне могуизменить или удалить что-либо внутри dirZ/.
Аналогично, UserZ может получить доступ к dirY/. UserZ может создавать или читать что угодно внутри dirY/. UserZне могуизменить или удалить что-либо внутри dirY/.
решение1
Довольно странно, что вам это может понадобиться. Если вы хотите, чтобы userC мог создавать и удалять файлы внутри userA
/, дайте userC разрешение на запись в каталог. С вашей настройкой самым простым способом будет поместить всех этих пользователей в общую группу mygroup
и сделать все пользовательские каталоги доступными для записи этой группой.
chgrp mygroup userA userB userC
chmod g+w userA userB userC
Использоватьсписки контроля доступа (ACL)если вам нужна большая гибкость (например, нескольким группам разрешен доступ к этим каталогам). См.Сделать все новые файлы в каталоге доступными для группыесли вам нужна помощь в активации ACL в вашей системе.
Если вы хотите, чтобы пользователи могли изменять файлы в каталоге, отличном от их собственного, либо сделайте файлы доступными для записи группой, либо установите для каталога список контроля доступа (ACL) по умолчанию.
setfacl -d -m group:mygroup:rwx userA userB userC
Если вам действительно нужно сменить владельца файла (но почему это важно, если все файлы в любом случае доступны одному и тому же набору пользователей?), вы можете сделать это с помощью задания, которое запускается от имени пользователя root при загрузке файла. В Linuxвы можете использовать инструмент на основе inotifyесли вам это действительно нужно, но лучше сменить инструмент, который выполняет загрузку (во-первых, при использовании решения на основе inotify существует небольшой промежуток времени, когда файл имеет неправильного владельца).
решение2
Файловые системы Unix не имеют контроля доступа, подобного Windows, который позволил бы вам различать создание и изменение файла - как только вы даете пользователю разрешение на создание файлов в каталоге (chmod +w), он/она также сможет изменять их. Следовательно, вам нужна серверная часть, чтобы обеспечить эту дополнительную функциональность.
Например, vsftpd
можно ли chown
файлы дляанонимныйсоединения - я ожидаю, что его можно будет (более или менее легко) расширить на другие учетные записи пользователей, и есть вероятность, что некоторые другие FTP-демоны уже имеют эту функцию.
Если вам не обязательно использовать FTP,Samba
похоже, мы можем сделать то, что вам нужно — рассмотрите вариант (за акцию) inherit owner
.