ubuntu 20.04.1 普通用户执行root权限程序,通过代码配置静态IP

系统环境 :Ubuntu 20.04.1
使用环境: 比如公司发给用户的机器,不能给用户root密码,用户就修改不了IP,所以需要做一个程序能修改IP
euid概念 :当进程执行时,操作系统会对euid进行识别,以此判断用什么权限来执行这个进程。
1.确定要修改的网卡名(该图片是网上找的)
在这里插入图片描述
2.查看网卡配置文件: cat /etc/netplan/*.yaml 每台机器yaml文件名不一样,需要自己确定
配置静态IP要修改该文件的内容

network:
  version: 2
  renderer: NetworkManager
  ethernets:
    ens33:
      addresses:
        - 192.168.1.100/24
      gateway4: 192.168.1.1
      nameservers:
        addresses: [114.114.114.114]

3.代码编写(因公司上网要远程连接,无法复制到这里,纯手敲,可能编译出错,注意检查)
代码如下:

#include <stdio.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
	/*由第一步得来*/
	char name[1024] = "ens33";
	/*由第二步得来*/
	char path[1024] = "cat /etc/netplan/my_yaml.yaml";
	char buf[4096]  = {0};
	int len = 0;
	int fd = -1;
	int uid = geteuid();
	
	/*以指定uid执行此程序*/
	setuid(uid);
	
	/*写入文件的内容,tip:如果复制使用,可能出错,自己膝盖注意缩进*/
	len = snprintf(buf, 4096, "network:\n        version: 2\n        renderer: NetworkManager\n        ethernets:\n                %s:\n                        addresses:\n                                - %s\n                        gateway4: %s\n                        nameservers:\n                                addresses: [114.114.114.114]\n", name, "192.168.1.200/24", "192.168.1.1");
	
	fp = open(path, 0_RDWR | O_CREAT | O_TRUNC, 0777);
	if(fp < 0)
	{
		printf("open error\n");
		return -1;
	}
	
	len = write(fd, buf, len);
	
	close(fd);
	
	system("netplan apply");
	
	printf("the euid is %d\n", uid);
}

4.在root权限下编写好且编译,

$gcc my_ifconfig.c -o my_ifconfig
$ls -l
-rwxr-xr-x 3 user group 102 Mar11 22:56 my_ifconfig

5.设置可执行程序my_ifconfig uid权限

$chmod 0755 my_ifconfig
最高位0就是setuid的位置, root用户  euid就是0
$chmod +s my_ifconfig
$ls -l
-rwsr-sr-x 3 user group 102 Mar11 22:56 my_ifconfig
可以发现文件的x位变成了s,说明设置成功

6.切换到普通用户,执行此程序

$su user
$./my_ifconfig  
若无报错则成功,再ifconfig确定IP是否更改
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值