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 + имя файла