busybox sh ./i.sh,执行到某一句的时候提示 permission denied,但手动执行那一句没有问题。

2016-05-24 17:18:51 +08:00
 bluesky139

具体是这样,已 ROOT 的 Android 手机上,我放了个 busybox 到 /tmp 目录下。 切到 /tmp , chmod 777 busybox, 可以执行。 执行./busybox dirname 或 ./busybox echo aa 都没有问题。

这时写个脚本 i.sh ,放到 /tmp 下,内容就 3 句: #!/bin/sh echo aa /tmp/busybox-arm dirname

然后执行 ./busybox sh ./i.sh 执行到第 3 句提示 ./i.sh: line 3: /tmp/busybox-arm: Permission denied 纠结了半天没发现哪里有问题。

13357 次点击
所在节点    Android
32 条回复
skydiver
2016-05-24 17:29:19 +08:00
/tmp/busybox-arm
你有这文件么……
mdzz
2016-05-24 17:29:52 +08:00
1. 还是我见识少,还没发现哪款 Android 手机上 /tmp 目录可用的 :doge:
2. 到底是 /tmp/busybox 还是 /tmp/busybox-arm ?
3. 你确定第一句不写 #!/system/bin/sh ?
pheyx
2016-05-24 18:35:05 +08:00
看看 SELINUX 是不是启用了,禁用试试(可能得重编译内核)
bluesky139
2016-05-24 19:29:35 +08:00
@skydiver
@mdzz 手误,是 /tmp/busybox 。
/tmp 目录可用,我测试的这个手机上,/tmp 是链接到 /data/local/tmp 的。
第一句改为 #!/system/bin/sh 也没用,我是调用的 busybox 里面的 sh ,总觉得这样也跟第一句没多大关系了。
bluesky139
2016-05-24 19:34:47 +08:00
@pheyx 我先执行 setenforce 0 ,再执行./busybox sh ./i.sh 也一样。
如果我在 i.sh 里面加上 setenforce 0 ,这一句也会报 permission denied.


@skydiver
@mdzz
@pheyx 一个值得注意的现象是,如果不使用 busybox 里面的 sh ,就可以正常执行,就是直接 sh ./i.sh
但其实我是想用 busybox 里面的 ash ,结果遇到了这个问题, sh 和 ash 的表现一样。
pheyx
2016-05-24 20:33:19 +08:00
@bluesky139 执行完 setenforce 0 之后 getenforce 返回什么? setenforce 在某些版本的 android 会静默失败
bluesky139
2016-05-24 20:45:53 +08:00
@pheyx 返回 0 ,没有任何输出,看起来像是对的。如果是在非 root 下执行,会提示 permission denied ,所以 ROOT 下我觉得应该是成功了的。
bluesky139
2016-05-24 20:48:38 +08:00
@pheyx 我执行 getenforce 返回的是 Permissive ,似乎没有问题。
ghw
2016-05-24 20:52:36 +08:00
这样呢?
#!/bin/sh echo aa &&/bin/sh /tmp/busybox-arm dirname
bluesky139
2016-05-24 21:14:00 +08:00
@ghw 这样又变成了 ./i.sh: line 3: /bin/sh: Permission denied
ghw
2016-05-24 21:16:12 +08:00
@bluesky139 你这东分两行写也会这样麽
bluesky139
2016-05-24 21:19:50 +08:00
@ghw 用 && 连成一行也一样。
ghw
2016-05-24 21:31:32 +08:00
尴尬。。原来你本来就是三行的。。。
我还以为是一行

; dirname 先执行呢,后一个也会挂麽。。哎。。。

#!/system/bin/sh
/tmp/busybox-arm dirname
echo aa
bluesky139
2016-05-24 21:43:47 +08:00
@ghw 这跟执行先后顺序没关系吧,我试了下,也一样。话说 V2EX 上换行有什么特殊的符号,我直接换行结果发出来就连在一行上了。
extreme
2016-05-24 21:58:42 +08:00
只能慢慢排除,先把 /tmp/busybox-arm 弄到其他路径看看能不能执行。
LoliconInside
2016-05-24 22:05:07 +08:00
为什么总觉得是$PATH 的问题
fcicq
2016-05-24 22:22:35 +08:00
上 strace 记录先
julyclyde
2016-05-24 22:26:12 +08:00
tmp 是不是 mounted with noexec 了?
ProfFan
2016-05-24 22:26:28 +08:00
同意楼上,先看崩哪儿了
bluesky139
2016-05-25 10:15:01 +08:00
@LoliconInside $PATH 可能会是什么问题,这里 $PATH 输出 /sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin ,如果我在脚本里先把 PATH 清空再执行也一样。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/280954

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX