httpser 踩坑 chroot() 函数

文章目录

起因

在写httpser 想要切换目录记得有个函数chroot 于是就用了 , 然后神奇的事情就出现了 , 之后想要输出当前工作目录等一系列的操作都无效,我们来了解其功能。
查阅资料 :

chroot()用来改变根目录为参数path所指定的目录. 只有超级用户才允许改变根目录, 子进程将继承新的根目录. 调用成功则返回0,
失败则返-1, 错误代码存于errno. 错误代码

实例

#include <stdio.h>
#include <unistd.h> 
#include <stdlib.h>
int main(void) 
{ 
    /* 将根目录改为/tmp ,并将工作目录切换至/tmp */ 
    char buf[50];
    // chroot("/home/dra"); 
    chdir("/home/dra/C/fff"); 
    getcwd(buf , 50);
    printf("%s\n",buf);
    return 0; 
}

首先有路径
在这里插入图片描述
程序运行结果
在这里插入图片描述

对代码做出一下修改

chroot("/home/dra"); 
chdir("/C/fff"); 

在这里插入图片描述
由此可知,chroot 就是同描述一般 , 修改了根目录 所有路径操作都以chroot改变以后新路劲来操作。

那用户可以跳出这个root目录吗

#include <stdio.h>
#include <unistd.h> 
#include <stdlib.h>
int main(void) 
{ 
    /* 将根目录改为/tmp ,并将工作目录切换至/tmp */ 
    char buf[50];
    int a,b;
    a=chroot("/home/dra/C"); 
    b=chdir("/../pwn"); 
    getcwd(buf , 50);
    printf("%s %d %d\n",buf,a,b);
    return 0; 
}

在这里插入图片描述

答案告诉我们这个函数还是安全的。

#include <stdio.h>
#include <unistd.h> 
#include <stdlib.h>
int main(void) 
{ 
    /* 将根目录改为/tmp ,并将工作目录切换至/tmp */ 
    char buf[50];
    int a,b;
    a=chroot("/home/dra/"); 
    b=chdir("/../pwn"); 
    getcwd(buf , 50);
    printf("%s %d %d\n",buf,a,b);
    return 0; 
}

在这里插入图片描述

似乎是因为函数忽略了/… , 这里C和pwn 是同一级目录。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值