Czym są ósemkowe i symboliczne tryby `chmod`?

chmod ustawia uprawnienia pliku w systemach Linux, macOS i innych systemach Unix, a uprawnienia można podawać w dwóch notacjach. Tryb ósemkowy, taki jak 755, zawiera po jednej cyfrze dla właściciela, grupy i pozostałych użytkowników, gdzie odczyt ma wartość 4, zapis 2, a wykonywanie 1. Tryb symboliczny, taki jak u=rwx,g=rx,o=rx, zamiast tego określa klasy (u — właściciel, g — grupa, o — pozostali, a — wszyscy) oraz uprawnienia (r, w, x).

Tryby symboliczne mogą także zmieniać uprawnienia zamiast ustawiać je wszystkie: u+x dodaje uprawnienie do wykonywania dla właściciela, go-w usuwa uprawnienie do zapisu dla grupy i pozostałych, a g=u kopiuje uprawnienia właściciela do grupy. Tryb ósemkowy zawsze ustawia wszystkie uprawnienia, dlatego ósemkowy wynik zmiany zależy od trybu, jaki plik miał wcześniej.

Opis narzędzia

To narzędzie konwertuje tryby chmod między notacją ósemkową i symboliczną. Wybierz notację źródłową i docelową albo pozostaw źródło w trybie automatycznego wykrywania: wpisz 755, aby uzyskać u=rwx,g=rx,o=rx, lub wpisz tryb symboliczny, aby uzyskać wartość ósemkową. W przypadku zmian takich jak u+x lub a+X wpisz bieżący tryb pliku, aby zobaczyć tryb, jaki pozostawiłby chmod. Możesz także wkleić ciąg uprawnień z ls -l, taki jak -rwxr-xr-x, albo całe polecenie chmod.

Przykłady

Ósemkowy Symboliczny ls -l Typowe zastosowanie
644 u=rw,go=r -rw-r--r-- Zwykłe pliki
755 u=rwx,go=rx -rwxr-xr-x Skrypty, programy i katalogi
600 u=rw,go= -rw------- Prywatne pliki, takie jak klucze SSH
2775 u=rwx,g=rwxs,o=rx drwxrwsr-x Współdzielone katalogi zachowujące grupę
1777 a=rwx,+t drwxrwxrwt /tmp i inne współdzielone katalogi robocze
4755 u=rwxs,go=rx -rwsr-xr-x Programy takie jak passwd

Funkcje

  • Konwertuje tryb ósemkowy na symboliczny i symboliczny na ósemkowy, z przyciskiem zamiany kierunku
  • Wykrywa notację wprowadzonego trybu lub konwertuje go z wybranej notacji
  • Stosuje zmiany względne, takie jak u+x, go-w, a=r,u+w, g=u i a+X, do bieżącego trybu
  • Obsługuje setuid, setgid i sticky bit (s, t oraz 4-cyfrowe tryby ósemkowe)
  • Zapisuje tryb symboliczny w pełnej postaci (u=rwx,g=rx,o=rx) lub skróconej (u=rwx,go=rx)
  • Odczytuje i zapisuje ciągi uprawnień ls -l, w tym s, S, t i T
  • Akceptuje wklejone polecenia, takie jak sudo chmod -R 755 dir
  • Wskazuje dokładny znak, gdy tryb jest nieprawidłowy

Jak to działa

Tryb ósemkowy jest odczytywany jako maksymalnie cztery cyfry: opcjonalna pierwsza cyfra określa setuid (4), setgid (2) i sticky bit (1), a pozostałe trzy określają uprawnienia właściciela, grupy i pozostałych. Tryb symboliczny jest odczytywany klauzula po klauzuli zgodnie z gramatyką POSIX i stosowany do bieżącego trybu w taki sam sposób, jak robi to GNU chmod w systemie Linux:

  • + dodaje uprawnienia, - usuwa je, a = ustawia je i czyści pozostałe uprawnienia dla określonych klas.
  • X dodaje uprawnienie do wykonywania tylko katalogom oraz plikom, które już mają uprawnienie do wykonywania dla co najmniej jednego użytkownika.
  • s ustawia setuid dla u i setgid dla g. t ustawia sticky bit dla o, a lub bez określonej klasy.
  • Jeśli klasa nie jest podana, jak w +x, zmiana dotyczy wszystkich z wyjątkiem bitów zablokowanych przez umask.
  • W katalogach setuid i setgid pozostają bez zmian, chyba że tryb jawnie je określa, jak w g-s.

Symboliczne dane wyjściowe jawnie ustawiają każdy bit, dlatego w przypadku pliku dają ten sam wynik niezależnie od wcześniejszego trybu pliku. Sticky bit jest zapisywany jako osobna klauzula +t, ponieważ zarówno GNU chmod, jak i BSD chmod akceptują go w tej postaci.

Wskazówki

  • Użyj a+X wraz z chmod -R, aby umożliwić przeszukiwanie katalogów bez nadawania wszystkim plikom uprawnienia do wykonywania.
  • chmod 755 na katalogu nie usuwa setgid w GNU chmod. Użyj chmod 00755 lub g-s, aby go usunąć.
  • Ansible i wiele plików konfiguracyjnych wymaga początkowego zera, jak w 0755. Włącz opcję „Zawsze pokazuj 4 cyfry ósemkowe”, aby je uzyskać.
  • Znak . lub + po ciągu ls -l oznacza kontekst SELinux lub ACL. Użyj getfacl, aby zobaczyć wpisy ACL, których tryb nie pokazuje.