SELinux 影响 bash: Permission denied

发布时间 2023-06-06 09:55:31作者: www.cqdba.cn

适用范围

LINUX

问题概述

在客户环境中,我们会经常使用工具或脚本执行命令。但是在有的环境中,同的工具,同样的脚本有的执行成功,有的执行失败。
在工具中我们执行"ps -ef | grep mysqld " 查看进程的命令! 在测试的时候却告诉没有权限执行。
image.png

从日志上来看,该工具将脚本包装了临时文件,其中包含了两部份,一个是将pid 写入临时文件 ,一个正真实行的脚本。

image.pngimage.png

而同样的脚本在其它OS上肯定是可以执行的,而且也可以肯定的是有执行权限的,下面OS中还原了该问题。

#创建一个文件 ,并将命令写入到文件中
touch  /tmp/test.sh 
echo 'hostname' > /tmp/test.sh 
#给测试文件授权
chmod 755 /tmp/test.sh 
#执行该文件,没问题
[root@asherdb~]# sh /tmp/test.sh
asherdb

#但是直接执行该文件就会提示没有权限
[root@asherdb~]# sh /tmp/test.sh
bash: /tmp/test.sh: Permission denied 

#按照工具的的方式执行脚本 
[root@asherdb/]# /bin/bash -c "su root  -c  \"echo 'test' ; /tmp/test.sh \""
test
bash: /tmp/test.sh: Permission denied 

image.png

问题原因

后来经过查看是因为tmp目录是在开启SELinux权限下创建的。在开启SELinux的情况下创建的目录和文件有具有这个点的标识。

[root@asherdb/]# ll | grep tmp 
drwxrwxrwt.  17 root root      4096 Jun  1 17:02 tmp

Linux权限列的点不是无意义字符。在开启SELinux的情况下创建的目录和文件有具有这个点,权限列有这个点说明该目录或文件以及设置了SELinux相关的权限。在禁用SELinux权限之后,在之前开启SELinux权限时创建的文件或目录保持原来的权限不便,权限列的点依然显示。新创建的目录或文件在权限列无这个点显示。

解决方案

1.关于SELinux,并重建/tmp目录 ,但一般会有scoke文件存放在该目录,该操作可能会影响业务。
2.将脚本移动到其它目录,关闭SELinux后,在其它目录创建文件夹,如/home ,把脚本存放在home目录下
3.更改脚本执行方式,在每个脚本上增加bash命令

# 如:
sh /tmp/test.sh
#增加/bin/bash, 改为
/bin/bash -c "su root  -c  \"echo 'test' ; /bin/bash /tmp/test.sh \""

参考文档