适用范围
LINUX
问题概述
在客户环境中,我们会经常使用工具或脚本执行命令。但是在有的环境中,同的工具,同样的脚本有的执行成功,有的执行失败。
在工具中我们执行"ps -ef | grep mysqld " 查看进程的命令! 在测试的时候却告诉没有权限执行。
从日志上来看,该工具将脚本包装了临时文件,其中包含了两部份,一个是将pid 写入临时文件 ,一个正真实行的脚本。
而同样的脚本在其它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
问题原因
后来经过查看是因为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 \""
参考文档
- Permission SELinux denied bashpermission selinux denied bash permission startup denied bash permission gradlew denied bash permission denied bash null permission connect denied docker permission openssh denied please docker permission connect denied permission权限denied问题 permission stevenlong smith-bing denied permission publickey coding denied