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

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

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 по умолчанию).

  • как создать пользовательскую метку SELinux
  • Отключите SELinux в apache, чтобы остановить предупреждение.
  • Как преобразовать файл SELinux mypol.te в команды semanage для скрипта
  • Проблемы с Fedora 20 и шмелем
  • Использование sys-сервера без пароля на CentOS 6
  • Не удалось удалить файл в Fedora
  • Как решить, почему Apache пытается «execmem»?
  • Ошибка при создании libxcrypt
  • Добавление fcontext в неограниченное приложение
  • Почему файловая система SELinux имеет собственное нулевое устройство?
  • Проблема с запуском «selinux sandbox» с java
  • Interesting Posts

    Использование cron для запуска процесса на терминале без использования экрана?

    tunctl жалуется, что устройство или ресурс заняты, если они используются в сценарии / etc / qemu-ifup

    Nginx недоступен с локального хоста, но доступен по сети

    Удалять файлы старше X дней с последним измененным файлом

    Процесс, выполняемый как root, при выполнении mount, устанавливается для `self`, как сделать mount глобальным?

    Как файлы / proc / net заполняются в Linux / Unix?

    Поддерживает ли Networkmanager зашифрованные секретные ключи?

    Как удалить файл на удаленном компьютере через SSH с помощью сценария оболочки?

    Программа Strace Hello World

    Как эффективно разделить большой текстовый файл без разделения многострочных записей?

    Задержка ввода-вывода диска с использованием файла / proc / vmstat

    не работает в Arch Linux

    Как исправить кодировку имени файла

    Как расколоть stdin в несколько многострочных строк и поместить каждый из них в разные переменные bash

    Измените LibreOffice на определенный размер, даже в полноэкранном представлении

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