Это НЕ ваш стандартный вопрос "как работают разрешения"!
Я думаю, ответ, вероятно, будет включать ACL, но я не знаю, как именно.
Я испортил стандартные разрешения, руководство, липкий бит и т. Д. Не работает.
Что я хочу: пользователь будет загружать файлы. Пользователь будет иметь возможность изменять права доступа к файлам, чтобы разрешить выполнение. Но пользователь не сможет изменить содержимое файла после его создания. И пользователь не сможет удалить файл.
Пожалуйста помоги! Я уже часами рвал волосы!
РЕДАКТИРОВАТЬ:
Спасибо за ответы, но пока они, похоже, не рассматривают, как сделать эту работу автоматически для вновь созданных файлов.
Возможное решение:
find -mtime -1 -exec chattr +i '{}' \+
2-е возможное решение:
inotifywait -m -e create --format %f .
Теперь мне просто нужно выяснить, как передать это в чат.
Вы можете попробовать использовать chattr
Пример:
urug@nada.cclan:~$ sudo chattr +i plik.txt
urug@nada.cclan:~$ rm plik.txt
rm: remove write-protected regular empty file `plik.txt'? y
rm: cannot remove `plik.txt': Operation not permitted
urug@nada.cclan:~$ chattr -i plik.txt
chattr: Operation not permitted while setting flags on plik.txt
Использовать атрибуты
sudo chattr +i /path/to/file
Удалить "неизменяемый" флаг с помощью
sudo chattr -i /path/to/file
Однако это не позволит вам изменить права доступа к файлу. Поэтому вам понадобится какой-то способ (как root) добавить разрешение на выполнение или что-то еще по запросу пользователя. Также атрибуты не добавляются по умолчанию; вы должны добавить что-нибудь, что сделает это.
Я оставлю это читателю в качестве упражнения.
Используйте inotify или другой механизм наблюдения по вашему выбору, чтобы найти новые файлы в каталоге загрузки и переместить их в новый каталог, для которого у исходного пользователя нет разрешений.
SELinux может быть одним из способов решения этой проблемы - связать уникальный тип со всеми пользователями, у которых будет эта «ограниченная способность». Установите политику SELinux, чтобы разрешить создание файлов в этом каталоге для этих типов пользователей, но не изменять и т.д. Теоретически - должно работать. Видеть Учебное пособие по Gentoo SELinux, в частности о:
allow auditd_t <type>:file { <permission> };