信息安全 SEED Lab1 Environment Variable and Set-UID Program Lab

1. Task 1

先使用 env 查看环境变量如下图所示

再使用 export MY123=456 设置环境变量MY123为456,如下

此时查看环境变量,可以找到名为MY123的环境变量

再运行unset MY123进行清除

此时查看环境变量,已经找不到了名为 MY123 的环境变量

原因分析: export 和 unset 都是shell自身的命令,操作的是shell变量,而使用export命令设置的shell变量会被shell传递到子进程中, 所以shell fork得到的子进程env 能看到export命令设置的环境变量,而unset清除之后就不会再传递过去,所以就看不到了。

 

2. Task 2

示例代码如下:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

extern char **environ;

void printenv() {
        int i = 0;
        while (environ[i] != NULL) {
                printf("%s\n", environ[i]);
                i++;
        }
}

void main() {
        pid_t childPid;
        switch(childPid = fork()) {
                case 0: /* child process */
                        printenv();  // 标记1
                        exit(0);
                default: /* parent process */
                        //printenv();  // 标记2
                        exit(0);
        }
}

编译并运行,结果如下:

step2 中 将 标记1 和 标记 2中的语句换过来,再编译查看结果

可以看到两次都输出了一大长串环境变量,仔细一看还是有一些不一样的,比如输出的最后一个环境变量。使用 diff 命令查看两个输出文件差异如下:

可以看到刚好是最后一个环境变量不同,为各自的文件名,这是因为两次运行的程序文件名不一样,所以这个环境变量不一样。

接下来我们试着编译成同一个程序名,还是按之前的顺序操作,再用diff查看两个输出文件差异,如下:

原因分析:看到两次输出完全一样,一次是父进程的输出࿰

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值