无法在需要SU权限的Termux中执行脚本

时间:2018-06-29 15:09:25

标签: android unix sh termux

因此,我通常不发布信息,而是花数小时在论坛上拖拉寻找答案-但我完全不知所措。

我想做什么:

真的很简单,我想要一个可以自动更改OnePlus 5上MAC地址的脚本,我已经拥有执行此操作所需的所有命令,并且可以轻松地手动完成操作,脚本,但是呢?哦,男孩...

我尝试过的事情:

这些是在termux中手动运行时可以给我所需结果的命令:

ip link set dev wlan0 down

macchanger --random wlan0

ip link set dev wlan0 up

现在我不使用IP链接集dev wlan0地址xx:xx:xx:xx:xx:xx:xx的原因是因为我必须输入一个地址,而macchanger可以自动生成该地址。 (我没有Unix-foo以编程方式生成MAC地址)。

所以我按时间顺序执行了以下操作:

1)使用这些命令在nano中创建脚本。

2)使用chmod + x changeMAC.sh使脚本可执行。

这在执行时会给出“访问被拒绝”错误消息。

3)首先尝试进入SU,然后执行脚本,由于在调用su时termux失去了环境,因此会出现“ macchanger”未找到的错误。因此,我安装了tsu包装器,该包装器允许您在维护环境的情况下调用tsu并获取su,相当于su --preserve-environment。

但是,这是我开始从桌子上撞头的地方。

如果我在termux终端中执行以下操作:

tsu
./changeMAC.sh

终端只是坐在那里,什么也不做。如果然后输入“ exit”并按回车键,则会收到三则“ Access Denied”错误消息。

我试图规避错误:

4)使用AutoInput像用户一样键入termux,但拒绝这样做。

5)直接从Tasker> Run Shell执行shell命令,但我怀疑这是行不通的,因为macchangeer软件包未安装在tasker shell的范围内。

6)直接使用su --preserve-environment,但同样的事情也会发生!

所以总结一下我的脚本如下:

\#!/data/data/com.termux/files/usr/bin/sh

sleep 1

ip link set dev wlan0 down

sleep 1

macchanger --random wlan0

sleep 1

ip link set dev wlan0 up

exit

但是:

1)不适用于标准特权

2)使用tsu / su --preserve-environment时似乎没有执行,当退出tsu实例时出现错误,尽管它的 waiting 等待实例在执行之前结束...

3)从tsu实例手动执行时工作正常。

我想我只是对Unix / Linux / Android的复杂性还不了解,所以无法理解为什么并因此对其进行纠正。

非常感谢您的帮助。

最好

H。

电话详细信息:

OnePlus 5,植根于Magisk

ElementalX内核

xXx NoLimits自定义ROM

编辑1:

我已经尝试过https://gitlab.com/st42/termux-sudo中的'sudo',但这需要su,然后找不到macchanger,我回到正题。

1 个答案:

答案 0 :(得分:0)

它不起作用的原因有很多:

  • “拒绝访问”时,您只是为脚本的上下文模拟了一个环境,如果选中/ proc / PID_OF_YOUR_PROCESS / env,则会看到一个空环境
  • 如果您使用诸如GNURootDebian之类的chroot解决方案,您将面临chroot jail
  • 在Android系统上具有root权限的脚本外壳很疯狂,请期待问题。
  • 在睡眠链接过程'command1; sleep(1); command2; sleep(1)'中,首选使用'&&'或'||'进行条件链接执行/ li>

我可以为您建议的最简单的解决方案是:

创建一个简单的Application android,然后在您的主要活动中添加:

protected void      onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    try {
        String[] env = {"PATH=/su/bin:/sbin:/system/sbin:/system/bin:/su/xbin:/system/xbin:/system/xbin/"};
        DataOutputStream outputStream;
        outputStream = new DataOutputStream(Runtime.getRuntime().exec("su", env).getOutputStream());
        outputStream.writeBytes("ip link set dev wlan0 down && macchanger --random wlan0 && ip link set dev wlan0 up && exit \n");
        outputStream.flush();
        Toast.makeText(this, "Macchanger DONE", Toast.LENGTH_SHORT).show();
    } catch (IOException e) {
        e.printStackTrace();
        Toast.makeText(this, "Macchanger Error", Toast.LENGTH_SHORT).show();
    }
}

它可以在Nexus 5 Rooter上运行,但是您必须明确地添加一个按钮来控制功能,为什么不打印新的Mac,您可以在这里找到:

  • cat /sys/class/net/NAME_INTERFACE/address

如果要使其自动化,则采用相同的逻辑,但是使用Service而不是Activity