Linux下获取root权限的c程序

当你想要执行一个需要root权限的脚本时,你通常的做法是什么样的呢,如:

ls /root

你会得到如下输出:
未命名.jpg

下面给出一种不需要输入密码就能执行root权限脚本的方法

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define BUFFSIZE 1024

int main(int argc, char *argv[]){
   char *cmd = malloc(BUFFSIZE);
   setuid(geteuid());
   setgid(getegid());
   cmd = argv[1];
   int i = 0;
   for(i = 0;i < argc - 1;i++) {
   argv[i] = argv[i+1];
   }
   if(execvp(cmd, argv)){
   printf("error");
   free(cmd);
   exit(1);
   }
   free(cmd);
}

然后进行如下操作:

gcc -o transeuid transeuis.c
sudo chown root:root transeuid
sudo chmod +s transeuid

接着调用transeuid来执行ls /root

./transeuid ls /root

就能看到/root下内容了

说句俗话,这个行为简直是脱裤子放屁。。

特定的情况下,没有交互让你输密码,你通常怎么做?

在补个ubuntu获取root权限的方法 很多用户可能发现ubuntu没给root权限 但是sudo命令的权限却是ALL即用sudo能执行root指令 因此 我们可以用 sudo passwd root来修改root用户的密码 你就可以使用root了

1.既然过程中你用了sudo,为什么不直接配置sudo为nopassword?
2.假如不用sudo,也不用输密码,我就会直接修改/etc/passwd文件,把用户uid改为0.
3.假如上面两个都不想用,我还可以添加一个无密码的root用户,需要时直接su即可
4.你有没有用你的程序去运行/bin/sh -x xx.sh试一下?

按你的说法,直接用root用户登录就可以了,还搞那么多操作干嘛?

注意我这些代码的时效性,只针对当前使用它的程序有用,其他程序是没有的

我这个程序想说的是:当你的程序涉及到一些后台操作,这些后台操作需要root权限,这个时候你就可以在后台操作中加入这些提权的代码来直接使用root权限而避开密码交互

你上面的这些操作是完全放开了root,什么人想怎么操作都可以,显然是有很大问题的

而且你这样的做法,对应用的部署来说根本没用,难道你还让每个部署了你的应用的用户都按你的方式来改他们的系统配置?

针对第4点,你需要

./transeuid sudo /bin/sh -x xxx.sh

给应用提权,还有一种比较好的方法是将这个应用做成服务的形式随系统启动而启动,这样该应用所有涉及到root权限的操作都不需要密码交互