«Отказано в доступе», когда я перехожу в любую папку

Всякий раз, когда я пытаюсь cd folder_name/ в bash для любого каталога, он выдает эту ошибку:

-bash: cd: folder_name/: Permission denied

Разрешения на выполнение даются всем папкам, так что не кажется проблемой. Например. запуск stat на 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: -

Некоторая другая, возможно, важная информация:

  1. Я могу читать или записывать файлы в любом каталоге без каких-либо проблем.
  2. mkdir выполняется нормально, но я не могу cd в новую папку.
  3. rmdir выполняется нормально.
  4. Я могу открыть терминал в определенной папке, перейдя к этой папке и открыв терминал из нее.

Так кто-нибудь может сказать, в чем может быть проблема?

Заранее спасибо.

РЕДАКТИРОВАТЬ: type -a cd показывает следующий вывод:

cd is a function
cd () 
{ 
    echo "-bash: cd: $1: Permission denied"
}
cd is a shell builtin
5
задан 8 December 2017 в 18:07

1 ответ

Вы, вероятно, были жертвой шутки, возможно, сделанной вашими коллегами или кем-то, кто имел доступ к вашей машине.

Функции Bash могут скрывать исходные встроенные команды оболочки, как вы могли видеть type -a cd. Он показал вам, что сначала нашел функцию, которая, возможно, где-то объявлена.

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

Из этого вывода вы можете видеть, что где-то кто-то объявил функцию оболочки с именем cd, которая теперь скрывает встроенную команду оболочки cd. В некоторых случаях что-то подобное может быть полезно, чтобы сделать команды более универсальными или реализовать дополнительную функциональность, но в этом случае это было сделано с недобросовестным намерением (мое предположение). Это можно было сделать в нескольких местах системы:

  • /etc/bash.bashrc
  • /etc/profile
  • любой файл в /etc/profile.d/
  • /etc/environment
  • ~/.bashrc
  • ~/.profile
  • ~/.bash_aliases
  • любой другой файл, который выполняется или получен из этих файлов

Один из возможных способов найти это, возможно, - это выполнить рекурсивный поиск grep в /etc/ и в /home/:

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

, который может привести к такому выводу:

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

В этом примере строка или функция, кажется, находятся в ~/.bashrc, который вы можете увидеть по пути, ведущему к выходу grep. В зависимости от того, насколько все спрятано, это может или не может привести к результату. Есть и другие способы скрыть такое объявление функции, которое может быть не так легко найти.

2
ответ дан 8 December 2017 в 18:07

Другие вопросы по тегам:

Похожие вопросы: