GNU/Linux >> Znalost Linux >  >> Linux

Mohu zabránit vytvoření složky s určitým názvem?

Nemůžete, protože uživatel vytvářející adresář má dostatečná oprávnění k zápisu do nadřazeného adresáře.

Místo toho můžete využít inotify rodina systémových volání poskytovaných linuxovým jádrem pro sledování vytvoření (a volitelně mv -ing) adresáře shop v daném adresáři, pokud je vytvořen (nebo volitelně mv -ed), rm adresář.

Program uživatelského prostoru, který v tomto případě potřebujete, je inotifywait (dodává se s inotify-tools , v případě potřeby jej nejprve nainstalujte).

Za předpokladu, že adresář shop by sídlil v /foo/bar adresář, nastavíme monitorování pro /foo/bar/shop vytvoření a rm okamžitě, pokud je vytvořen:

inotifywait -qme create /foo/bar | \
             awk '/,ISDIR shop$/ { system("rm -r -- /foo/bar/shop") }'
  • inotifywait -qme create /foo/bar hodinky /foo/bar adresář pro jakýkoli soubor/adresář, který by mohl být vytvořen, tj. sledujte jakýkoli create událost

  • Pokud je vytvořen, awk '/,ISDIR shop$/ { system("rm -r -- /foo/bar/shop") }' zkontroluje, zda je soubor náhodou adresář a název je shop (/,ISDIR shop$/ ), pokud ano rm adresář (system("rm -r -- /foo/bar/shop") )

Musíte spustit příkaz jako uživatel, který má oprávnění k zápisu do adresáře /foo/bar pro odstranění shop z adresáře.

Pokud chcete monitorovat mv -i operace, přidejte hodinky pro moved_to událost také:

inotifywait -qme create,moved_to /foo/bar | \
             awk '/,ISDIR shop$/ { system("rm -r -- /foo/bar/shop") }'

Jen pro poznámku, pokud hledáte soubor, nikoli adresář, pojmenovaný shop :

inotifywait -qme create /foo/bar | \
                 awk '$NF == "shop" { system("rm -- /foo/bar/shop") }'

inotifywait -qme create,moved_to /foo/bar | \
                 awk '$NF == "shop" { system("rm -- /foo/bar/shop") }'

Odpovědět doslova na základě otázky zamezení složky určitého jména, které má být vytvořeno.

touch shop

Nemůžete vytvořit adresář, pokud existuje soubor se stejným názvem

mkdir: cannot create directory ‘shop’: File exists


A co únos mkdir syscall s LD_PRELOAD ...?

$ ls
test.c
$ cat test.c 
#define _GNU_SOURCE

#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <dlfcn.h>

typedef int (*orig_mkdir_func_type)(const char *path, mode_t mode);

int mkdir(const char *path, mode_t mode) {
    if(!strcmp(path, "shop")) return 1;

    orig_mkdir_func_type orig_func;
    orig_func = (orig_mkdir_func_type)dlsym(RTLD_NEXT, "mkdir");
    return orig_func(path, mode);
}
$ gcc -shared -fPIC test.c -o test.so
$ LD_PRELOAD='./test.so' mkdir test
$ LD_PRELOAD='./test.so' mkdir shop
mkdir: cannot create directory ‘shop’: No such file or directory
$ ls
test  test.c  test.so

Všimněte si, že uvnitř tohoto handleru můžete místo toho přihlásit PID procesu, který chce vytvořit tento adresář:

$ cat test.c 
#define _GNU_SOURCE

#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <dlfcn.h>

typedef int (*orig_mkdir_func_type)(const char *path, mode_t mode);

int mkdir(const char *path, mode_t mode) {
    if(!strcmp(path, "shop")) {
        FILE* fp = fopen("/tmp/log.txt", "w");
        fprintf(fp, "PID of evil script: %d\n", (int)getpid());
        fclose(fp);
    }

    orig_mkdir_func_type orig_func;
    orig_func = (orig_mkdir_func_type)dlsym(RTLD_NEXT, "mkdir");
    return orig_func(path, mode);
}
$ gcc -shared -fPIC test.c -o test.so
$ LD_PRELOAD='./test.so' mkdir shop
$ cat /tmp/log.txt 
PID of evil script: 8706

Musíte to umístit do ~/.bashrc root (nebo kdokoli, kdo spouští vaši aplikaci), aby bylo zajištěno, že bude použita:

export LD_PRELOAD=/path/to/test.so

Linux
  1. Jak odstranit adresář a složku v Linuxu?

  2. Jak mohu změnit název mnoha souborů ve složce?

  3. Které systémové volání linux používá příkaz ls v linuxu k zobrazení názvu složky/souboru?

  1. nemůže zdrojový skript v aktuálním adresáři

  2. git klon bez složky projektu

  3. Jak mohu vyloučit adresář z příkazu ls

  1. Jak zabránit přechodu na SWAP?

  2. Jak odpojit (odstranit) speciální pevný odkaz . vytvořené pro složku?

  3. Jak mohu zabránit odhalení chobotnice?