问题解决:centos7 root su "no permission to execute the command"
问题场景
在客户提供的服务器上面,使用root
用户,想跳转到其他用户,比如su - test
。会提示以下问题:
no permission to execute the command
问题环境
软件 | 版本 |
---|---|
Centos | 7 |
问题原因
一般有以下几种原因会导致这种情况:
没有文件的执行权限
我们使用命令ls -l $file
,$file
是我们要执行的脚本。如下图所示
从上图可以看到,该文件是有执行权限的,而且属于root
群组的。当然,我们这里不是属于这种情况。那么我们可以尝试一下,接下来请来看看:
尝试
-
新建
test.sh
,并编写简单语句,如下:#!/bin/bash echo test
-
使用命令
sh test.sh
,结果如下:
-
是不是很惊讶,是可以执行的?怎么不是我之前所说的呢???
别着急,我们可以执行以下命令./test.sh
,结果如下:
-
虽然直接用
sh $file
也可以执行脚本,但是我们希望执行脚本是直接脚本名就可以了。所以按照下面步骤,先将文件权限设置为755
,然后再执行。从下图可以看到,是可以执行的。
被系统的安全模块所限制
一般系统安装的默认情况下,所有用户都默认可以执行su
命令的。但是这就有个隐患,假如用户反复尝试其他用户(比如root
)的登录密码,而这存在一定的安全风险的。所以,一般对于一些程序,都会事先进行身份和权限的验证,判断是否可以通过,通过才能执行,比如su
等。而系统一般会引入PAM(Pluggable Authentication Modules)来进行身份或权限的验证。详细的信息可以百度一下PAM,或者点击本文最下面的参考链接
。
解决方案
修改执行文件的权限
如果是文件未有执行权限,可以使用命令chmod 755 $file
进行赋权。可以参考我上个环节的尝试
步骤所写。
使用sudo
命令进行提权使用
我们可以使用sudo
命令进行提权执行,如使用命令:
sudo su - test
从我们下图的两个对比可以看出,使用sudo
提权成功。
结果
在本文中,主要是使用了sudo
提权解决了权限问题。
总结
针对权限不足,本文提出了两种解决途径。当然,毕竟不是专职运维,只是在遇到问题的过程中,记录下了问题,并去尝试解决。所以,应该有更多的解决问题的方式。这就得靠各位读者了。如果有更好的解决方案,可以留言告知,谢谢!
参考链接
Linux下PAM模块学习总结
CentOS 7系统安全之用户切换与提权
随缘求赞
如果我的文章对大家产生了帮忙,可以在文章底部点个赞或者收藏;
如果有好的讨论,可以留言;
如果想继续查看我以后的文章,可以左上角点击关注
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)