GNU/Linux >> Linux Esercitazione >  >> Linux

Esiste un file che esiste sempre e un utente "normale" non può visualizzarlo?

Sui moderni sistemi Linux, dovresti essere in grado di usare /proc/1/fdinfo/0 (informazioni per il descrittore di file 1 (stdout) del processo di id 1 (init nello spazio dei nomi root pid che dovrebbe essere eseguito come root )).

Puoi trovare un elenco con (come utente normale):

sudo find /etc /dev /sys /proc -type f -print0 |
  perl -l -0ne 'print unless lstat'

(rimuovi -type f se non vuoi limitarti ai file normali).

/var/cache/ldconfig/aux-cache è un altro potenziale candidato se hai solo bisogno di considerare i sistemi Ubuntu. Dovrebbe funzionare sulla maggior parte dei sistemi GNU come /var/cache/ldconfig viene creato in lettura+scrittura+ricerca per root solo dal ldconfig comando fornito con GNU libc.


Guardando la pagina man di lstat(2) puoi trarre ispirazione sui casi che potrebbero farlo fallire con errori diversi da ENOENT (il file non esiste.)

Il più ovvio è:

EACCES Il permesso di ricerca è negato per una delle directory nel prefisso del percorso di percorso .

Quindi hai bisogno di una directory da cui non puoi cercare.

Sì, puoi cercarne uno già presente nel tuo sistema (magari /var/lib/private se esiste?) Ma potresti anche crearne uno tu stesso, con l'equivalente di:

$ mkdir myprivatedir
$ touch myprivatedir/myunreachablefile
$ chmod 0 myprivatedir
$ ls -l myprivatedir/myunreachablefile

L'operazione lstat(2) fallirà con EACCES qui. (Rimuovere tutti i permessi dalla directory lo assicura. Forse non hai nemmeno bisogno di così tanto e chmod -x rimuovere i permessi di esecuzione sarebbe sufficiente, poiché i permessi di esecuzione su una directory sono necessari per accedere ai file al suo interno.)

C'è un altro modo creativo per far fallire lstat(2), guardando la sua pagina man:

ENOTDIR Un componente del prefisso del percorso di percorso non è una directory.

Quindi, provando ad accedere a un file come /etc/passwd/nonexistent dovrebbe far scattare questo errore, che è diverso da ENOENT ("No such file or directory") e potrebbe soddisfare le tue esigenze.

Un altro è:

ENAMETOOLONG percorso è troppo lungo.

Ma potresti aver bisogno di un nome molto lungo per questo (credo che 4.096 byte sia il limite tipico, ma il tuo sistema/filesystem potrebbe averne uno più lungo.)

Infine, è difficile dire se qualcuno di questi sarà effettivamente utile per te. Dici che vuoi qualcosa che non attivi lo scenario "il file non esiste". Sebbene in genere ciò significhi un errore ENOENT, in pratica molti controlli di livello superiore interpreteranno semplicemente qualsiasi errore da lstat(2) come "non esiste". Ad esempio test -e o l'equivalente [ -e ...] dalla shell potrebbe semplicemente interpretare tutto quanto sopra come "non esiste", soprattutto perché non ha un buon modo per restituire un messaggio di errore diverso e non restituire un errore implicherebbe che il file esiste, che sicuramente non lo è il caso.


Puoi find fai da te.

Usando /etc -- la directory dei file di configurazione come punto di partenza:

sudo find /etc -type f -perm 0400 -user root

Sul mio sistema, questo non restituisce nulla.

Puoi essere meno restrittivo e consentire il gruppo root (solo utente root dovrebbe essere un membro del gruppo root ) e cerca un'autorizzazione di 440 :

sudo find /etc -perm 0440 -user root -group root

Sul mio sistema questo restituisce:

/etc/sudoers.d/README
/etc/sudoers

Modifica:

In base alla tua modifica, stai cercando una directory che non disponga di autorizzazioni sufficienti per impedire all'utente di impedire l'elenco delle directory:

sudo find / -perm o-rwx -type d -user root -group root 

qui sto cercando le directory (-type d ) che non hanno i bit perm read-write-execute per altri (o-rwx ) ed è di proprietà di root:root .

Tecnicamente, solo l'assenza di execute (x ) impedirebbe un elenco di directory (lstat(2) ) nella directory.

Nell'output ho trovato /run/systemd/inaccessible/ sul mio sistema basato su Systemd init.

Riguardo ai file in /proc , /sys , /dev :

  • Questi filesystem sono FS virtuali, cioè risiedono in memoria, non su disco

  • Se prevedi di affidarti a /proc , utilizza /proc/1/ vale a dire fare affidamento su qualcosa sotto PID 1, non su PID successivi per avere affidabilità/coerenza poiché non è garantita l'esistenza dei PID (processi) successivi.


Linux
  1. Come gestire le autorizzazioni/proprietà di file e directory in Linux

  2. Trova il file quindi cd in quella directory in Linux

  3. mkdir -p fallisce quando la directory esiste

  4. Come posso trovare un file/directory che potrebbe trovarsi ovunque sulla riga di comando di Linux?

  5. Esiste uno strumento in grado di rilevare (e se possibile correggere) glitch nei file MP3?

Trova ed elimina il file più vecchio se ci sono più di X file in una directory in Linux

In che modo l'utente può montare un contenitore di file crittografato in Veracrypt?

Come montare e visualizzare il file ISO come utente root e normale in Linux

Esiste una variabile del percorso di installazione di Qt che posso utilizzare nel file .pro?

Linux / Cartella e cartella /root

Come può un file manager montare un'unità senza root?