Запретить создание каталогов, но разрешить создание файлов

У меня есть папка, доступная через Samba. Я хочу, чтобы пользователи могли создавать / изменять / удалять файлы, но не создавать / стирать каталоги. Я не нашел способ сделать это. Может быть, с SELinux? Но как?

  • Не удается подключить к автозапуску контейнеры LXC в (Fedora) SELinux
  • Не удалось вывести SystemD на Hardened / SELinux
  • Настроить SELinux, чтобы позволить демонам использовать файлы в нестандартных местоположениях
  • SELinux предотвращает автоматическое монтирование fstab
  • SELinux предотвращает / opt / google / chrome / nacl_helper из getattr доступа к файлу / etc / passwd
  • SELinux - разрешает доступ к открытым / прочитанным rsyslog к некоторым файлам
  • Можно ли включить SELinux в модуль политики?
  • SELinux и OpenVPN?
  • 3 Solutions collect form web for “Запретить создание каталогов, но разрешить создание файлов”

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

    Простым решением будет использование directory mask параметров samba и force directory security mode для рендеринга вновь созданных каталогов, бесполезных (недоступных) пользователям, чтобы они научились не создавать каталоги.

    Смешным (и переносным!) Способом было бы создать так много (невидимых) подкаталогов, что достигнут предел подкаталога файловой системы. Если нужен новый подкаталог, администратор просто переименовал бы один из них.

    Вы можете использовать файловую систему FUSE, например bindfs в сочетании с угонщиком LD_PRELOAD который отключает системные вызовы mkdir и rmdir . Как создать файл wrapper.c с помощью:

     #include <errno.h> int mkdir() { errno = EPERM; return -1; } int rmdir() { errno = EPERM; return -1; } 

    Скомпилируйте его с помощью:

     gcc -fPIC -shared -o wrapper.so wrapper.c 

    И запустите:

     LD_PRELOAD=$PWD/wrapper.so bindfs the-dir the-dir 

    Который будет монтировать the-dir над собой, но без возможности создания или удаления каталогов.

    Тем не менее, вы все равно сможете переименовывать каталоги.

    В Linux и файловой системе ext4 хакерский способ предотвращения создания каталогов (а не других типов файлов) заключается в том, чтобы полагаться на то, что вновь созданные каталоги наследуют записи ACL по умолчанию из их родительского каталога (в дополнение к соответствующему не- -default ACL), в то время как файлы получают только соответствующие ACL-записи, отличные от параметров по умолчанию, и по крайней мере на ext4, для хранения этих записей ACL существует только ограниченное пространство для каждого дескриптора.

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

     $ i=50000; while setfacl -m "d:u:${i}:-" .; do i=$((i + 1)); done setfacl: .: No space left on device 

    (условие выхода в этом цикле происходит тогда, когда setfacl не работает (здесь на ENOSPC, потому что не может быть добавлено больше записей ACL)).

     $ getfacl . | grep -c default: 507 

    Добавлены 507 записей ACL по умолчанию (фактически запрет доступа к любому файлу и директории, созданной там для пользователей от 50000 до 50506).

     $ touch file $ mkdir dir mkdir: cannot create directory 'dir': No space left on device $ ls -l total 4 -rw-r--r--+ 1 chazelas chazelas 0 Nov 27 13:35 file 

    Даже root не может создавать каталоги там:

     $ sudo mkdir x mkdir: cannot create directory 'x': No space left on device 

    Это не мешает пользователям удалять или переименовывать каталоги там (если некоторые из них были созданы до того, как вы добавите эти ACL по умолчанию).

    Linux и Unix - лучшая ОС в мире.