W jaki sposób system operacyjny uniemożliwia nieuprzywilejowanemu procesowi wykonanie uprzywilejowanej instrukcji?

8

W Uniksie

jeśli jesteś gościem i zrobiłeś:

chmod 777 /

To by się nie udało.

Ale jak to się dzieje wewnętrznie na poziomie sprzętowym?

Jak dotąd myślę, że tak się dzieje:

  • System operacyjny próbuje wykonać tę instrukcję.
  • Informacje o uprawnieniach znajdują się gdzieś w pamięci dodatkowej. Wydałby więc instrukcję zapisu.
  • Przed 2 sprawdzi, czy użytkownik ma do tego uprawnienia. Jeśli nie jest, po prostu wyśle ​​komunikat błędu.

Czy tak się dzieje, czy też pojawia się przerwanie, gdy taka sytuacja się pojawi? Czy istnieje tabela w tabeli ISR ​​w pamięci głównej odpowiadająca nieuprzywilejowanym instrukcjom?

uczeń
źródło

Odpowiedzi:

10

chmodjest operacją systemu plików , a nie instrukcją uprzywilejowaną. Uprawnienia do systemu plików nie są obsługiwane na poziomie sprzętowym. Oprogramowanie (w szczególności OS) widzi, że proces wywoływania funkcji systemowej nie ma wystarczających uprawnień do wykonania operacji na obiekcie systemu plików i zwrotów połączenia systemu z błędem uprawnień.

Ignacio Vazquez-Abrams
źródło
5

Właściwie zadajesz dwa różne pytania:

  1. W jaki sposób system operacyjny uniemożliwia nieuprzywilejowanemu procesowi wykonanie uprzywilejowanej instrukcji?
  2. Dlaczego nieuprzywilejowany proces nie może zostać wywołany chmod 777 /?

Odpowiedź na 2:

chmodwewnętrznie wywołuje funkcję z libc (dogodnie również wywoływaną chmod()). Ta funkcja sprawdza, czy osoba dzwoniąca ma wystarczające uprawnienia do operacji - jeśli nie, zwraca błąd EPERM.

Odpowiedź na 1 jest bardziej interesująca:

Dokładny mechanizm zależy od systemu operacyjnego i platformy sprzętowej, ale w zasadzie wygląda to tak: Wszystkie nowoczesne procesory mają wbudowane funkcje bezpieczeństwa. Pozwala to systemowi operacyjnemu powiedzieć procesorowi: „uruchom ten program, ale nie pozwól mu wykonać tych uprzywilejowanych instrukcji”. Tak więc sam procesor wymusi ograniczenie dozwolonych instrukcji. Jeśli program spróbuje wykonać uprzywilejowaną instrukcję, procesor prześle kontrolę z powrotem do systemu operacyjnego, co zwykle kończy działanie źle działającego programu. Aby uzyskać szczegółowe informacje, patrz np. Https://en.wikipedia.org/wiki/Ring_%28computer_security%29

Śleske
źródło