Права доступа к каталогу Linux: чтение, запись, но не удаление

Можно ли настроить права доступа к каталогу таким образом, чтобы группа могла читать и записывать файлы и подкаталоги, но ничего не удалять?


person CodeLizard    schedule 15.05.2009    source источник
comment
Я интерпретирую удалить что-либо, чтобы включить запрет на любые модификации существующих файлов. Это то, что вы имели ввиду? Есть ли у ваших пользователей прямой доступ к файловой системе или они заходят через NFS, Samba или какой-либо другой маршрут (FTP)?   -  person jmanning2k    schedule 15.05.2009


Ответы (3)


Может быть достаточно установить липкий бит для каталогов. Пользователи смогут удалять любые файлы, которыми они владеют, но не файлы других пользователей. Этого может быть достаточно для вашего варианта использования. В большинстве систем /tmp настроен таким образом (/tmp имеет значение 1777)

chmod 1775 /контролируемый

Однако, если вы хотите больше контроля, вам придется включить ACL в рассматриваемой файловой системе.

В /etc/fstab добавьте к флагам acl:

/dev/root        /                       ext3    defaults,acl       1 1

Затем вы можете использовать setfacl/getfacl для контроля и просмотра разрешений уровня ACL.

Пример: (Создавайте файлы, после записи они доступны только для чтения, но МОГУТ быть удалены владельцем, но не другими.)

setfacl --set u::rwxs,g::rwx /controlled
setfacl -d --set u::r-x,g::r-x,o::- /controlled

Вы можете установить список ACL по умолчанию для каталога, который будет использоваться всеми созданными там файлами.

Как уже отмечали другие, будьте осторожны, чтобы точно указать, что вы хотите. Вы говорите «записать», но могут ли пользователи перезаписывать свои собственные файлы? Могут ли они изменить существующий контент или просто добавить? После написания он доступен только для чтения? Возможно, вы можете указать более подробную информацию в комментариях.

Наконец, selinux и grsecurity обеспечивают еще больший контроль, но это уже совсем другая проблема. Это может быть довольно сложно для настройки.

person jmanning2k    schedule 15.05.2009
comment
Вы имеете в виду 1777 для /tmp? 4 указывает на бит SetUID (который, я полагаю, имеет значение только для каталога в системах, производных от BSD). - person Jonathan Leffler; 15.03.2010
comment
Я получаю всевозможные ошибки при запуске setfacl --set u::rwxs,g::rwx /controlled (где /control — это папка, которую нужно изменить). setfacl -m u::rwx,g::rwx /controlled - person Buttle Butkus; 15.11.2012
comment
Если 1775 не работает (а у меня не работало), я поменял на 1777 и все заработало. Это гарантирует, что каждый может писать в каталог, но не может удалять (и читать) файлы других пользователей. - person Jobst; 30.05.2017

Ну, это будет r-x для этого каталога.

И файлы в нем будут иметь rw-.

Это связано с тем, что файл можно записать, если его разрешения позволяют запись, но его можно удалить только в том случае, если разрешения его каталога разрешают запись.

person alamar    schedule 15.05.2009
comment
вы также не можете перемещать файлы - person Selah; 28.07.2017
comment
Липкий бит также довольно актуален. - person alamar; 29.03.2019

Возможно это или нет, убедитесь, что перезапись 0-байтового файла не эквивалентна удалению файла в вашем конкретном контексте.

person bacar    schedule 15.05.2009
comment
Вы можете использовать 'chattr +a', что означает, что файл может быть открыт только в режиме добавления для записи, то есть вы не можете переписать существующий контент, но вы можете добавить новый контент в конец. Это должно предотвратить усечение. - person jmanning2k; 15.05.2009
comment
Однако chattr +a требует корневого доступа для установки новых файлов. - person bdonlan; 15.05.2009