No sistema de arquivos Linux e ext4, uma maneira hacky de impedir que diretórios (e não outros tipos de arquivos) sejam criados é confiar no fato de que os diretórios recém-criados herdam as entradas ACL padrão de seu diretório pai (além das entradas de ACL não padrão correspondentes) enquanto os arquivos só recebem as entradas de ACL não-padrão correspondentes e no ext4 pelo menos, há apenas um espaço limitado por inode para armazenar aqueles Entradas ACL.
Assim, se você preencher esse espaço para um diretório com entradas de ACL padrão até a borda, ainda poderá criar arquivos lá, mas não os diretórios, pois o sistema não conseguir criar as entradas de ACL padrão e não padrão:
$ i=50000; while setfacl -m "d:u:${i}:-" .; do i=$((i + 1)); done
setfacl: .: No space left on device
(a condição de saída nesse loop é quando setfacl falha (aqui no ENOSPC porque não é possível adicionar mais entradas de ACL)).
$ getfacl . | grep -c default:
507
507 entradas de ACL padrão foram adicionadas (efetivamente negando o acesso a qualquer arquivo e diretório criado para usuários 50000 a 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
Mesmo root
não pode criar diretórios lá:
$ sudo mkdir x
mkdir: cannot create directory ‘x’: No space left on device
Isso não impede que os usuários removam ou renomem diretórios (se alguns foram criados antes de você adicionar essas ACLs padrão).