gpt4 book ai didi

linux - Setuid shell 脚本

转载 作者:太空宇宙 更新时间:2023-11-04 05:30:02 25 4
gpt4 key购买 nike

需要一些关于传递 argv 的帮助,以便 shell 脚本可以作为/usr/local/bin/script.sh 用户域运行

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main( int argc, char *argv[] )
{

if( argc == 3 )
{
char *user = argv[1];
char *domain = argv[2];
setuid(0);
system("/usr/local/bin/somescript.sh user domain");
return 0;
}
else if( argc > 3 )
{
printf("Too many arguments supplied.\n");
}
else
{
printf("One argument expected.\n");
}
}

编译后,我执行了代码:

[user@server:/usr/local/bin]#c_setuid hello hello.com
Invalid username/domain
[user@server:/usr/local/bin]#

我怀疑字符串 hello & hello.com 没有传递到/usr/local/bin/somescript.sh。有人可以帮忙吗?

最佳答案

您无法通过调用 setuid(0) 成为 root。

您正在将文字“用户”和“域”字符串传递给脚本。 C 不是 Perl,变量不会神奇地插入字符串中。

您需要创建在运行时传递给系统的字符串:

char cmd[100];
sprintf(cmd, "/usr/local/bin/somescript.sh %s %s", user, domain);
system(cmd);

关于linux - Setuid shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23299911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com