Jak pod Linuksem mogę znaleźć wszystkie pliki i katalogi, które są zapisywalne (a właściwie nie do zapisu) przez konkretnego użytkownika?
Edycja: Aby wyjaśnić, miałem na myśli konkretny podkatalog, a nie cały system. I tak, oznacza to wszystkie permutacje i kombinacje zapisu użytkownika, grupy i świata, które pozwoliłyby temu użytkownikowi pisać. Wiem, co obejmuje pytanie semantycznie, miałem nadzieję na wykonanie jednego lub kilku linijek, aby uzyskać listę tych plików.
Odpowiedzi:
Użyj polecenia „znajdź”, jeśli masz zainstalowany program findutils w wersji 4.3.0 lub nowszej:
Dla wszystkich plików w bieżącym katalogu, które mogą być zapisywane przez bieżącego użytkownika:
Dla wszystkich plików w bieżącym katalogu, których bieżący użytkownik nie może zapisać:
Według strony podręcznika:
źródło
2>&1 | grep -v "Permission denied"
byćfind . -writable 2>&1 | grep -v "Permission denied"
Możesz utworzyć skrypt Perla (
writable.pl
) w następujący sposób:a następnie użyj tego skryptu jako root w następujący sposób:
wypełnianie
USERNAME
iDIRECTORY
odpowiednio.źródło
Czy jesteś pewien, że to naprawdę pytanie, które chcesz zadać?
Powiedzenie „Chcę zobaczyć wszystkie pliki, do których konto X może zapisywać” oznacza każdy plik należący do nich za pomocą u + w, każdy plik należący do dowolnej grupy, do której należą, który jest ustawiony g + w, i każdy świat plików do zapisu (o + w).
Nie zapisanie byłoby jeszcze trudniejsze. Lepiej byłoby zrobić listę wszystkich plików, a następnie wykluczyć te, do których mogą pisać.
źródło
Na odpowiedź Eddiego, jeśli wrzucisz:
Następnie przejdzie do katalogów ze spacjami w ich nazwie.
źródło
W tym przykładzie użyję składni find gnu dla flagi -perm:
Zasadniczo - jeśli wyrzucasz zwariowane rozszerzenia, takie jak ACL, masz 3 chocies - właściciela, grupy i „inne” prawa zapisu. Brzmi jak praca w pętli.
Jest mnóstwo miejsca na zoptymalizowanie tego, ale zostawię to komuś innemu ... Poza tym nigdy nie pamiętam wszystkich szczegółów dotyczących znajdowania i przekraczania systemów plików i tego rodzaju bzdur. Upewnij się także, że wyjście grup jest takie samo jak w moim testowym systemie Linux
To jest przybliżony przykład tego, jak użytkownik może zapisywać pliki do zapisu. Będzie to działać jako dowolny użytkownik, ale jeśli uruchomisz go jako użytkownik inny niż uid0, znajdziesz tylko te rzeczy, które znajdują się w katalogach, do których użytkownik uruchamiający skrypt ma zarówno uprawnienia do odczytu, jak i wykonywania.
źródło
To polecenie powinno znaleźć wszystkie zapisywalne katalogi, możesz zmienić uprawnienia według własnego uznania:
źródło
Nie jestem pewien, czy to najlepszy sposób, ale powinienem zrobić to, o co prosisz:
Klawisz jest oczywiście w
-w
przełączniku, który można również zanegowaćEDYCJA: Zastanawiając się nad tym, ten skrypt wypisuje to, co jest możliwe do zapisania przez bieżącego użytkownika, oczywiście nie zadziałałoby dla danego użytkownika.
źródło