最近在工作中,遇到了执行应用程序的时候出现permission denied问题,如下图示。
由上图示我明明已经把该可执行程序的权限改成777了,也就是:chmod 777 -R /sbin*,但还会出现permission denied问题,简直吐血啊,第一次遇到这么奇怪的问题。
由于问题过于“简单”,所以网上搜索到的无非是chmod 777 *或chmod a+x *的解决办法,类似下图示。
但我把应用的执行权限调为777了,但是并没有什么作用,因此上述方法只适合小白的permission denied问题。
对于permission denied问题我询问了做内核这一块的师兄,他说可以用strace工具来调试卡在哪里,然后我就兴高采烈的去移植strace工具了, 然而的然而,因该是编译工具链问题,导致编译工具老是出问题,所以无奈放弃!!!
最后我直接用strings命令,查看应用程序依赖哪些库,然后查看对应库的执行权限。
发现应用程序运行依赖了ld.so.1这个库。
然后我就去看ld.so.1这个库,发现它没有执行权限,为此我把该库chmod 777后,就可以正常运行了。
应用程序permission denied除了自己的可执行权限不足可导致外,链接库的权限不足也可能导致permission denied。
over!