web-dev-qa-db-ja.com

任意のフォルダーにcdしたときに「許可が拒否されました」

anyディレクトリのbashでcd folder_name/を試みると、このエラーが発生します。

-bash: cd: folder_name/: Permission denied

実行許可はすべてのフォルダーに与えられるため、問題ではないようです。例えば。 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
Awais Chishti

いたずらの被害者は、おそらく同僚やあなたのマシンにアクセスできる誰かによって行われたでしょう。

type -a cdのように、Bash関数は元のシェル組み込みコマンドをシャドウすることができます。どこかで宣言されている可能性のある関数が最初に見つかったことを示しています。

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
  • これらのファイルから実行またはソースされるその他のファイル

これを見つける可能性のある方法の1つは、/etc/および/home/で再帰grep検索を実行することです。

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
Videonauth