Posso creare una directory pubblica in una directory privata?


20

Ho una cartella personale / a / b sul server con permesso 700. Non voglio che altri elencino i contenuti in / a / b. Il proprietario di / a è root.

Ora devo aprire tutte le autorizzazioni della directory / a / b / c a tutti gli utenti.

Ho modificato l'autorizzazione di / a / b / c in 777 ma è ancora inaccessibile per altri.


2
È necessario impostare il 'bit di esecuzione' per consentire l'attraversamento della directory (per attraversare / chmod +x /a/b
ae

Risposte:


34

Puoi. Devi solo impostare il bit eseguibile nella /a/bdirectory. Ciò impedirà di poter vedere qualsiasi cosa b, ma puoi comunque fare tutto se vai direttamente a a/b/c.

% mkdir -p a/b/c
% chmod 711 a/b
% sudo chown root a/b
% ll a/b
  ls: cannot open directory a/b: Permission denied
% touch a/b/c/this.txt
% ls a/b/c
  this.txt

Fai attenzione che mentre altri non possono elencare il contenuto di /a/b, possono accedere ai file in quella directory se indovinano il nome del file.

% echo hello | sudo tee a/b/f
% cat a/b/f
hello
% cat a/b/doesntexist
cat: a/b/doesntexist: No such file or directory

Quindi assicurati di mantenere le autorizzazioni appropriate (nessun gruppo / mondo) su tutti gli altri file / directory all'interno della bdirectory, in quanto ciò eviterà questo avvertimento.


In alternativa all'impostazione del bit eseguibile, potresti anche fornire un collegamento reale a / b / c che risiede in un'altra posizione?
Moby Disk

2
@MobyDisk Non è possibile collegarsi a una directory.
Michael Hampton,

Non funzionerebbe, perché non importa cosa, devi ancora leggere bper collegarti ac
stevieb

3
Si noti che ci sono alcuni avvertimenti importanti a questo. Se uno qualsiasi dei file a/bha permessi di gruppo / zero diversi da zero e un avversario conosce o può indovinare i loro nomi, detto avversario può interagire con quei file.
Kevin,

Vero @Kevin, i permessi per tutto ciò che è sotto bdovrebbero avere permessi impostati per proteggersi da questo prima della creazione c, e quindi è necessaria la diligenza quando vengono popolati altri articoli bper garantire che i permessi siano sicuri solo per il proprietario.
Stevieb,

9

Con queste autorizzazioni, non puoi raggiungere il tuo obiettivo. Per accedere alla directory c, è necessario consentire a tutti gli altri utenti di attraversare la directory, beseguendo l'autorizzazione di esecuzione per quella directory. Con l' /a/bimpostazione sulla modalità 711, è possibile ottenere ciò che si desidera poiché si garantisce l'attraversamento della directory ma si nega la lettura e la scrittura. Ma tieni presente che mentre altri utenti non possono elencare i file /a/b, potrebbero essere file di accesso se indovinano il nome e i file hanno autorizzazioni sufficientemente aperte.


3

Se un utente non può accedere /a/b, non può accedere a nessun file in /a/b/c. Le autorizzazioni su /a/b/csono irrilevanti poiché l'attraversamento della directory si interrompe in /a/b.

Se tutto ciò che vuoi è impedire che la directory /a/bvenga elencata, ma stai bene con gli utenti che accedono ai file /a/bse indovinano un nome di file, puoi renderlo /a/beseguibile ma non leggibile. Su una directory, l'autorizzazione di lettura controlla solo l'elenco dei contenuti della directory, mentre l'autorizzazione di esecuzione controlla l'accesso alle voci di quella directory.

# chmod u=rwx,go=x /a/b
# chmod u=rwx,go=rx /a/b/c
# echo 'hello' >/a/b/existingfile
# su bob -c 'ls -l /a/b'
ls: /a/b: Permission denied
# su bob -c 'cat /a/b/nosuchfile'
cat: /a/b/nosuchfile: No such file or directory
# su bob -c 'cat /a/b/existingfile'
hello
# su bob -c 'ls -l /a/b/c'
 contents of /a/b/

Se non si desidera che altri utenti possano accedere ai file ad /a/beccezione di /a/b/c, è possibile esporre /a/b/ctramite un'altra vista, tramite un bind mount .

# chmod u=rwx,go=x /a/b
# chmod u=rwx,go=rx /a/b/c
# mkdir /c
# mount --bind /a/b/c /c
# su bob -c 'ls /a/b/c'
ls: /a/b/c: Permission denied
# su bob -c 'ls -l /c'
 contents of /a/b/
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.