关于CHROOT的基本常识

2024-01-09 14:38
文章标签 基本常识 chroot

本文主要是介绍关于CHROOT的基本常识,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

CHROOT就是Change Root,也就是改变程式执行时所参考的根目录位置。

一般的目录架构:
/
/bin
/sbin
/usr/bin
/home

CHROOT的目录架构:
/hell/
/hell/bin
/hell/usr/bin
/hell/home


* 为何要CHROOT?

1.限制被CHROOT的使用者所能执行的程式,如SetUid的程式,或是会造成 Load 的Compiler等等。
2.防止使用者存取某些特定档案,如/etc/passwd。
3.防止入侵者/bin/rm -rf /。
4.提供Guest服务以及处罚不乖的使用者。
5.增进系统的安全。

* 要如何建立CHROOT的环境?
1.chroot()这个function:
chroot(PATH)这个function必须具有 root的身份才能执行,执行後会将跟目录切换到PATH 所指定的地方。
2.login的过程:
使用者无论是从console或是telnet进入,都必须执行/usr/bin/login来决定是否能进入系统,而login所做的动作大致是:
(1)印出login的提示符号,等待使用者输入密码。
(2)检查密码是否正确,错误的话回到(1)。
(3)正确的话以setuid()来改变身份为login_user。
(4)以exec()执行user的shell。

因此我们必须先修改/usr/bin/login的source code,让login在(2)到(3)的中间执行chroot($CHROOT_PATH)
的动作,已达到CHROOT的目的,并以修改过的login替代原先的/usr/bin/login。
(5)稍微好一点的方法必须在做chroot()之前检查login user的group,如果有某个特定的group(如chrootgrp)
才执行chroot(),不然所有的人都会被chroot了。

3.建立CHROOT所需的环境:
(1)必须具备的目录:(假设$CHROOT为希望建立的路径)
$CHROOT/etc $CHROOT/lib $CHROOT/bin
$CHROOT/sbin $CHROOT/usr/lib $CHROOT/usr/bin
$CHROOT/usr/bin $CHROOT/usr/local $CHROOT/home
(2)仔细审查/etc中的档案,需具备执行程式时所需的档案,如passwd,groups,hosts,resolv.conf等等。
(3)拿掉不想给的执行档,如su,sudo等SetUid的程式,以及compiler甚至telnet。
(4)测试一下,以root身份执行 chroot $CHROOT /bin/sh即可进入CHROOT环境中。(man chroot for details)
4.在console或是以telnet进入试试。
5.Username/Password Resolve的考量:
在CHROOT时你可能不希望被CHROOT的使用者(以後简称CHROOTer)能拿到/etc/passwd或是/etc/shadow等档案,尤其是有root密码的。以下有三种情形:
(1)/etc/passwd跟 $CHROOT/etc/passwd相同:
这是最差的作法,因为一来被CHROOTer有机会得到root的encrypted password,二来要保持/etc/passwd及$CHROOT/etc/passwd的同步性是个大问题。因为/usr/bin/login参考 的是/etc/passwd,可是一旦CHROOTer被chroot後执行passwd时,他所执行的passwd所更改的将是$CHROOT/etc /passwd。
(2)/etc/passwd跟$CHROOT/etc/passwd不同:
你可以把$CHROOT/etc/passwd中的重要人物(如root)的密码拿掉,然後以比较复杂的方法修改 /usr/bin/login:
if (has_chroot_group) {
re-load $CHROOT/etc/passwd
if (password is valid) {
chroot($CHROOT)
exec(shell)
} else logout()
}
此法的好处是你可以将/etc/passwd跟$CHROOT/etc/passwd分开来。/etc/passwd只影响CHROOTer在login 时所使用的username,其他如password甚至uid,gid,shell,home等等都是参考$CHROOT/etc/passwd的。
缺点是你其他的daemon如ftpd,httpd都必须做相同的修改才能正确取的CHROOTer的资讯,而且你在把一个user加入或移出chroot_group时都必须更改/etc/passwd跟$CHROOT/etc/passwd。

(3)使用NIS/YP:
此法大概是最简单,且麻烦最少的了。因为一切的user information都经过NIS Bind来取得,不但可以保护住 root的密码,也省去/etc/passwd跟 $CHROOT/etc/passwd同步管理上的问题。不只是 passwd,连其他如groups,hosts,services,aliases等等都可以一并解决。

* 其他必须考虑的问题:
1.执行档的同步性:
再更新系统或是更新软体时,必须考虑到一并更换$CHROOT目录下的档案,尤其如SunOS或是BSD等会用nlist()来取得Kernel Information的,在更新kernel时必须更新$CHROOT下的kernel。
2./dev的问题:
一般而言你必须用local loopback NFS将/dev read-write mount到$CHROOT/dev以使得一般user跟CHROOTer可以互相write以及解决devices同步性的问题。
3./proc的问题:
在Linux或是SYSV或是4.4BSD的系统上许多程式会去参考/proc的资料,你必须也将/proc mount到$CHROOT/proc。
4./var的问题:
一般而言/var也是用local loopback NFS read-write mount到$CHROOT/var下,以解决spool同步性的问题,否则你可能必须要修改lpd或是sendmail等daemon,不然他们是不知 道$CHROOT/var下也有spool的存在。
5.Daemon的问题:
你必须修改一些跟使用者相关的Daemon如ftpd,httpd以使这些daemon能找到正确的user home。

