Piszę proces demona dla systemu Debian, C
który używa Unix Domain Socket .
Jeśli katalog roboczy procesu demona jest katalogiem głównym, czy istnieje katalog idiomatyczny do umieszczenia gniazda w systemie plików?
Piszę proces demona dla systemu Debian, C
który używa Unix Domain Socket .
Jeśli katalog roboczy procesu demona jest katalogiem głównym, czy istnieje katalog idiomatyczny do umieszczenia gniazda w systemie plików?
Odpowiedzi:
Zazwyczaj znajdują się w /tmp
lub w jego podkatalogu. Zauważ, że wszystko, co się /tmp
dzieje, może zostać skasowane podczas zamykania - niekoniecznie musi zostać usunięte, tylko strzeż się, że może być , więc jeśli z niego korzystasz, sprawdź, czy musisz za każdym razem tworzyć podkatalog. Będziesz chciał skorzystać z podkatalogu, jeśli chcesz ograniczyć dostęp poprzez uprawnienia, ponieważ /tmp
jest on czytelny na całym świecie.
/run
i /var/run
(które mogą być symbolicznie połączone) są używane w podobny sposób, ale ogólnie są montowane jako systemy plików tmpfs - co oznacza, że są tworzone podczas rozruchu i znajdują się w pamięci , a nie na dysku (więc nie używaj tego jako miejsca zrzutu) duże ilości danych). W przypadku gniazda uruchomieniowego jest to prawdopodobnie dobry wybór.
Zauważ, że /run
i wszystkie inne wymienione tutaj katalogi oprócz /tmp
, są zapisywalne tylko przez root. W przypadku procesu systemowego jest to w porządku, ale jeśli aplikacja może być uruchamiana przez nieuprzywilejowanego użytkownika, albo chcesz użyć /tmp
lub utworzyć gdzieś stały katalog i ustawić na nim uprawnienia, albo użyć lokalizacji w $ HOME użytkownika.
Możliwe jest utworzenie katalogu w /usr/share
(lub /usr/local/share
) podczas instalacji. Katalogi i zawartość nie są potencjalnie zbierane w obu butach, tak jak byłyby w /tmp
lub /run
. Jednak, jak wskazuje jordanm w komentarzach, /usr
może być montowany tylko do odczytu i odzwierciedlają to wytyczne dotyczące hierarchii systemu plików Linux . Oczywiście nie można go używać tylko do odczytu, gdy aplikacja jest zainstalowana, więc jeśli wygodnie jest utworzyć tam gniazdo, możesz je zostawić i użyć później (nadal będziesz mógł pisać w gnieździe, mimo że plik jest tylko do odczytu).
Jeśli chcesz mieć coś trwałego w obu butach, które nie zostaną zamontowane tylko do odczytu, /etc
jest dość bezpiecznym zakładem, ponieważ jest to często używane w konfiguracjach systemowych i ponownych konfiguracjach. OTOH, możliwe jest posiadanie systemów, w których urządzenie leżące u podstaw całego głównego systemu plików jest tylko do odczytu (np. Systemy osadzone), z / tmp i / działa na innym urządzeniu (prawdopodobnie: tmpfs w pamięci). Tak więc wydaje się, że dwie najbardziej niezawodne strategie:
Zainstaluj gniazdo w stałej lokalizacji, gdy aplikacja jest zainstalowana.
Utwórz katalog w /run
lub /var/run
w czasie wykonywania i umieść tam gniazdo.
Zrób to samo tylko w /tmp
.
Zaletą pierwszego jest to, że bez względu na wszystko, po zainstalowaniu aplikacji będziesz mieć gniazdo do użycia. Zaletą drugiego jest to, że może bardziej sprzyjać rozsądnemu programowaniu. Zaletą trzeciego jest to, że nie wymaga uprawnień administratora. Przejście z jednej implementacji na drugą powinno być łatwe, jeśli później zmienisz zdanie.
Wreszcie, jak przywołał BatchyX , powinieneś przynajmniej zaoferować opcję konfiguracji, cofając się od wyboru domyślnego.
/run
lub /var/run
jest często używany do procesów rootowania.
/tmp
. Zmienię to w.
/usr
może być zamontowany jako tylko do odczytu. Pliki nigdy nie powinny być tam tworzone w czasie wykonywania. Inne sugestie są dobre.
/tmp/.APPNAME/.APPSOCK
ponieważ demon nie potrzebuje stałych danych.
/tmp
i/run
jest to, że tylko root ma uprawnienia do zapisu /run
.