web-dev-qa-db-fra.com

`Permission refusé` à CD dans un répertoire, même si les autorisations sont correctes

C'est tellement bizarre. Connecté à une boîte Linux (RHEL) en tant qu'utilisateur 'g', faisant un ls -lah spectacles

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

Donc, l'utilisateur 'g' dans le groupe 'g'/devrait/être capable de lire et d'écrire sur le répertoire .ssh, mais si je le fais ls -lah .ssh/ Je reçois ls: .ssh/: Permission denied. Je reçois aussi la permission refusée si j'essaye et cat tout fichier dans le répertoire

Si je passe en tant que root et changez les autorisations en 700, 744, 766 ou quoi que ce soit tant que l'autorisation "utilisateur" est 7, cela fonctionne et je peux CD et ls le répertoire et les fichiers dans.

id g Retour

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

Éditer:

J'ai copié ces autorisations exactement à une autre boîte identique et il n'y a pas de problème. Je peux cd dans un répertoire sans exécuter des autorisations.

13
Smudge

Le répertoire Will nécessite le jeu de bit Execute pour que vous puissiez entrer. Je ne sais pas ce que vous avez testé, mais vous ne peut pas Entrez un répertoire sans le bit Execute, ni lecture de fichiers dedans:

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

C'est-à-dire, sauf Votre processus a le jeu de capacités CAP_DAC_Override POSIX (comme la racine a), ce qui vous permet d'entrer des annuaires sans le jeu de bits exécutable, IIRC.

Fondamentalement, vous devriez essayer de vous garder le répertoire .ssh à 700, et tout ce qui y est à 600, juste pour être sûr. La page SSH Man fournit des instructions par fichier sur les modes de propriété et de permission requis pour les fichiers dans ~/.ssh.

29
wzzrd

Un répertoire nécessite une autorisation d'exécution afin de cd dans celui-ci. C'est le comportement attendu.

17
Grahamux

Afin de ls ou de CD dans un répertoire, vous devez exécuter des autorisations. Pendant que vous ne les avez pas, vous ne pouvez pas vraiment inspecter le contenu et voir les autorisations des fichiers à l'intérieur, de manière probable que les autorisations de fichiers sont tort elles-mêmes, si vous ne pouvez pas les chat.

L'autorisation de répertoire de 700 et des autorisations de fichier 644 sont une configuration parfaitement correcte pour moi.

2
Sunny

Je suppose que c'est un problème de fichier SSH maintenant? Pas un problème de chmod général?

Si oui, essayez

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

Les répertoires ont besoin de x bit (pour le répertoire que le bit est considéré comme un bit de recherche) à ouvrir. J'utilise donc l'arbre afin que je ne puisse obtenir que le jeu de dossiers et éviter le cauchemar d'avoir tous les fichiers définis comme exécutables (l'option pour l'arborescence est -d List directories only.):

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

AVERTISSEMENT !!! Vous devriez avoir ceci en considération:

  • en utilisant chmod ou chown récursif sur root / Répertoire ou répertoires système détruira votre système d'exploitation (en fait tout ce qui est récursif sur / répertoire ou répertoires système est dangereux)

  • ce n'est pas une bonne pratique de sécurité pour définir la permission en vrac comme ça

0
Eduard Florinescu