Linux執行個體使用su命令切換使用者時,提示“su: failed to execute /bin/bash: Permission denied”錯誤怎麼辦?

更新時間:
Copy as MD

問題現象

使用su命令切換使用者時,提示以下錯誤。

su: faild to execute /bin/bash: Permission denied

問題原因

路徑許可權不足:缺少通往 /bin/bash 路徑上必需的執行(x)許可權。沒有執行許可權,無法進入相應目錄,運行/bin/bash建立新的Shell會話。

解決方案

  1. 登入ECS執行個體。

    1. 訪問ECS控制台-執行個體。在頁面左側頂部,選擇目標資源所在的資源群組和地區。

    2. 進入目標執行個體詳情頁,單擊遠端連線,選擇通過Workbench遠端連線。根據頁面提示登入,進入終端頁面。

  2. 檢查/bin/bash是否被鎖定。

    /bin/bash被鎖定,將無法修改許可權。

    1. 檢查擴充屬性是否存在a(僅追加)或i(不可變)。

      sudo lsattr /bin/bash
      # /bin/bash存在a屬性
      ----a---------e------ /bin/bash
      #/bin/bash存在i屬性
      ----i---------e------ /bin/bash
      #/bin/bash存在ai屬性
      ----ia--------e------ /bin/bash

      樣本表明/bin/bash被鎖定,需要修改,否則請檢查並確保/bin/bash具備執行許可權

    2. 移除屬性。

      # 如果存在 i 屬性,執行此命令
      sudo chattr -i /bin/bash
      # 如果存在 a 屬性,執行此命令
      sudo chattr -a /bin/bash

      移除後,請繼續檢查並修本文件系統路徑許可權。

  3. 檢查並確保/bin/bash具備執行許可權。

    1. 檢查完整路徑許可權。

      查看從根目錄到 /bin/bash 的每一級路徑許可權。

      sudo namei -l /bin/bash
      f: /bin/bash
      dr-xr-xr-x root root /
      dr-xr-xr-x root root bin
      -r-xr-xr-x root root bash

      樣本為最少需要的許可權配置,若輸出低於以上許可權請修複,否則可驗證結果

      例如輸出的/許可權為dr--r--r--,表示只有讀許可權,未滿足許可權最小許可權配置,需要修複。
    2. 許可權修複。

      # 修複根目錄許可權
      sudo chmod 555 /
      # 修複 /bin 目錄許可權
      sudo chmod 555 /bin
      # 修複 /bin/bash 檔案許可權
      sudo chmod 755 /bin/bash
  4. 驗證結果。

    重新執行su命令切換使用者,確認問題已解決。