Un file vuole appartenere a due utenti. Come? Il collegamento reale non riesce


32

Due programmi setuid /usr/bin/bare /usr/bin/baz, condividono un singolo file di configurazione foo. La modalità del file di configurazione è 0640, poiché contiene informazioni riservate. L'unico programma viene eseguito come bar:bar(ovvero, come barra utente , barra di gruppo ); l'altro come baz:baz. Cambiare utenti non è un'opzione e persino cambiare gruppi non sarebbe preferibile.

Desidero collegare a fondo il singolo file di configurazione come /etc/bar/fooe /etc/baz/foo. Tuttavia, questo non riesce perché il file deve, per quanto ne so, appartenere root:baro a root:baz.

Soluzione potenziale: creare un nuovo gruppo i barbazcui membri sono bare baz. Facciamo fooparte di root:barbaz.

Mi sembra una soluzione piuttosto pesante. Non esiste un modo più semplice e semplice per condividere il file di configurazione footra i due programmi?

Per ora, sto mantenendo due copie identiche del file. Funziona, ma ovviamente è sbagliato. Quale sarebbe giusto?

Per informazioni: ho poca esperienza con i gruppi Unix e nessuno con setgid (2).


La domanda è generalmente graduale. Nel mio caso specifico, i due programmi sono Exim4 e Dovecot, programmi di gestione della posta che possono condividere password e certificati TLS.
THB

8
la soluzione Ubuntu (e credo Debian) per questo è il ssl-certgruppo, che è praticamente il tuo barbazgruppo. Lo standard consiste nell'impostare tutte le chiavi private di proprietà del ssl-certgruppo e inserire gli UID associati ai programmi che devono accedervi in ​​quel gruppo.
circa

1
@abligh: interessante. Il mio sistema è Debian 8 jessie. Apparentemente, esiste un pacchetto il ssl-certcui script postinst, al momento dell'installazione, crea il gruppo di cui parli. Non ne ero a conoscenza ssl-cert. Apache2 (installato sul mio host) consiglia ssl-cert . I vari pacchetti Exim e Dovecot non lo fanno, ma Postfix (non installato sul mio host) dipende su ssl-cert. A causa di Apache, il mio host ha un gruppo ssl-cert , ma questo gruppo non ha ancora membri. Grazie per il consiglio.
THB

5
Imposta i programmi setgid, non setuid. I programmi setuid sono una cattiva idea perché se sono compromessi, il binario può essere sostituito, creando un cavallo di Troia. (Eccezione: setuid root, perché lì non hai scelta.)
Gilles 'SO- smetti di essere malvagio'

1
Non wiki.dovecot.org/HowTo/EximAndDovecotSASL risolvere la vostra situazione specifica?
MvG,

Risposte:


50

È possibile utilizzare gli ACL in modo che il file possa essere letto dalle persone di entrambi i gruppi.

chgrp bar file
chmod 640 file
setfacl -m g:baz:r-- file

Ora entrambi bare i bazgruppi possono leggere il file.

Ad esempio, ecco un file di proprietà di bin: bin con modalità 640.

$ ls -l foo
-rw-r-----+ 1 bin bin 5 Aug 17 12:19 foo

I +mezzi c'è un set di ACL, quindi cerchiamo di dare un'occhiata a questo.

$ getfacl foo
# file: foo
# owner: bin
# group: bin
user::rw-
group::r--
group:sweh:r--
mask::r--
other::---

Possiamo vedere la riga group:sweh:r--: ciò significa che le persone del gruppo swehpossono leggerlo.

Ehi, sono io!

$ id
uid=500(sweh) gid=500(sweh) groups=500(sweh)

E sì, posso leggere il file.

$ cat foo
data

23

Potresti voler riconsiderare queste affermazioni:

Soluzione potenziale: creare un nuovo gruppo barbaz i cui membri sono bare baz. Facciamo fooparte di root:barbaz.

Mi sembra una soluzione piuttosto pesante. Non esiste un modo più semplice e semplice per condividere il file di configurazione footra i due programmi?

Perché è pesante creare un nuovo gruppo? Ciò presenta i seguenti vantaggi rispetto agli ACL:

  • Sebbene sia stato definito ipotetico con comandi /usr/bin/bare /usr/bin/baz, è importante che questi due programmi possano condividere un file di configurazione. Ciò suggerisce che i programmi sono naturalmente correlati. La creazione di un nuovo gruppo per loro sembrerebbe descrivere una relazione che esiste realmente e dovrebbe innescare un comportamento (come le autorizzazioni per leggere il file di configurazione comune).
  • Risolvere questo problema tramite i gruppi è portabile su ogni Unix, il che significa che puoi fare affidamento sullo stesso meccanismo, lavorando esattamente allo stesso modo, su qualsiasi sistema Unix o simile a Unix. Gli ACL sono molto più complessi e la portabilità può essere un problema.

Personalmente vedo gli ACL come la soluzione più pesante qui e i gruppi come il modo Unix più semplice e tradizionale.


16

Penso che questo sarebbe un uso tipico degli elenchi di controllo di accesso (ACL). Aggiungi entrambi gli utenti (o gruppi) all'ACL del file di configurazione:

/etc/foo  root:root rw-------  # Traditional Unix ownership and permission for foo
$ setfacl -m user: bar: rw- / etc / foo # Permette alla barra degli utenti di leggere e scrivere pippo
$ setfacl -m user: baz: rw- / etc / foo # Permette anche all'utente baz di leggere e scrivere pippo

Potrebbe essere necessario installare prima il pacchetto acl.


3

Imposta la modalità del file 0660(o anche 0440se la scrittura non è richiesta) e la proprietà bar:baz. Quindi un processo può accedere al file grazie alle autorizzazioni dell'utente, l'altro grazie alle autorizzazioni del gruppo. Funziona anche su file system in cui gli ACL non lo fanno.


2

Inoltrerò questo dato che non è ancora stato menzionato. Anche se questo probabilmente non è quello che vuoi, potrebbe essere la risposta per altre persone con una domanda simile.

Il "nuovo" "modo" cloud è quello di avere tutta la configurazione gestita da un sistema di gestione della configurazione (come chef , burattino o ansible ). Non importa quindi che sul server siano presenti due file distinti ma identici, poiché entrambi sono una copia del singolo file dal sistema di gestione della configurazione.

Il principale vantaggio di farlo in questo modo è che la tua configurazione è sottoposta a versione (insieme a tutto il resto delle tue configurazioni) e che la distribuzione di un nuovo server identico o quasi identico diventa così facile che ot può essere automatizzato.

(Per la cronaca, dal momento che non stai usando la gestione della configurazione, andrei con il sistema di gruppo come nella risposta di @ drg).

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.