APUE---chap8(进程控制)---8.11(setuid/getuid)

8.11 更改用户ID和更改组ID

  • 关于实际用户ID和有效ID,可查看4.4

 setuid()可以设置 实际用户ID(user), 有效用户ID(effective),保存的用户ID(save)

setgid()可以设置实际组ID(user),有效组ID(effective),保存的用户ID(save)

  • getuid()和geteuid()

       uid_t getuid(void);
       uid_t geteuid(void);

DESCRIPTION
       getuid() returns the real user ID of the calling process.
                //获取实际用户 id
       geteuid() returns the effective user ID of the calling process.
                //获取有效用户 id
  • setuid的调用例子
// main.c文件
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char **argv) {
    if (argc < 3) {
        fprintf(stderr, "usage...\n");
        exit(1);
    }
    pid_t pid = fork();
    if (pid == 0) {
        setuid(atoi(argv[1]));  // 将effective id设为uid
        execvp(argv[2], argv + 2);
        perror("execvp()");
        exit(1);
    }
    wait(NULL);  // 父进程等待
    exit(0);
}

// 编译:make main
// 可执行程序./main把自己设置为root用户的权限
// lbw@123:~/lbw/gitNote/chap8$ ./main 0 cat /etc/shadow
// cat: /etc/shadow: 权限不够

// 查看main程序的所有者
// lbw@123:~/lbw/gitNote/chap8$ ll -l main
// -rwxrwxr-x 1 lbw lbw 17040 2月  20 21:02 main*

// 修改main程序的所有者:由lbw变为root
// lbw@123:~/lbw/gitNote/chap8$ sudo chown root main
// lbw@123:~/lbw/gitNote/chap8$ ll -l main
// -rwxrwxr-x 1 root lbw 17040 2月  20 21:02 main*

//修改权限
// lbw@123:~/lbw/gitNote/chap8$ sudo chmod u+s main
// -rwsrwxr-x 1 root lbw 17040 2月  20 21:02 main*

//执行成功
// lbw@123:~/lbw/gitNote/chap8$ ./main 0 cat /etc/shadow
  • 不太清晰,后续继续更新学习。

8.13 system()函数

int system(const char *command);  //相当于在/bin/bash中执行command命令

system()函数中调用了:fork+exec+wait函数,若3个函数执行成功,返回的是shell的终止状态。若出错,则是返回fork+exec+wait函数相关的错误提示。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值