Jak się dowiedziałem, podczas korzystania z umask najwyższe uprawnienia, jakie możesz nadać plikom, to 666. Robi to umask 0000
. Wynika to z domyślnych uprawnień do tworzenia plików, które wydają się wynosić 666 w każdym znanym mi systemie.
Wiem, że w przypadku plików potrzebujemy praw wykonywalnych, aby pokazać ich zawartość.
Ale dlaczego ograniczamy domyślne uprawnienia do tworzenia plików w 666?
permissions
filesystems
files
Piotr
źródło
źródło
umask
co spotkałem, to zawsze 0022, tworząc domyślne uprawnienie 644.umask 0000
- co nadal ogranicza uprawnienia do plików na poziomie 666. (Ale najwyraźniej foldery używają 777)Odpowiedzi:
O ile wiem, jest to na stałe zapisane w standardowych narzędziach. Mogę utworzyć
strace
zarównotouch
nowy plik, jak imkdir
nowy katalog.touch
Ślad produkowane w ten sposób:podczas gdy
mkdir
ślad dał to:Poza kodowaniem procesu tworzenia pliku / katalogu w C, nie widzę sposobu modyfikowania domyślnych uprawnień. Wydaje mi się jednak, że brak domyślnego wykonywania plików ma sens: nie chcesz, aby przypadkowy tekst był przypadkowo błędnie interpretowany jako polecenie powłoki.
Aktualizacja
Aby dać przykład, w jaki sposób bity uprawnień są na stałe zakodowane w standardowych narzędziach. Oto kilka odpowiednich wierszy z dwóch plików w
coreutils
pakiecie, który zawiera kod źródłowy zarówno dla, jaktouch(1)
imkdir(1)
między innymi:mkdir.c
:Innymi słowy, jeśli tryb nie jest określony, ustaw go na
S_IRWXUGO
(odczyt: 0777) zmodyfikowany przezumask_value
.touch.c
jest jeszcze jaśniejszy:To znaczy, daj wszystkim uprawnienia do odczytu i zapisu (odczyt: 0666), które
umask
oczywiście zostaną zmodyfikowane przez proces tworzenia pliku.Możesz być w stanie obejść ten problem tylko programowo: tj. Podczas tworzenia plików z poziomu programu C, w którym wywołujesz system bezpośrednio lub z poziomu języka, który pozwala na wywołanie syscall niskiego poziomu (patrz na przykład Perl
sysopen
podperldoc -f sysopen
).źródło
umask file
iumask dir
. Ustaw dwie różne wartości domyślne i dobrze. Ale teraz nie mam możliwości tworzenia plików za pomocą perm perms.mkdir(1)
oferuje-m
przełącznik umożliwiający określenie trybu katalogu w czasie tworzenia. Jednak w przypadku plików, ponieważ tworzenie plików korzysta zopen(2)
syscall, narzędzie, którego używasz do tworzenia pliku, jest tym, które jest odpowiedzialne za przekazywanie bitów trybuopen
i nie masz nic do powiedzenia w tej sprawie.install(1)
domyślnie kopiuje plik do nowej lokalizacji i ustawia bity wykonania, ale nadal nie dzieje się tak w czasie tworzenia.touch
na przykład jest odpowiedzialny za ustawienie właściwych wartości. Czy wiesz, gdzie przechowuje wartości? Może są one ustawione na cały system - abyśmy mogli je zmienić? Bo chcę się uwolnić ;)Po pierwsze, nie ma globalnej wartości domyślnej, uprawnienia zależą od aplikacji, która tworzy plik. Na przykład ten mały program w języku C utworzy plik „/ tmp / foo” z uprawnieniami 0777, jeśli umask ma wartość 0000 (w każdym przypadku uprawnienia to 0777 i ~ umask):
To powiedziawszy, wiele aplikacji tworzy pliki z uprawnieniami 0666. Ma to dwa powody:
źródło