Pracuję nad aplikacją internetową LAMP i gdzieś jest zaplanowany proces, który ciągle tworzy folder o nazwie shop
w katalogu głównym witryny. Za każdym razem, gdy się pojawia, powoduje konflikt z regułami przepisywania w aplikacji, co nie jest dobre.
Dopóki nie znajdę urażliwego skryptu, czy istnieje sposób, aby zapobiec shop
utworzeniu folderu o nazwie root w katalogu głównym? Wiem, że mogę zmienić uprawnienia do folderu, aby zapobiec zmianie jego zawartości, ale nie znalazłem sposobu, aby zapobiec tworzeniu folderu o określonej nazwie.
linux
directory
directory-structure
Andrzej
źródło
źródło
Odpowiedzi:
Nie możesz, ponieważ użytkownik tworzący katalog ma wystarczające uprawnienia do zapisu w katalogu nadrzędnym.
Zamiast tego możesz wykorzystać
inotify
rodzinę wywołań systemowych dostarczanych przez jądro Linuksa, aby obserwować tworzenie (i opcjonalniemv
-ing) katalogushop
w danym katalogu, jeśli został utworzony (lub opcjonalniemv
-ed),rm
katalog.Program przestrzeni użytkownika, którego potrzebujesz w tym przypadku to
inotifywait
(pochodzi zinotify-tools
, zainstaluj go najpierw, jeśli to konieczne).Zakładając, że katalog
shop
będzie znajdować się w/foo/bar
katalogu, ustawmy monitorowanie/foo/bar/shop
tworzenia irm
natychmiast, jeśli zostanie utworzone:inotifywait -qme create /foo/bar
/foo/bar
katalog zegarki dla każdego pliku / katalogu, który może zostać utworzony, tj. obserwuj każdecreate
zdarzenieJeśli utworzony,
awk '/,ISDIR shop$/ { system("rm -r -- /foo/bar/shop") }'
sprawdza, czy plik jest katalogiem, a nazwa toshop
(/,ISDIR shop$/
), jeśli tak,rm
to katalog (system("rm -r -- /foo/bar/shop")
)Musisz uruchomić polecenie jako użytkownik, który ma uprawnienia do zapisu w katalogu w
/foo/bar
celu usunięcia goshop
z katalogu.Jeśli chcesz też monitorować
mv
operacje-dodawania, dodaj też obserwacjęmoved_to
zdarzenia:Uwaga: jeśli szukasz pliku, a nie katalogu o nazwie
shop
:źródło
inotifywait
do tego celu, możliwe jest również, że wyzwalacz może być w stanie złapać proces za pomocąps -ef
Aby odpowiedzieć dosłownie w oparciu o pytanie, czy nie można utworzyć folderu o określonej nazwie.
touch shop
Nie można utworzyć katalogu, jeśli istnieje plik o identycznej nazwie
mkdir: cannot create directory ‘shop’: File exists
źródło
chattr +i shop
aby był niezmienny. Dopóki niezmienna flaga nie zostanie usunięta, nie można nawet zmienić jej nazwy / usunąć.rename(2)
się, że nadal będę działać, ponieważ nazwa nie jest częścią i-węzła, ale tak nie jest. Szybkie wyszukiwanie w Internecie nie ujawnia przyczyny. Jakieś wskazówki?rename
działanie.A co z przejęciem
mkdir
syscall zLD_PRELOAD
...?Zauważ, że w tym module obsługi możesz zarejestrować PID procesu, który zamiast tego chce utworzyć ten katalog:
Musisz umieścić to w
~/.bashrc
katalogu głównym (lub ktokolwiek uruchamia twoją aplikację), aby mieć pewność, że zostanie to wykorzystane:źródło
LD_PRELOAD
takie hacki są w zasadzie zawsze błędne i jeśli nie wiesz, co robisz, mogą poważnie zepsuć program, do którego je ładujesz, niszcząc właściwości takie jak bezpieczeństwo sygnału asynchronicznego zastępowanej funkcji.fopen
powinienem"a"
zamiast"w"
, aby mógł zachować poprzednie dzienniki(Skomentowałbym odpowiedź Miati, ale nie pamiętam mojego starego konta i nie mam wystarczającej reputacji na tym nowym ...)
Możesz zablokować tworzenie, tworząc plik, a następnie zmieniając atrybuty pliku.
Wtedy każda próba zrobienia czegokolwiek z tym plikiem zostanie zablokowana - nawet jeśli użytkownik zostanie rootem.
źródło
Utwórz dowiązanie symboliczne wskazujące na nieistniejącą lokalizację w nieistniejącym katalogu. Ma to pewne zabawne implikacje:
EEXIST
(plik istnieje).ENOENT
(Brak takiego pliku lub katalogu)ENOENT
. lstat oczywiście zwróci informacje o dowiązaniu symbolicznym.Ma to dwie zalety w porównaniu z innymi proponowanymi tutaj rozwiązaniami: (a) nie potrzebujesz uruchomionej usługi, która śledzi tworzenie katalogu, i (b) nazwa wydaje się nie istnieć w przypadku większości poleceń.
Będziesz musiał spróbować, ale podejrzewam, że bez względu na to, jakie przepisy przepisujesz, nie używają lstat ani innych poleceń nie dereferencyjnych, co powoduje, że zawodzą.
źródło