Posizione idiomatica per socket basati su file su sistemi Debian


13

Sto scrivendo un processo daemon per un sistema Debian Cche utilizza un socket di dominio Unix .

Se la directory di lavoro del processo daemon è la directory principale, esiste una directory idiomatica per posizionare il socket sul file system?


Perché non lasci che sia configurabile?
BatchyX,

3
@BatchyX Bene, una sorta di valore predefinito (piuttosto che costringere ogni amministratore a prendere una decisione completamente per conto proprio) può sicuramente essere carino. :)
un CVn il

Risposte:


17

Si trovano comunemente in /tmpuna sua sottodirectory. Si noti che tutto in /tmpè soggetto a cancellazione all'arresto - non che sia necessariamente cancellato, basta fare attenzione a ciò che può essere , quindi se lo si utilizza, verificare se è necessario creare la propria sottodirectory ogni volta. Ti consigliamo di utilizzare una sottodirectory se desideri limitare l'accesso tramite autorizzazioni, poiché /tmpè leggibile da tutti.

/rune /var/run(che possono essere collegati in modo simbolico insieme) sono usati in modo simile, ma sono generalmente montati come filesystem tmpfs - il che significa che sono creati all'avvio e risiedono in memoria , non su disco (quindi non usarlo come posto per il dump abbondanti quantità di dati). Per un socket di runtime, è probabilmente una buona scelta.

Si noti che /run, e tutte le altre directory menzionate qui tranne /tmp , sono scrivibili solo da root. Per un processo di sistema, questo va bene, ma se l'applicazione può essere eseguita da un utente non privilegiato, si desidera utilizzare /tmpo creare una directory permanente da qualche parte e impostare autorizzazioni su tale, oppure utilizzare una posizione nella $ HOME dell'utente.

È possibile creare una directory in /usr/share(o /usr/local/share) durante l'installazione. Directory e contenuti non sono potenzialmente raccolti negli stivali come sarebbero in /tmpo /run. Tuttavia, come sottolinea jordanm nei commenti, /usrpuò essere montato in sola lettura e le linee guida della gerarchia del filesystem linux riflettono questo . Ovviamente, non può essere di sola lettura quando l'applicazione è installata, quindi se ti senti a tuo agio a creare un socket lì, puoi lasciarlo e usarlo in seguito (sarai comunque in grado di scrivere sul socket anche se il il file è di sola lettura).

Se vuoi un posto persistente su tutti gli stivali che non verrà montato in sola lettura, /etcè una scommessa abbastanza sicura, poiché viene spesso utilizzata per configurazioni e riconfigurazioni a livello di sistema. OTOH, è possibile avere sistemi in cui il dispositivo alla base dell'intero filesystem di root è di sola lettura (ad esempio, sistemi integrati), con / tmp e / eseguito su un altro dispositivo (probabilmente: tmpfs in memoria). Quindi le due strategie più solide sembrano essere:

  • Installare il socket in una posizione permanente quando l'applicazione è installata.

  • Creare una directory in /runo /var/runin fase di esecuzione e inserire lì il socket.

  • Fai la stessa cosa solo in /tmp.

Il vantaggio del primo è che non importa cosa, una volta installata l'app, avrai un socket da usare. Il vantaggio del secondo è che può essere più favorevole alla programmazione sana. Il vantaggio del terzo è che non richiede i privilegi di superutente. Dovrebbe essere facile passare da un'implementazione all'altra se cambi idea in seguito.

Infine, quando BatchyX ha presentato, dovresti almeno offrire un'opzione di configurazione per questo, ricadendo sulla tua scelta di default.


2
/runo /var/runviene spesso utilizzato anche per i processi di root.
BatchyX,

Giusto. Quelli sono anche più tmp di /tmp. Lo modificherò in.
Riccioli d'oro

/usrpuò essere montato in sola lettura. I file non dovrebbero mai essere creati lì in fase di esecuzione. Gli altri suggerimenti sono buoni.
jordanm,

1
Grazie a tutti per il vostro contributo, la discussione è stata molto istruttiva. Ho deciso di creare la posizione predefinita /tmp/.APPNAME/.APPSOCKperché il demone non ha bisogno di dati persistenti.
recursion.ninja,

1
Un'altra differenza chiave tra /tmpe /runè che solo root ha le autorizzazioni di scrittura /run.
BatchyX,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.