将命令传递到使用bash脚本运行shell的二进制文件

时间:2015-03-22 18:42:27

标签: linux bash shell

新的bash脚本编写因此有一点小问题,并且想知道是否有人可以解决我遇到的一些麻烦,我有一个简单的C文件叫做test,它创建一个shell,如下所示:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main()
{
  execl("/bin/sh", "/bin/sh", (void *) NULL);
  perror("exec");
 return 1;
}

我想创建一个bash脚本来执行这个文件,我在下面已经完成了,但是在执行时我希望将命令发送到二进制文件创建的shell - 这是否可能我尝试以下无效:

#!bin/bash
/var/testfolder/test; # execute the test c file to spawn the shell
??? #don't know how to pass commands to the new shell created :(

2 个答案:

答案 0 :(得分:0)

您编译的C二进制文件是否具有我认为的SETUID权限?使用二进制和参数,您可以使用此二进制权限执行任何类似的shell:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main( int argc, char ** argv )
{
    execv("/bin/sh", argv );
    perror("exec");
    return 1;
}

输出测试脚本以打印参数和当前进程:

$ ./test_execv ./test.sh foo bar
Executing $0: ./test.sh
Args $*: foo bar
process:
  PID TTY          TIME CMD
 3300 pts/1    00:00:08 bash
 3498 pts/1    00:00:00 sh
 3499 pts/1    00:00:00 ps

安全问题
如果您可以将脚本执行到root shell,则任何人都可以执行此操作。我想你只需添加一些你的脚本(只有那些需要的)和一个sudo权限,从你需要的帐户以root身份运行。

答案 1 :(得分:0)

试试这个:

#!/bin/bash
/var/testfolder/test <<EOF
cmdtopass1
cmdtopass2
cmdtopass3
EOF
相关问题