* CHROOT无法解决的安全问题:
1.不小心或是忘记拿掉SetUid的程式:
CHROOTer还是有机会利用SetUid的程式来取得root的权限,不过因为你已经将他CHROOT了,所以所能影响到的只有$CHROOT/目录以下的档案,就算他来个"/bin/rm -rf /" 也不怕了。
不过其他root能做的事还是防不了,如利用tcpdump来窃听该localnet中的通讯并取得在该localnet上其他机器的帐号密 码,reboot机器,更改NIS的资料,更改其他没有被CHROOT的帐号的密码藉以取得一般帐号(所以root不可加入NIS中)等等。
(此时就必须藉由securetty或是login.access或是将wheel group拿出NIS来防止其login as root)
2.已载入记忆体中的Daemon:
对於那些一开机就执行的程式如sendmail,httpd,gopherd,inetd等等,如果这些daemon有hole(如endmail),那hacker只要破解这些daemon还是可以取得root权限。

* 结论:
CHROOT可以增进系统的安全性,限制使用者能做的事,但是CHROOT Is Not Everything,因为还是有其他的
漏洞等著hacker来找出来。

这篇关于关于CHROOT的基本常识的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/587473

相关文章

软件缺陷因素及基本常识

目录 缺陷的因素 测试常见的基本常识 测试是不完全的(测试不完全)  测试具有免疫性(软件缺陷免疫性)  测试是 “ 泛型概念 ” (全程测试)  80-20 原则  为效益而测试  缺陷的必然性  软件测试必须有预期结果  软件测试的意义 - 事后分析  结论  软件开发和使用的历史已经留给了我们很多由于软件缺陷而导致的巨大财力、物力损失的经验教训。这些经验教训迫使我

vsftp 设置chroot_local_user=yes之后,用户无权限登录

我是在centos7上安装了3.0.2版本的vsftp,为了限制用户不能访问父级目录在vsftpd.conf中加了chroot_local_user=yes,这个配置本来的意思是让所有的用户都不能去访问除了自己的home目录以上的目录,但是加了之后发现之前可能登录的用户提示用户身份校验失败,后来查到原因是新版的vsftpd的以下更新: Add stronger checks for the co

chroot 与 jail

http://www.cnblogs.com/yxwkf/p/3902433.html   所谓“监牢”就是指通过chroot机制来更改某个进程所能看到的根文件夹,即将某进程限制在指定文件夹中,保证该进程仅仅能对该文件夹及其子文件夹的文件有所动作,从而保证整个server的安全。     创建chroot“监牢”     曾经,Unix/Linux上的daemon都是以root

chroot -- 限制其他用户liunx空间

目录- 限制其他用户liunx空间 前言开始进入监狱总结 前言 前提 ecs 服务器,centos系统,乌班图系统需要root榕湖 开始 首先,登录到您的ECS机器。创建一个新用户: 使用 adduser 命令创建一个新用户。例如,要创建一个名为 xushouchun 的用户,您需要运行: sudo adduser xushouchunsudo passwd

Linux操作系统的基本常识详解

转自:Linux操作系统的基本常识详解Linu_操作系统或许你很熟悉,但是你对Linu_操作系统的基本常识又认识多少呢?下面由小编为大家整理了Linu_操作系统的基本常识详解的相关知识,希望对大家有帮助!  Linu_操作系统的基本常https://www.pinlue.com/article/2020/06/2300/2510789845813.html

关于电弧焊的一些基本常识

电弧:一种强烈而持久的气体放电现象,正负电极间具有一定的电压,而且两电极间的气体介质应处在电离状态。引燃焊接电弧时,通常是将两电极(一极为工件,另一极为填充金属丝或焊条)接通电源,短暂接触并迅速分离,两极相互接触时发生短路,形成电弧。这种方式称为接触引弧。电弧形成后,只要电源保持两极之间一定的电位差,即可维持电弧的燃烧。 电弧特点:电压低、电流大、温度高、能量密度大、移动性好等,一般20~30V的

jvm基本常识

文章目录 JVM基本常识程序的执行方式字节码和机器码的区别JDK、JRE、JVM的关系Oracle JDK与OpenJDK查看JDK版本OpenJDK 的来历Oracle JDK的来历Oracle JDK与OpenJDK的区别 VM和Hotspot的关系JVM和Java的关系JVM的运行模式 JVM基本常识 程序的执行方式 主要有三种:静态编译执行、动态编译执行、动态

JVM基本常识了解

1,JVM : Java Virtual Machine java虚拟机,实现跨平台工作的根本原因 2,JRE:Java Runtime Environment :Java运行时环境 整体来说属于运行时阶段 JVM分成三大块: 类加载模块,内存管理模块,执行引擎模块。 JVM两个版本:1,hotspot(商业)    2,openjdk(开源) 软件执行的技术支持: 硬件的支持:

JAVA基础学习——基本常识

一下大多数内容来自尚学堂:www.sxt.cn 只是供自己学习,留做笔记,侵删。 DAY one 常用的dos命令 操作名称操作含义md创建目录dir列出当前目录下的文件以及文件夹cd删除目录cd…退回到上一级目录cd\退回到根目录del删除文件echo创建文件,如echo haha>1.txt 注: 1.如果del后面接的是目录名,则表示删除目录下的所有文件。 知识点 1.Java语

vsftpd 报错refusing to run with writable root inside chroot

1、响应:    500 OOPS: vsftpd: refusing to run with writable root inside chroot() 错误:    严重错误: 无法连接到服务器   解决方案:ftp武器根目录必须是755,不能是777权限 而且用户属主必须是root sudo chmod 755 /var/ftp sudo chown root:root /var/