Linux系统编程40 进程控制 - 用户权限和组权限,解释器文件

这篇博客介绍了Linux系统中用户权限和组权限的相关概念,如实际用户ID、有效用户ID和保存的设置用户ID。通过setuid()函数展示了如何在程序中更改这些ID,特别是如何在root权限下执行操作。文中还提供了示例代码,演示了如何使用setuid()函数以root身份执行命令,尝试访问受保护的文件如/etc/shadow,但因权限不足导致失败。此外,提到了解释器文件的概念及其执行方式。

用户权限和组权限是 分作 多种方式来存放的。

uid:
实际用户ID,有效用户ID,保存的设置用户ID

gid:
实际组ID,有效组ID,保存的设置组ID

前面第四章 文件和目录中 4.4节中 有说明,与一个进程相关联的ID 有如下几个:
在这里插入图片描述

实际用户ID:告诉我们实际是谁,一般是用户登陆时,取自口令文件的ID
有效用户ID:主要是进程用于校验文件的使用权限
保存的设置用户ID:执行程序时保存有效用户ID的副本。

设置实际用户ID 和 有效用户ID /组
在这里插入图片描述
SYNOPSIS
#include <sys/types.h>
#include <unistd.h>

   int setuid(uid_t uid);

DESCRIPTION
setuid() sets the effective user ID of the calling process. If the effective UID of the caller is root (more precisely: if the caller has the CAP_SETUID capability), the real UID and saved set-user-ID are also set.
设置 有效用户ID,如果是超级用户root,则也会设置 实际用户ID 和 保存的设置用户ID

更改三个 用户ID 的不同方法: exec / setuid(uid)

在这里插入图片描述
交换 实际用户ID 和 有效用户ID

在这里插入图片描述

设置 有效用户ID/组
在这里插入图片描述超级用户root 和 非特权用户 两种用户 设置不同ID 的各个函数
在这里插入图片描述

setuid()实验:以谁的身份来执行什么样的操作

mhr@ubuntu:~/Desktop/xitongbiancheng/test$ ./a.out 0 cat /etc/shadow

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


int main(int argc,char* argv[])
{
	pid_t pid;
	
	if(argc < 3)// 至少三个参数
	{
		fprintf(stderr,"Usage: ...\n");
		exit(1);
	}



	fflush(NULL);
	pid = fork();
	if(pid < 0)
	{
		perror("fork()");
		exit(1);
	}

	else if(pid == 0) //child
	{
		setuid(atoi(argv[1]));//设置用户ID 为 root,前提是 root权限下执行该可执行程序 
		fflush(NULL);
		execvp(argv[2],argv+2);//变参 用 execvp()
		perror("execvp");
		exit(1);
	}

	wait(NULL);

		
	
	exit(0);
}

root@ubuntu:/home/mhr/Desktop/xitongbiancheng/test# ./a.out 0 cat /etc/shadow

前提是 root权限下执行该可执行程序

解释器文件

本质就是脚本文件,其起始行的形式是:
#! pathname [optional-argument]

常见的 解释器文件如:
#! /bin/sh

在这里插入图片描述
解释器文件 对后缀名不做要求,如:

p.exec

#! /bin/bash

ls
cat /etc/shadow
ps




mhr@ubuntu:~/Desktop/xitongbiancheng/test$ 
mhr@ubuntu:~/Desktop/xitongbiancheng/test$ chmod u+x p.exec   // 给 可执行权限x
mhr@ubuntu:~/Desktop/xitongbiancheng/test$ 
mhr@ubuntu:~/Desktop/xitongbiancheng/test$ 
mhr@ubuntu:~/Desktop/xitongbiancheng/test$ ls -l p.exec 
-rwxrw-r-- 1 mhr mhr 37 Feb 21 22:51 p.exec
mhr@ubuntu:~/Desktop/xitongbiancheng/test$ 
mhr@ubuntu:~/Desktop/xitongbiancheng/test$ ./p.exec 
a.out  p.exec  test.c  TEST_FILE  wait.c
cat: /etc/shadow: Permission denied
   PID TTY          TIME CMD
  7179 pts/2    00:00:00 bash
  7671 pts/2    00:00:00 bash
  7700 pts/2    00:00:00 p.exec
  7703 pts/2    00:00:00 ps
mhr@ubuntu:~/Desktop/xitongbiancheng/test$ 

即执行的是 /bin/bash,用 /bin/bash 解释
ls
cat /etc/shadow
ps

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ma浩然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值