Предотвратите каталоги создания, но позвольте создавать файлы

Учтите предупреждение ниже, если Вы имеете дело с производственной системой!


Можно установить node.js через apt-get.

# echo deb http://ftp.us.debian.org/debian/ sid main \
    > /etc/apt/sources.list.d/sid.list
# apt-get update
# apt-get install nodejs

ПРЕДУПРЕЖДЕНИЕ: Однако Вы не должны, вероятно, делать этого, так как Вы устанавливаете программное обеспечение от ответвления разработки Debian (Sid). Это предупреждение должно особенно быть учтено, если Вы имеете дело с производственной машиной также!!!

5
05.06.2013, 01:45
3 ответа

Изящный путь использовал бы richacls. Но это еще не торжественная часть ядра и таким образом может быть трудно использовать для Вас.

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

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

8
27.01.2020, 20:32
  • 1
    ... измененные спецификации, некоторые пользователи должны смочь создать каталоги, таким образом, я попытаюсь перекомпилировать ядро с richacl –  acvF 05.06.2013, 19:13

То, что можно сделать, использовать файловую систему FUSE как bindfs в сочетании с a LD_PRELOAD угонщик, который отключает mkdir и rmdir системные вызовы. Как создают a 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 по себе, но без способности создания или удаления каталогов.

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

6
27.01.2020, 20:32

в файловой системе Linux и Ext4, хаки для предотвращения создания каталогов (а не другие типы файлов), чтобы быть созданным, предназначена для того, чтобы полагаться на то, что вновь созданные каталоги наследовать ACL из их Родительский каталог (в дополнение к соответствующим записям ACL Non-по умолчанию) во время того, что файлы получают только соответствующие записи Non-defult acl и на EXT4, по меньшей мере, есть только ограниченное пространство на один inode для хранения этих записей ACL Отказ

Итак, если вы заполните это пространство для каталога с помощью записей ACL по умолчанию до BRIM, вы все равно сможете создавать там файлы, но не каталоги, поскольку система не будет Возможность создавать как данные 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 по умолчанию).

3
27.01.2020, 20:32

Теги

Похожие вопросы