web-dev-qa-db-fra.com

'Permission refusée' quand je cd dans n'importe quel dossier

Chaque fois que j'essaie cd folder_name/ dans bash sur le répertoire tout, l'erreur suivante est générée:

-bash: cd: folder_name/: Permission denied

Les autorisations d'exécution sont données à tous les dossiers, ce qui ne semble pas être le problème. Par exemple. l'exécution de stat sur les sorties Desktop/:

  File: 'Desktop/'
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 807h/2055d  Inode: 13107232    Links: 2
Access: (0755/drwxr-xr-x)  Uid: ( 1000/caffeine)   Gid: ( 1000/caffeine)
Access: 2017-12-07 14:39:42.715820915 +0500
Modify: 2017-12-06 01:16:13.985722935 +0500
Change: 2017-12-06 01:16:13.985722935 +0500
 Birth: -

Quelques autres informations éventuellement pertinentes:

  1. Je peux lire ou écrire des fichiers dans n'importe quel répertoire sans aucun problème.
  2. mkdir s'exécute normalement mais je ne peux pas cd dans le nouveau dossier.
  3. rmdir s'exécute normalement.
  4. Je peux ouvrir un terminal dans un dossier particulier en allant dans ce dossier et en ouvrant un terminal à partir de celui-ci.

Alors, est-ce que quelqu'un peut dire quel est le problème?

Merci d'avance.

EDIT: type -a cd affiche le résultat suivant:

cd is a function
cd () 
{ 
    echo "-bash: cd: $1: Permission denied"
}
cd is a Shell builtin
5
Awais Chishti

Vous avez probablement été victime d'une farce, éventuellement de la part de vos collègues ou d'une personne ayant accès à votre machine.

Les fonctions Bash peuvent masquer les commandes intégrées du shell d'origine comme vous pouvez le constater grâce à type -a cd. Il vous a montré qu'il a d'abord trouvé une fonction éventuellement déclarée quelque part.

cd is a function
cd () 
{ 
    echo "-bash: cd: $1: Permission denied"
}
cd is a Shell builtin

À partir de cette sortie, vous pouvez voir que, quelque part, une personne a déclaré une fonction Shell appelée cdname__, qui masque désormais la commande intégrée du shell cdname__. Dans certains cas, quelque chose comme ceci peut être utile pour rendre les commandes plus polyvalentes ou pour implémenter des fonctionnalités supplémentaires, mais dans ce cas, cela a été fait avec une intention malveillante (à mon avis). Cela aurait pu être fait à plusieurs endroits du système:

  • /etc/bash.bashrc
  • /etc/profile
  • n'importe quel fichier dans /etc/profile.d/
  • /etc/environment
  • ~/.bashrc
  • ~/.profile
  • ~/.bash_aliases
  • tout autre fichier qui est exécuté ou provient de ces fichiers

Une solution possible consiste à effectuer une recherche récursive grepdans /etc/ et dans /home/:

grep -r 'bash: cd: $1: Permission denied' /home/*
Sudo grep -r 'bash: cd: $1: Permission denied' /etc/*

Ce qui pourrait donner un résultat comme ça:

$ grep -r 'bash: cd: $1: Permission denied' /home/*
/home/videonauth/.bashrc:    echo "-bash: cd: $1: Permission denied"

Dans cet exemple, la ligne ou la fonction semble être dans ~/.bashrc que vous pouvez voir par le chemin menant à la sortie grepname__. Selon que tout soit caché ou non, cela peut ou non donner un résultat. Il existe d'autres moyens de masquer une telle déclaration de fonction qui peuvent ne pas être aussi faciles à trouver.

2
Videonauth