W różnych miejscach można zauważyć, że „lepki bit” oskarżany o to, że jest obecnie całkowitym myleniem, ponieważ jego funkcjonalność ma obecnie wpływać na uprawnienia do zapisu w katalogach i działać jak flaga ograniczonego usuwania .
W odpowiedzi AskUbuntu odpowiadający napisał, że „lepki kawałek zwykle dotyczy katalogów” . Zauważyłem, że rzeczywiście współczesne systemy wydają się nigdy nie stosować go do plików, ale dawno temu zwykle stosowano go raczej do plików (obrazów programów wykonywalnych) niż do katalogów. (Jeśli chodzi o niedostatek współczesnego wykorzystania plików, istnieje podobne pytanie na temat Czy lepki bit nie jest używany w obecnych systemach plików ).
To spowodowało pytanie:
Co zrobił lepki bit zastosowany w pliku wykonywalnym? Czy to było wtedy jak setuid?
Zwróć uwagę na czas przeszły. To nie jest jak działa lepki bit? teraz. Tak to wtedy działało.
źródło
Odpowiedzi:
Nie, lepki bit nie był podobny do flag set-UID lub set-GID. Nie wpłynęło to na żadne zmiany poświadczeń procesu.
To, co zrobiło lepkie, sprawiło, że tekst programu stał się „lepki”. Pierwotnie nie był to błąd.
tło: sekcje obrazu programu i wspólny tekst
Zasadniczo, bez zagłębiania się w szczegóły formatów plików wykonywalnych (które mogą i mają wypełnione książki): Części plików obrazów programów, które są ładowane bezpośrednio do pamięci w celu uruchomienia programów, obejmują kod maszynowy, stałe, uruchomienie wartości (inicjowane niezerowo) zmiennych oraz (w takiej czy innej formie) puste spacje dla zmiennych inicjowanych zerowo i niezainicjowanych.
Są one pogrupowane w kolekcje zwane „sekcjami” i mają konwencjonalne nazwy. Kod maszynowy i (czasami) stałe tworzą tak zwaną sekcję „tekstową” obrazu programu. Zmienne inicjowane niezerowo to podobnie sekcja „dane”; a niezainicjowane i niezainicjowane zmienne to „bss” (nazwa sama w sobie ma za sobą całą historię ludową).
Kiedy proces ma załadowany plik obrazu wykonywalnego programu, różne części - tekst, dane i bss - są inicjowane z zawartości pliku obrazu.
W sekcji „tekst” wyróżnia się to, że kod maszynowy (i stałe) prawie zawsze nie jest zapisywany. Może on być współużytkowany przez obrazy pamięci wirtualnej całego procesu wykonawczego, w którym załadowano plik wykonywalny. Dokładny scenariusz, w którym tekst programu może być udostępniany, jest poza zakresem tej odpowiedzi i obejmuje takie rzeczy, jak idempotence naprawy programu ładującego i tożsamość układu przestrzeni adresowej. Ludzie też mogą pisać książki na ten temat. ☺
Udostępniony tekst to optymalizacja stosowana przez jądro. Eliminuje to potrzebę, aby każda instancja jednego działającego obrazu programu posiadała swój własny indywidualny obraz pamięci, zużywając cenną pamięć fizyczną z wieloma kopiami dokładnie tego samego kodu maszynowego (i stałych).
lepki tekst
Ale można zrobić więcej niż udostępnianie tekstu. Oczywiście, jeśli zawsze działa co najmniej jeden proces korzystający z określonego obrazu programu udostępniającego tekst, jądro po prostu dołącza przestrzeń pamięci wirtualnej nowych procesów do istniejącego segmentu tekstu udostępnionego, gdy uruchamiana jest nowa instancja programu. Prawie zawsze istnieje instancja (powiedzmy)
/bin/login
lub/bin/sh
działająca gdzieś w systemie średniej wielkości, więc nowe instancje programu logowania lub domyślnej powłoki mogą po prostu dołączyć do załadowanych kopii ich segmentów tekstowych, które jądro już załadowało do pamięci.Przyklejony tekst rozszerza ten pomysł na programowanie obrazów, których żaden proces nie jest obecnie uruchomiony . Jeśli plik obrazu wykonywalnego jest oznaczony jako tekst lepki, jądro zachowuje swój segment tekstowy po zakończeniu ostatniego procesu, aby go użyć; w nadziei, że wkrótce zostanie uruchomiona inna instancja programu, i może po prostu ponownie dołączyć do segmentu.
We wczesnych Unicach załadowane segmenty tekstu lepkiego byłyby zamieniane w celu zamiany pamięci, gdy nie był do nich dołączony żaden proces. (Później Unices przestał używać do tego zamiany.) Być może słyszałeś o tym po nazwie zapisanego tekstu .
Oczywiście, ustawienie bitu lepkiego tekstu na obrazie programu należy wykonać ostrożnie. Jakie korzyści z tego czerpią programy, zależą od tego, do czego maszyna jest zwykle używana. A obecnie nieprzyłączone segmenty tekstowe zajmują zasoby jądra, co oznacza, że istnieje praktyczny limit ich liczby w dowolnym systemie. Jest to więc ogólnie operacja wymagająca uprawnień administratora.
desuetude
Istnieje cały szereg założeń, które leżą u podstaw działania lepkiego tekstu, które już nie są prawdziwe. Odczytywanie gotowego segmentu z pamięci wymiany niekoniecznie jest szybsze niż zwykłe stronicowanie na żądanie z rzeczywistego pliku wykonywalnego. Formaty systemu plików stały się lepsze w przypadku losowych (w przeciwieństwie do sekwencyjnych) wzorców odczytu. Pojawienie się stronicowania na żądanie zmienia same rzeczy, podobnie jak ujednolicone pamięci podręczne, nie idempotentne zewnętrzne naprawy wynikające z różnic w wyszukiwaniu w bibliotekach współdzielonych oraz losowość układu przestrzeni adresowej.
Dni przyklejonych bitów tekstu dla obrazów programów wykonywalnych już dawno minęły. Na przykład wyraźna lepka flaga znacznika tekstu dla obrazów programów wykonywalnych została uznana za przestarzałą przez twórców 4.3BSD w połowie lat 80.
Dalsza lektura
źródło
TSR
DOS - „zakończ i zostań rezydentem”. Jednak zwykle dotyczyło to sterowników urządzeń, które inne wywołane później procesy muszą wywołać, i prawdopodobnie przestarzały, gdy świat przeszedł na wielowątkowe / wieloprocesowe systemy operacyjne.bss
?CODE
odcinki (i na OS / 2 tylko do odczytuDATA
segmenty) EXE i DLL są (zazwyczaj) dzielone między wszystkich uruchomionych programów. Po części nie ma prawdziwego odpowiednika „lepkości”, ponieważ 32-bitowy system OS / 2 w wersji 2.xi 386 Tryb ulepszony zastąpił zamianę segmentów na pamięć wirtualną stronicowaną na żądanie, podobnie jak świat Unix kilka lat wcześniej, na obu arenach wpływających na potrzeba lepkości segmentacji w podobny sposób.