社区新版论坛已上线,点击立即前往!使用 openKylin 账户授权登录,解锁更多体验!

openKylin论坛

 找回密码

Linux下获取root权限的c程序 [复制链接]

本帖最后由 penghuan 于 2013-7-8 11:21 编辑

当你想要执行一个需要root权限的脚本时,你通常的做法是什么样的呢,如:
  1. ls /root
复制代码
你会得到如下输出:


下面给出一种不需要输入密码就能执行root权限脚本的方法
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #define BUFFSIZE 1024

  5. int main(int argc, char *argv[]){
  6.         char *cmd = malloc(BUFFSIZE);
  7.         setuid(geteuid());
  8.         setgid(getegid());
  9.         cmd = argv[1];
  10.         int i = 0;
  11.         for(i = 0;i < argc - 1;i++) {
  12.                 argv[i] = argv[i+1];
  13.         }
  14.         if(execvp(cmd, argv)){
  15.                 printf("error");
  16.                 free(cmd);
  17.                 exit(1);
  18.         }
  19.         free(cmd);
  20. }
复制代码
然后进行如下操作:
  1. gcc -o transeuid transeuis.c
  2. sudo chown root:root transeuid
  3. sudo chmod +s transeuid
复制代码
接着调用transeuid来执行ls /root
  1. ./transeuid ls /root
复制代码
就能看到/root下内容了



楼主
发表于 2013-7-8 11:17:10
回复

使用道具 举报

Linux下获取root权限的c程序 [复制链接]

说句俗话,这个行为简直是脱裤子放屁。。
沙发
发表于 2013-7-8 13:58:45
回复

使用道具 举报

Linux下获取root权限的c程序 [复制链接]

采姑娘的小蘑菇 发表于 2013-7-8 13:58
说句俗话,这个行为简直是脱裤子放屁。。

特定的情况下,没有交互让你输密码,你通常怎么做?
板凳
 楼主| 发表于 2013-7-8 16:42:37
回复

使用道具 举报

Linux下获取root权限的c程序 [复制链接]

在补个ubuntu获取root权限的方法  很多用户可能发现ubuntu没给root权限  但是sudo命令的权限却是ALL即用sudo能执行root指令  因此 我们可以用 sudo  passwd root来修改root用户的密码  你就可以使用root了
地板
发表于 2013-7-8 21:02:43
回复

使用道具 举报

Linux下获取root权限的c程序 [复制链接]

penghuan 发表于 2013-7-8 16:42
特定的情况下,没有交互让你输密码,你通常怎么做?

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

使用道具 举报

Linux下获取root权限的c程序 [复制链接]

本帖最后由 penghuan 于 2013-7-9 14:26 编辑
采姑娘的小蘑菇 发表于 2013-7-9 10:12
1.既然过程中你用了sudo,为什么不直接配置sudo为nopassword?
2.假如不用sudo,也不用输密码,我就会直 ...

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

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

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

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

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

针对第4点,你需要
  1. ./transeuid sudo /bin/sh -x xxx.sh
复制代码
6#
 楼主| 发表于 2013-7-9 14:10:17
回复

使用道具 举报

Linux下获取root权限的c程序 [复制链接]

给应用提权,还有一种比较好的方法是将这个应用做成服务的形式随系统启动而启动,这样该应用所有涉及到root权限的操作都不需要密码交互
7#
 楼主| 发表于 2013-7-9 14:29:20
回复

使用道具 举报

openKylin

GMT+8, 2024-6-14 15:20 , Processed in 0.033230 second(s), 20 queries , Gzip On.

Copyright ©2022 openKylin. All Rights Reserved .

ICP No. 15002470-12 Tianjin

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