"Permesso negato" al CD in una directory anche se i permessi sono corretti


13

Questo è così strano. Accesso a un box Linux (RHEL) come utente 'g', durante uno ls -lahspettacolo

drwxrwxrwx 6 g    g    4.0K Jun 23 13:27 .
drwxrw-r-x 6 root root 4.0K Jun 23 13:15 ..
-rwxrw---- 1 g    g     678 Jun 23 13:26 .bash_history
-rwxrw---- 1 g    g      33 Jun 23 13:15 .bash_logout
-rwxrw---- 1 g    g     176 Jun 23 13:15 .bash_profile
-rwxrw---- 1 g    g     124 Jun 23 13:15 .bashrc
drw-r----- 2 g    g    4.0K Jun 23 13:25 .ssh

Quindi l'utente 'g' nel gruppo 'g' / dovrebbe / essere in grado di leggere e scrivere nella directory .ssh ma se lo faccio ls -lah .ssh/ottengo ls: .ssh/: Permission denied. Ottengo anche l'autorizzazione negata se provo e catqualsiasi file nella directory

Se vado come root e modificare le autorizzazioni a 700, 744, 766o qualsiasi cosa fino a quando l'autorizzazione 'user' è 7 funziona e posso CD e LS la directory e file all'interno.

id g ritorna

uid=504(g) gid=506(g) groups=506(g)

Modificare:

Ho copiato queste autorizzazioni esattamente in un'altra scatola identica e non c'è nessun problema. Posso cdentrare in una directory senza eseguire le autorizzazioni.

Risposte:


27

La directory si richiede il set di bit di esecuzione per poter entrare. Non so cosa hai testato, ma non puoi inserire una directory senza il bit di esecuzione o leggere i file in essa:

$ mkdir foo
$ echo "baz" > foo/bar
$ chmod 660 foo
$ cd foo
bash: cd: foo: Permission denied
$ cat foo/bar
cat: foo/bar: Permission denied

Cioè, a meno che il processo non abbia il set di funzionalità POS_DAC_OVERRIDE POSIX (come root ha), che consente di inserire directory senza il set di bit eseguibile, iirc.

Fondamentalmente, dovresti provare a mantenere la tua directory .ssh a 700, e tutto in essa a 600, solo per sicurezza. La pagina man di ssh fornisce istruzioni per file sulle proprietà e le modalità di autorizzazione richieste per i file in ~ / .ssh.


17

Una directory richiede l'autorizzazione di esecuzione per cdaccedervi. Questo è il comportamento previsto.


Ma anche io non posso avere catalcun file nella directory con le stesse autorizzazioni, non dovrebbero aver bisogno di autorizzazioni di esecuzione per leggere
Smudge,

4
È necessario eseguire le autorizzazioni sulla directory per accedere a qualsiasi cosa all'interno di una directory. Questa risposta è corretta
EightBitTony,

1
@samarudge Considerare xsu una directory per darti il ​​permesso di "essere in" quella directory. Senza di esso, non è possibile eseguire il cd nella directory, non è possibile vedere cosa c'è nella directory, non è possibile aprire ciò che è nella directory. Se non hai il permesso di essere in biblioteca, non puoi leggere i libri lì.
DerfK,

Se aggiungo le autorizzazioni di esecuzione alla directory (744 alla directory, 644 ai file all'interno) ricevo un errore da SSHD che dice che le autorizzazioni della directory .ssh devono essere 644 o inferiori. Ma con i permessi come 644 dice che non può accedere a .ssh / authorized_keys
Smudge il

* Dice specificamente '.ssh / directory', non i file
Smudge,

2

Per poter ls o cd in una directory, è necessario eseguire le autorizzazioni. Mentre non li hai, non puoi davvero ispezionare il contenuto e vedere le autorizzazioni dei file all'interno, quindi molto probabilmente le autorizzazioni dei file sono sbagliate se non riesci a cat.

Il permesso di directory di 700 e il permesso di file 644 sono una configurazione perfettamente adatta a me.


Le autorizzazioni per i file sono 644, il proprietario dei file è g: g, quindi le autorizzazioni dei file sono corrette. Se aggiungo le autorizzazioni di esecuzione alla directory SSHD dice che devo rilasciare le autorizzazioni a 644 o meno
Smudge,

I commenti di Sunny sono corretti - votazione verso il basso un po 'dura
AndyM,

0

Presumo che questo sia un problema con un file SSH ora? non è un problema di chmod generale?

Se è così, prova

$chmod go-w ~/
$chmod 700 ~/.ssh
$chmod 600 ~/.ssh/*
$chmod 600 ~/.ssh/.*

un altro problema, potrebbe essere il punto di montaggio, è montato da qualche altra parte, CIFS, NFS?
AndyM,

0

Le directory necessitano di x bit impostati (per la directory quel bit è visto come bit di ricerca) per aprirsi. Quindi uso tree in modo da ottenere solo il set di cartelle ed evitare l'incubo di avere tutti i file impostati come file eseguibili (l'opzione per tree è -d List directories only.):

sudo tree -faid here_goes_your_directory xargs -L1 -I{} sudo chmod 755  "{}"

Avvertimento!!! dovresti tenerlo in considerazione:

  • l'uso di chmod o chown ricorsivo nella /directory principale o nelle directory di sistema distruggerà il sistema operativo (in realtà qualsiasi cosa ricorsiva nella /directory o nelle directory di sistema è pericolosa)

  • questa non è una buona pratica di sicurezza per imporre tali autorizzazioni in blocco

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.