Dlaczego „chmod 1777” i „chmod 3777” ustawiają lepki bit?

15

Aby ustawić bit lepki w katalogu, dlaczego działają oba polecenia chmod 1777i chmod 3777oba?

Liao Zhuodi
źródło
2
Proponujesz potencjalnie ryzykowną operację. Połączenie lepkich bitów i uprawnień rwx dla wszystkich jest złą praktyką. Każdy może zmienić i wykonać plik, a bit s pozwala na przełączenie do użytkownika root bez hasła.
jippie
1
@jippie setuid i setgid bity znikają, jeśli plik zostanie zmodyfikowany, więc nie można uzyskać dostępu do konta root w ten sposób.
Kyle Jones
@KyleJones, to wciąż niebezpieczne. Jeśli passwdbinarne były światowej zapisu, nie będzie w stanie uzyskać dostępu do konta roota, modyfikując go, jak mówisz, ale mógłby zastąpić go jakimś innym binarnym, że każdy by uruchomić później, myśląc, że był passwd.
Wildcard,
@Wildcard Agreed.
Kyle Jones

Odpowiedzi:

29

Każda liczba (nazywana także ósemką, ponieważ jest podstawowa8) w tej grupie reprezentuje 3 bity. Jeśli zmienisz go w plik binarny, będzie to znacznie łatwiejsze.

1 = 0 0 1
3 = 0 1 1
5 = 1 0 1
7 = 1 1 1

Więc jeśli zrobiłeś 1777, 3777, 5777 lub 7777, ustawiłbyś bit lepki, ponieważ trzecia kolumna byłaby 1. Jednak, w przypadku 3777, 5777 i 7777 dodatkowo ustawiasz inne bity (SUID dla pierwszej kolumny i SGID dla drugiej kolumny).

I odwrotnie, jakakolwiek inna liczba w tym miejscu (maksymalnie 7) nie ustawiłaby lepkiego bitu, ponieważ ostatnia kolumna nie byłaby 1 lub „włączona”.

2 = 0 1 0
4 = 1 0 0
6 = 1 1 0

JZeolla
źródło
3
+1 za ładny opis działania liczb ósemkowych i tego, w jaki sposób odnosi się do bitów uprawnień do plików.
CVn
1
Nazywa się to „maską bitów”, a +1 również w celu wyjaśnienia / pokazania, jak można ustawić oraz clearkolumny Grupa właściciela i Inne.
Chris K
16

Uprawnienia przekazane jako argument do chmod są określone jako wartość ósemkowa . Każda cyfra w wartości reprezentuje trzy bity. Jeśli podane są trzy cyfry, ustawiasz bity odczytu, zapisu i wykonywania dla właściciela pliku, grupy i innych (wszystkich innych). Jeśli podano cztery cyfry, skrajna lewa liczba ustawia setuid, setgid i lepkie bity. Octal 1 ustawia lepki bit. Octal 2 ustawia bit setgid. Oktal 2 + ósemka 1 to ósemka 3, która ustawia zarówno bit setgid, jak i bit lepki.

Kyle Jones
źródło
1
Czy to nie ósemkowe 2 | ósemkowy 1 zamiast ósemkowy 2 + ósemkowy 1? Operacje mają w tym przypadku taki sam wynik, ale generalnie jest to trochę bitowe lub to ma znaczenie, prawda?
gerrit
1
@gerrit Tak, w ogólnym przypadku powinieneś patrzeć na binary oroperatora. Jednak, jak zauważyłeś, w tym przypadku działa to tak samo, a wiele innych osób zna dodawanie.
CVn