Unix: come posso consentire a una sola persona di vedere la mia cartella nello stesso fs?


9

Voglio dare un accesso a una directory per un amico. Ha accesso al file system, dove si trova la directory. Non voglio impostare le autorizzazioni per tutti gli utenti. Come posso consentire a una sola persona di vedere la directory? Nessuno di noi è un superutente.

[BOUNTY CHALLENGE] Nessuna delle risposte funziona, usando Ubuntu:

1. L'approccio di jamuraa non funziona

$ setfacl -m user:friend:rwx classroom.xml 
setfacl: classroom.xml: Operation not supported

2. L'approccio di nik non funziona: impossibile accedere al file inesistente

3. L'approccio di ba non funziona: non riesco a creare gruppi, non una radice.

4. L'approccio di ToK non funziona, gli utenti sono in due gruppi: "utenti" e "campo"

chown -R myFriend:users ~/TEST
chown: changing ownership of `/u/myFriend/TEST/you_see_it': Operation not permitted
chown: changing ownership of `/u/myFriend/TEST': Operation not permitted

1
Sarebbe utile se ti dessi una sola spiegazione su come queste risposte rappresentino un problema per te - darebbe una migliore definizione del problema per formare altre opzioni.
nik,

nik: aggiunti profili di errore.

Risposte:


12

Con le normali autorizzazioni UNIX (utente, gruppo, tutti), non puoi farlo facilmente. Se non hai più bisogno dell'accesso alla directory, puoi eventualmente cambiare il proprietario della directory con il tuo amico, che è valido su alcuni Unices, ma la maggior parte di essi non lo è.

Tuttavia, se hai gli ACL abilitati su Linux, puoi farlo se sei il proprietario del file. Basta eseguire il comando setfacl -m user:friend:rwx filenamedove amico è il nome dell'account del tuo amico e il nome file è il file. Puoi verificare che sia entrato in vigore eseguendo getfacl filename, dovresti vedere la triade user:friend:rwxnell'elenco. Non ho visto troppi sistemi Linux che hanno gli ACL abilitati però.


Gli ACL sono la soluzione standard a questo problema, supponendo che il filesystem li abbia abilitati.
Ryan Thompson,

HHH sembra dire che questo non funzionerà. Penso che lo farebbe, a meno che per qualche strana ragione gli ACL non siano abilitati. HHH, cosa dà?
inizio

pboin: questo metodo non funziona così apparentemente il motivo potrebbe essere che gli ACL non sono abilitati o altro, non sono sicuro.

11

Questo è qualcosa di cui avevamo discusso a scuola.
Va più o meno così,

  1. Creare una directory (denominata data, per riferimento qui)
    • cambia permessi come " chmod 711 data"
    • gruppo e altri hanno solo x- accesso per accedere alla directory
    • non possono elencare la directory
    • Ora crea una directory difficult-name-here(potrebbe essere una stringa con hash)
    • cambia permessi come " chmod a+rx difficult-name-here"
    • il contenuto di questa directory è sicuro mentre la directory esterna non può essere elencata
    • le persone che conoscono il "nome difficile" possono saltare in questa seconda directory
      • " cd path/to/data/difficult-name-here"
      • altri non possono vedere il nome e non possono accedere al contenuto della directory
      • Tuttavia, rootpossono sempre accedere a tutto (che non è un problema qui)
    • condividi difficult-name-herecon le persone a cui vuoi fornire questi dati
    • Mantieni i file condivisi in questa seconda directory

Abbastanza rozzo, ma se questo può essere rotto senza la rottura del controllo di accesso unix, mi piacerebbe saperlo.


Aggiornamento su commento da dmckee,
Questa è esattamente la conclusione che abbiamo raggiunto!
"sicurezza per oscurità" ha una sicurezza limitata .

Detto questo, quando si progetta la protezione dei dati,
è importante identificarne il valore.

Dovresti scegliere come target,

  • Un costo di violazione della sicurezza superiore a,
  • Il costo del contenuto protetto,
  • Di un fattore proporzionale alla tua paranoia

In questo caso, se rootdecide di enumerare l'albero delle directory da qualche parte in accesso pubblico, il
tuo segreto è fuori! Ma stai proteggendo dalla radice o dalla loro potenziale irresponsabilità?
In tal caso, devi preoccuparti molto di più dei file condivisi.


Aggiornamento sulla nota non funzionante nella domanda .
Ho usato questo nei primi giorni di Linux per sapere che funziona.
Se ottieni " cannot access non-existant file" anziché 'permissions denied", molto probabilmente hai fatto un errore nella sequenza. Quello che vuoi dovrebbe assomigliare a questo,

 755 711 755 qualunque - === Autorizzazioni di accesso

 BasePath / CoverDir / Obscure / protectedFile.txt
          | | ^^^^^^^^^^^^^^^^^ Non si vede senza
          | ^^^^^^^^ Nome directory Accesso in lettura a
          ^^^^^ Pubblico condiviso con un amico. Directory oscura.
                accessibile 
                directory.
  1. Se si imposta ' CoverDir' access as 'rwx--x--x'',
    group e altri possono solo accedere alla directory ma non possono leggerne il contenuto.
  2. Ora, se usi un nome di directory oscuro
    ' Obscure', al suo interno e dai pieno accesso in lettura con ' rwxr-xr-x',
    chiunque conosca questo nome può elencarne il contenuto.
  3. Questo accesso dovrà essere fatto dall'esterno con un ' ls BasePath/CoverDir/Obscure'
    Perché le persone nel tuo gruppo e gli altri non saranno in grado di farlo ' ls BasePath/CoverDir'.

