麒麟服务器上执行可执行脚本报错:bash: ./xx: Permission denied(完整版)

前情提要

本来都好好的,我重启了服务器以后就开始报这个错了,而我的麒麟服务器目前是这个情况:

  1. 已经在服务器上配置好了 ssh 免密登录,在命令行里执行 ssh -o StrictHostKeyChecking=no -p 22 username@xxx.xxx.xxx.xxx 可以正常登录
  2. 可执行文件存在于 /tmp 中
  3. 查看可执行文件目录的权限,发现权限是 drwxrwxr-x,而可执行文件的权限是 -rwxr-xr-x,对于 user 本身来说,应该是可以执行的(对于linux文件权限不太了解的可以看文章【Linux】权限 一

找bug的心路历程

我本来以为是 ssh 的权限问题,网上查到最多的解决方法就是像下面两篇这样:

修改/etc/ssh/sshd_config,但是对于我已经配置好免密登录的服务器来说,这一步着实没什么必要,和我遇到的问题基本没有关系

看了半天才发现我的报错原来不是单纯的Permission denied,前面还有一个 bash: Permission denied(没看清楚,汗流浃背了)

又看到了 解决linux的-bash: ./xx: Permission denied 这篇,说是权限问题,但是我的文件夹和文件权限都属于可执行的

看了半天,终于从 /tmp 目录下执行脚本失败提示 Permission denied 这篇里找到了线索:

发现是/tmp文件系统的属性被设置了noexec。noexec表示对应文件系统不允许执行可执行程序,即使文件具有可执行过权限。通常是考虑安全原因会这么设置。

可能是服务器重启后,重新打开了某个安全设置

于是,我顺藤摸瓜,找到了这篇云服务器 ECS Linux 系统 tmp 目录的安全设置,按照文内的验证方法,在 /tmp 目录下随便建了个 test.sh 文件,手动执行 bash test.sh,终于发现了问题:

    [麒麟安全授权认证]
    检测到未认证程序试图执行,是否允许?
    程序:test.sh    调用者:bash
    路径:/tmp/test.sh
      禁止(N)  允许(Y)  本次允许(O):

输入 Y 后才能正常执行

再搜索,找到了这篇:Linux麒麟系统(V10)rc.local开机不启动,在命令行中执行

getstatus

得到了和博主一样的结果:

KySec status: enabled    // 表示当前为强制模式

exec control    : warning    // 表示当前执行控制功能为警告
net control       : off    // 表示当前网络控制功能关闭
file protect    : on    // 表示当前文件保护功能为开启 (只有当相应功能的状态为(on)的时候,其所控制的功能配置才能生效)
kmod protect    : on    // 表示当前内核模块保护功能为开启
three admin    : off    // 表示当前三权分立状态为关
process protect    : off    // 表示当前进程保护功能为开启

参考

KySec有三种安全模式:① 强制模式(Normal):出现违规操作时,不止会审计记录该操作,还会阻止该操作的运行;② 警告模式(Warning):出现违规操作时,会弹出麒麟安全授权认证框进行授权(在上面2023.3.18问题中提到的弹窗);③ 软模式(Softmode):出现违规操作时,只会审计该操作,而不会阻止该操作的运行。

于是,直接执行

sudo setstatus softmode

把它关掉了,此时再执行 getstatus,就会得到

KySec status: enabled(softmode)

exec control: off
net control : off
file protect: off
kmod protect: off
three admin : off
process protect: off
device control: off

此时再创建一个 test2.sh,并且执行 bash test2.sh 就没有安全授权认证了,问题搞定~

  • 15
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iteapoy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值