Linux: создавать файлы и директории, но не удалять их

У меня есть процесс, который создает каталоги и файлы в рабочем каталоге, например:

/workingdir/file1
/workingdir/file2
/workingdir/dir1/file1
/workingdir/dir1/dir2/file1
/workingdir/dir1/file2

Мне нужно избегать удаления / перезаписи созданных папок / файлов для этого пользователя, но разрешить последующее создание папок / подпапок / файлов. Я пытаюсь разрешений, Gid, ACL без удачи.

Как правильно это сделать? (я могу использовать работу cron при необходимости)

2 ответа

Решение

Вы должны быть в состоянии достичь чего-то, устанавливая расширенные атрибуты с помощью chattr.

использование chattr +a в ваших каталогах. Это позволит добавить их, но не позволит удалить файлы.

использование chattr +i чтобы сделать ваши файлы неизменяемыми - их нельзя изменить, если это установлено.

Файл с установленным атрибутом 'a' может быть открыт только для записи в режиме добавления. Только суперпользователь или процесс, обладающий возможностью CAP_LINUX_IMMUTABLE, может установить или очистить этот атрибут.

Файл с атрибутом "i" не может быть изменен: его нельзя удалить или переименовать, невозможно создать ссылку на этот файл и данные не могут быть записаны в файл. Только суперпользователь или процесс, обладающий возможностью CAP_LINUX_IMMUTABLE, может установить или очистить этот атрибут.

Это невозможно при стандартных разрешениях для файлов POSIX unix.

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

chmod 1775 /directory

ОБНОВЛЕНИЕ: с SELinux или Apparmor вы можете получить более точный контроль, но при таком подходе вы должны дать разрешения процессам для файлов.

ОБНОВЛЕНИЕ: у вас есть возможность использовать системный флаг только для добавления для отдельных файлов. Не на всех файловых системах: chattr + имя файла

Другие вопросы по тегам