#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main (int argc, char **argv) {
char *command;
if (argc != 2) {
fprintf (stderr, "Wrong number of arguments\n");
return 1;
}
if ((command = malloc (strlen (argv[1]) + 6)) == NULL) {
fprintf (stderr, "Could not allocate memory\n");
return 1;
}
strcpy (command, "echo ");
strcat(command,argv[1]);
system(command);
free (command);
return 0;
}
如何修补此代码,以便不会给用户任何特权 事情就是通过运行这个我可以以root用户身份访问如何编辑它以便不会发生这种情况
答案 0 :(得分:3)
在致电system(3)
之前,请先致电seteuid(2)
以取消root权限。
答案 1 :(得分:1)
你必须使用system()
吗?避免安全问题的最简单方法是不将用户输入提供给system()
。在您的示例中,您的system()
调用是做什么的,而使用简单的printf
无法做到这一点?
该程序仅限于运行该程序的用户帐户的权限。使用无权使用sudo
,su
等限制访问权限的用户帐户运行程序。使用chroot创建“jail”并在该监狱中运行程序作为非特权用户限制程序有权访问的系统数量。