飘云阁安全论坛

 找回密码
 快速注册

QQ登录

只需一步,快速开始

查看: 778|回复: 2

[提问] iOS使用posix_spawn执行dpkg安装deb命令不成功问题

[复制链接]
  • TA的每日心情
    开心
    2020-12-1 10:43
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2020-12-30 10:21:14 | 显示全部楼层 |阅读模式
    各位好,
         在看了飘大的书以后,了解到可以使用 posix_spawn执行系统命令;
    于是,我想到了自动下载deb,并自动安装的的思路;在app里面下载deb包,然后发消息给守护进程,执行dpkg命令安装。

    首先在ssh连接到手机上以后,dpkg -i xxx.deb 可以安装正常,正常没有问题;

    问题就出在用 posi_spawn下发执行安装时不成功,大家有什么想法,是posix_spawn执行时的权限问题吗;

    #include <spawn.h>

    static int spawn(const char* executable, ...) {
        int     ret;
        pid_t   pid;
        va_list args;
        va_start(args, executable);
        setuid(0);
        ret = posix_spawn(&pid, executable, NULL, NULL, (char* const *)args, NULL);
        if (ret == 0) waitpid(pid, NULL, 0);
        return ret;
    }
    调用:
    spawn("/usr/bin/dpkg", "/usr/bin/dpkg", "-i", "xxx.deb", NULL);


    执行错误:

    dpkg: error: PATH is not set


  • TA的每日心情
    开心
    2016-6-16 14:07
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    发表于 2020-12-30 12:28:26 | 显示全部楼层
    最后一个参数别忽略啊~~

    [Objective-C] 纯文本查看 复制代码
    #include <spawn.h>
    
    static int spawn(const char* executable, ...) {
        int     ret;
        pid_t   pid;
        va_list args;
        va_start(args, executable);
        setuid(0);
        const char *path[] = {"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", NULL};
        ret = posix_spawn(&pid, executable, NULL, NULL, (char**)args, (char**)path);
        if (ret == 0) waitpid(pid, NULL, 0);
        return ret;
    }
    
    int main(int argc, char const *argv[])
    {
            spawn("/usr/bin/dpkg", "/usr/bin/dpkg", "-i", "chinapyg.deb", NULL);
            return 0;
    }

    回复 支持 2 反对 0

    使用道具 举报

  • TA的每日心情
    开心
    2020-12-1 10:43
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2020-12-30 14:04:00 | 显示全部楼层
    飘云 发表于 2020-12-30 12:28
    最后一个参数别忽略啊~~

    [mw_shl_code=objc,true]#include

    非常感谢飘哥,完美解决问题!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 快速注册

    本版积分规则

    快速回复 返回顶部 返回列表