Wykryć wszystkie istniejące linki prowadzące do / tmp?

2

Chcę dowiedzieć się, które łącza do plików wskazują mój /tmpfolder na Ubuntu.

Tło:
Miałem problem, że moje /tmpuprawnienia do folderów zostały przypadkowo zmienione na 755. System nie działał poprawnie jako użytkownik inny niż root.

Może jest /tmpgdzieś link i polecenie

chmod 755 . -Rf 

wywołany tam w tym folderze miał wpływ na /tmpfolder główny .

Musiałem to naprawić za pomocą:

chmod 777 /tmp
chmod +t /tmp
sudo chown root:root /tmp

Mam tylko jeden system plików, więc nie powinno być z tym problemu.

rubo77
źródło
Twój system mógł zostać zrootowany.
Basile Starynkevitch,

Odpowiedzi:

2

Spróbuj tego:

find / -path /proc -prune -o \( -lname '*/tmp' -o -lname '*/tmp/' \) -exec ls -l {} \;

Przykładowe dane wyjściowe:

# find / -path /proc -prune -o -lname '*/tmp' -exec ls -l {} \;
lrwxrwxrwx. 1 sergey sergey 4 Sep 22 11:27 /home/sergey/xxx/tmp -> /tmp
lrwxrwxrwx. 1 root root 10 Jun 20 10:28 /usr/tmp -> ../var/tmp
find: `/run/user/sergey/gvfs': Permission denied
Serge
źródło
co daje wiele błędów
rubo77
tak oczywiście. uruchom go jako root.
Serge
Tak, uruchomiłem go jako root. /procwydaje się być problemem
rubo77
Zmodyfikowałem polecenie - teraz pomija drzewo / proc
Serge
to czasami! działa, ale odnajduje inne dowiązania symboliczne tmp takie jak/var/www/someapp/html/tmp -> ../tmp
rubo77
1

O ile mi wiadomo, nie ma łatwego sposobu na wyświetlenie wszystkich dowiązań symbolicznych wskazujących na i-węzeł. Dlatego polecam użycie standardowego narzędzia find z przełącznikami -L i -samefile :

  • -samefile porówna się na podstawie i-węzła pliku docelowego,
  • -L uwzględni w wyszukiwaniu linki symboliczne, których właśnie szukasz.

Oto przykład z / bin / dash w / bin:

$ find -L  /bin -samefile /bin/dash -exec ls -lhi {} \;
786515 lrwxrwxrwx 1 root root 4 Mar 29  2012 /bin/sh -> dash
786436 -rwxr-xr-x 1 root root 108K Mar 29  2012 /bin/dash

Z tego wyniku można zobaczyć zarówno numer i-węzła (pierwsza kolumna), jak i strzałkę (ostatnia), że / bin / sh w dowiązaniu symbolicznym do / bin / dash. Gdyby były to linki dowiązania, numer i-węzła byłby taki sam dla różnych plików i nie byłoby strzałki w ostatniej kolumnie.

Wreszcie, gdybym musiał szukać tych łączy w całym systemie plików, wykluczyłbym niektóre katalogi, takie jak / dev , / proc i / sys z wyszukiwania. Można to zrobić za pomocą opcji -path i -prune swicthes (możesz dodać tyle, ile chcesz za pomocą opcji -o przełącznik lub ), 2> / dev / null jest tutaj, aby zamaskować potencjalne błędy:

$ sudo find -L  / \( -path /dev -o -path /proc -o -path /sys \) -prune -samefile /bin/dash -exec ls -lhi {} \; 2>/dev/null

Ponieważ wyszukiwanie w całym systemie plików może zająć dużo czasu (głównie w zależności od jego wielkości), rozważę tę opcję jako ostateczność. To jest jak szukanie igły w stogu siana: nie jest to niemożliwe, ale wymaga dużego wysiłku ...

p_piotr3k
źródło
0

Znalazłem odpowiedź dzięki temu pytaniu: Linux: Znajdź wszystkie dowiązania symboliczne danego „oryginalnego” pliku? (rewers „readlink”)

find / -exec ls -ald {} ';' 2>/dev/null | grep '\-> /tmp' |grep -v /proc/
rubo77
źródło
To da wynik, którego szukasz, ale będzie znacznie wolniejszy niż zaproponowane przeze mnie rozwiązanie, ponieważ wykona lspolecenie dla każdego znalezionego pliku, podczas gdy moje rozwiązanie wykona lstylko dla dowiązań sym, które kończą się przyrostkiem „/ tmp”
Serge