Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1941848
  • 博文数量: 424
  • 博客积分: 1291
  • 博客等级: 中尉
  • 技术积分: 2682
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-13 01:34
个人简介

linux oracle 网络安全 编程

文章分类

全部博文(424)

文章存档

2016年(22)

2015年(53)

2014年(57)

2013年(242)

2012年(50)

分类: LINUX

2013-02-23 18:40:38

以前,Unix/Linux上的daemon都是以root权限启动的。当时,这似乎是一件理所当然的事情,因为像Apache这样的服务器软件需要绑定到“众所周知”的端口上(小于1024)来监听HTTP请求,而root是惟一有这种权限的用户。
    但是,随着攻击者活动的日益频繁,尤其是缓冲区溢出漏洞数量的激增,使服务器安全受到了更大的威胁。一旦某个网络服务存在漏洞,攻击者就能够访问并控制整个系统。因此,为了减缓这种攻击所带来的负面影响,现在服务器软件通常设计为以root权限启动,然后服务器进程自行放弃root,再以某个低权限的系统账号来运行进程。这种方式的好处在于一旦该服务被攻击者利用漏洞入侵,由于进程权限很低,攻击者得到的访问权限又是基于这个较低权限的,对系统造成的危害比以前减轻了许多。
    有些攻击者会试图找到系统其它的漏洞来提升权限,直至达到root。由于本地安全性远低于远程安全保护,因此攻击者很有可能在系统中找到可以提升权限的东西。即使没有找到本地漏洞,攻击者也可能会造成其它损害,如删除文件、涂改主页等。
    为了进一步提高系统安全性,Linux内核引入了chroot机制。chroot是内核中的一个系统调用,软件可以通过调用库函数chroot,来更改某个进程所能见到的根目录。比如,Apache软件安装在/usr/local/httpd/目录下,以root用户(或具有相同权限的其它账号)启动Apache,这个root权限的父进程会派生数个以nobody权限运行的子进程,具体情况取决于个人设置。父进程监听请求自80端口的tcp数据流,然后根据内部算法将这个请求分配给某个子进程来处理。这时Apache子进程所处的目录继承自父进程,即/usr/local/httpd/。
    但是,一旦目录权限设定失误,被攻击的Apache子进程可以访问/usr/local、/usr、/tmp,甚至整个文件系统,因为Apache进程所处的根目录仍是整个文件系统的根。如果能够利用chroot将Apache限制在/usr/local/httpd/,那么,Apache所能存取的文件都是/usr/local/httpd/下的文件或其子目录下的文件。创建chroot“监牢”就可以将进程权限限制在文件系统目录树中的某一子树中。
chroot即change to root,那个root代表的是根目录,也就是改变程式执行时所参考的根目录位置。
一般的目录架构:    |      CHROOT的目录架构:
__________________|________________________
/                              |      /hell/
/bin                         |      /hell/bin
/sbin                        |      /hell/sbin
/home                      |      /hell/home
/usr/bin                   |      /hell/usr/bin      
也就是用 " /hell " 来代替了原来的 " / " 目录
chroot 这个命令的功能描述为:Run a command with a different root directory. 即,将在其它目录的环境下运行一个命令理解成在"/"目录下运行该命令. 但是我们不能将其错误的理解成整个应用环境的功换. chroot下应用执行环境与原来的环境的差别只是 "/" 目录的实际物理路径不一样(当然会造成同样的路径所访问到的实际文件不一样)
不过实际使用中,一般都是这样用chroot:
chroot 目录 (执行后 "/" 目录会切换到命令中指定的目录,运行此命令还必须具有root身份才能执行)
这种用法后面没有跟一个命令作为参数,chroot会默认执行SHELL环境变量所保存的值作为命令来执行. 由于SHELL这个程序运行起来后不会退出,且会在终端下给出命令提示符,所以整个个命令执行起来后,同时出现新shell的提示符,给人的感觉是切换到新的用户环境. 由于新的shell会重新载入一些环境变量以及初始化脚本,故新环境下坏境变量与原来的环境变量还是有一些差别的.
要测试的话:
新建一个目录 "/test" , 把 /bin 以及 /lib 目录拷贝到新目录下,然后就可以命令 "#chroot /test"  将 "/test" 作为新的 "/" 目录,输入exit即回到原来的环境.
命令CHROOT 的意义何在:
1.限制CHROOT环境下的使用者所能行的程式,如SetUid的程式,或是造成 Load 的 Compiler等等
2.防止使用者存取某些特定档案及配置文件,如/etc/passwd
3.防止入侵者/bin/rm -rf /
4.提供Guest服务及限制不守规矩的使用者。
5.增强系系统的安全。
利用chroot技术 搭建 "监牢" 的技术  正在研究中.....这里先不作介绍了
同时希望我这块砖最好能引出几块宝玉来, 嘿嘿.

本文出自 “Binary World” 博客,请务必保留此出处http://liyongxian.blog.51cto.com/432519/112609

阅读(4422) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~