7
"se questo può essere rotto [...], piacerebbe sapere" Beh, è ​​il vero esempio di sicurezza per oscurità, e quindi fragile. Non contare su di esso a lungo termine. Pulito, però.
dmckee,

Se il tuo controllo di accesso unix è implementato in modo sicuro, è quasi sicuro come un database di password ombreggiato (o sshchiave privata).
nik,

5

Ryan aveva effettivamente ragione al 100%, solo all'indietro. Poiché il tuo amico (probabilmente) ha un gruppo univoco associato al suo nome utente, modifica la proprietà del gruppo della directory in questione in quel gruppo, molto probabilmente il nome utente dell'amico. Per poter condividere i contenuti tra voi due dovreste conservare la proprietà dell'utente:

chown -R youruser:friendgroup ~/foo/bar

Quindi assegnare le autorizzazioni appropriate alla directory, in base all'accesso che si desidera abbia l'altro utente:

chmod -R 770 ~/foo/bar

consentirebbe a entrambi l'accesso completo a rwx alla directory e al suo intero contenuto.

Tieni presente che ciò presuppone che nessun altro utente sia stato aggiunto al gruppo del tuo amico. Il sistema non avrebbe probabilmente fatto questo compito, tuttavia, come accennato in precedenza, l'utente root può fare ciò che sceglie. Puoi usare il comando gruppi per vedere ogni gruppo a cui appartiene il tuo amico o utente arbitrario. Inoltre, a meno che le autorizzazioni non siano state modificate per qualche motivo, dovresti essere in grado di visualizzare il file / etc / group che contiene le assegnazioni di gruppo per ciascun gruppo sul sistema.


4

Vorrei creare un nuovo gruppo per te e il tuo amico e impostare le autorizzazioni della cartella su complete per il proprietario e il gruppo insieme al bit setgid per la directory.

Ma a seconda delle tue esigenze potresti anche dover cercare di cambiare te e i tuoi amici in modo da impostare automaticamente il gruppo per poter cambiare i nuovi file.

# groupadd bestfriends
# chmod 2770 dir
# chgrp bestfriends dir
# usermod -G bestfriends FRIENDLOGIN

3
Ciò potrebbe richiedere privilegi da superutente che non ha.
Keck,

1
Oh, ho completamente perso quella linea: x Poi sono in perdita. Immagino che dovrei semplicemente inviarlo via e-mail localmente - non la soluzione migliore ma almeno il file arriva all'altro ragazzo.
gaqzi,

2

Le liste di controllo degli accessi sono il modo perfetto per farlo.

Tuttavia (se ricordo bene), il file system deve essere inizializzato con ACL (es. "/ Dev / sda6 / home ext3 default, acl "), tramite / etc / fstab, e questo è qualcosa che solo il superutente può fare. ..


2

Sono richiesti RBAC come grsec / selinux ..


non sei sicuro che questo sia il problema, puoi aggiungere qualche citazione?

2

Per impostazione predefinita, ogni utente su un sistema Ubuntu ha anche un gruppo associato con lo stesso nome. Quindi, se puoi aggiungere il tuo amico al tuo gruppo e quindi contrassegnare la cartella in questione come g+rwx, sarai impostato. Ricordo vagamente che questo caso d'uso è stato citato come motivo per creare un gruppo per ogni utente.


L'aggiunta di utenti ai gruppi richiede l'accesso come root, cosa che OP ha affermato di non avere.
Dave Sherohman,


2

non l'ho provato, ma che ne dite di una directory leggibile pubblica con un FS crittografato all'interno dello spazio utente (ad esempio encfs). Quindi puoi condividere quella password con il tuo amico e nessun altro può utilizzare quei dati (beh, immagino che potrebbero ottenere i dati ed eseguire un cracker di password offline?).


2

Per dare a Linux lo stesso Finesse di Windows nei privilegi dei file devi nidificare i gruppi. Crea un gruppo che abbia accesso alla tua cartella come vorresti avere il tuo amico. Aggiungilo a quel gruppo o al gruppo in cui risiede a quel gruppo. Per esempio

/ foo è la cartella che si desidera condividere. Crea un gruppo FooGroup con l'accesso desiderato alla cartella. Aggiungi gruppi e utenti a questo gruppo di cui desideri avere accesso a questa cartella.

È un grosso problema avere un gruppo per ogni cartella o file, ma è il modo migliore per limitare l'accesso allo stesso livello di Windows.


1

È possibile crittografare la directory con gpg. E poi prova a offuscare la posizione come suggerito da Nik.

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.