目录
适用范围
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 \""