Linux实例使用su命令切换用户时,提示“su: failed to execute /bin/bash: Permission denied”错误怎么办?

问题现象

使用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命令切换用户,确认问题已解决。