Jak zwiększyć MAXSYMLINKS

10

W skrypcie Pythona tworzę wiązkę dowiązań symbolicznych połączonych razem.

przykład: link1-> link2-> link3 -> .......-> somefile.txt

Zastanawiałem się, jak możesz zmienić maksymalną liczbę dowiązań symbolicznych na większą niż 20?

grebwerd
źródło
5
Dlaczego chcesz to zrobić? MAXSYMLINKS jest zdefiniowany w nagłówkach systemu (np. W /usr/include/x86_64-linux-gnu/sys/param.hmoim systemie) i nie jest przeznaczony do modyfikacji przez użytkowników.
ire_and_curses
1
Konieczność wywołania readlink () ponad 20 razy, aby dostać się do prawdziwego pliku, nie będzie dobra dla wydajności.
jordanm
5
Uczęszczam na zajęcia z etycznego hakowania w szkole, co jest całkiem fajne. Jeden z HACKS nazywa się TOCTTOU, gdzie chcesz wpłynąć na wydajność, tworząc rozbudowany labirynt katalogów / linków symbolicznych.
grebwerd

Odpowiedzi:

16

W Linuksie (przynajmniej 3.5) jest on na stałe zakodowany na 40 (patrz follow_link()wfs/namei.c ) i zauważ, że jest to liczba linków użytych podczas rozwiązywania wszystkich składników ścieżki, możesz to zmienić tylko poprzez rekompilację jądra.

$ ln -s . 0
$ n=0; repeat 50 ln -s $((n++)) $n
$ ls -LdF 39
39/
$ ls -LdF 40
ls: cannot access 40: Too many levels of symbolic links
$ ls -LdF 20/18 10/10/10/6
10/10/10/6/  20/18/
$ ls -LdF 20/19 10/10/10/7
ls: cannot access 20/19: Too many levels of symbolic links
ls: cannot access 10/10/10/7: Too many levels of symbolic links
Stéphane Chazelas
źródło