欢迎大家光临【无师自通-教程网】您的到来是我们的荣幸。本站提供photoshop教程,ps教程,flash教程,cad教程,网页制作教程,excel教程,asp教程,vb教程,3d教程,c语言教程,html教程,coreldraw教程,dreamweaver教程,java教程,3dmax教程 等各种教程为主题的内容和服务,相信您会在这里找到您所需要的东东。无师自通伴您一生-谢谢您的光临!!
网站地图 设为首页
简繁切换 加入收藏
栏目待定 留言本站
您现在的位置: 无师自通-教程网 >> 操作系统 >> Linux >> 系统安全 >> 教程正文

  没有公告

教程: Linux教程-系统安全-使用capability加强Linux系统的安全 更多...
教程: Linux教程-系统安全-使用capability加强Linux系统的安全


1.简介
   UNIX是一种安全操作系统,它给普通用户尽可能低的权限,而把全部的系统权限赋予一个单一的帐户--root。root帐户用来管理系统、安装软件、管理帐户、运行某些服务、安装/卸载文件系统、管理用户、安装软件等。另外,普通用户的很多操作也需要root权限,这通过setuid实现。

   这种依赖单一帐户执行特权操作的方式加大了系统的面临风险,而需要root权限的程序可能只是为了一个单一的操作,例如:绑定到特权端口、打开一个只有root权限可以访问的文件。某些程序可能有安全漏洞,而如果程序不是以root的权限运行,其存在的漏洞就不可能对系统造成什么威胁。

   从2.1版开始,内核开发人员在Linux内核中加入了能力(capability)的概念。其目标是消除需要执行某些操作的程序对root帐户的依赖。从2.2版本的内核开始,这些代基本可以使用了,虽然还存在一些问题,但是方向是正确的。


2.Linux内核能力详解

   传统UNIX的信任状模型非常简单,就是“超级用户对普通用户”模型。在这种模型中,一个进程要么什么都能做,要么几乎什么也不能做,这取决于进程的UID。如果一个进程需要执行绑定到私有端口、加载/卸载内核模块以及管理文件系统等操作时,就需要完全的root权限。很显然这样做对系统安全存在很大的威胁。UNIX系统中的SUID问题就是由这种信任状模型造成的。例如,一个普通用户需要使用ping命令。这是一个SUID命令,会以root的权限运行。而实际上这个程序只是需要RAW套接字建立必要ICMP数据包,除此之外的其它root权限对这个程序都是没有必要的。如果程序编写不好,就可能被攻击者利用,获得系统的控制权。

   使用能力(capability)可以减小这种风险。系统管理员为了系统的安全可以剥夺root用户的能力,这样即使root用户也将无法进行某些操作。而这个过程又是不可逆的,也就是说如果一种能力被删除,除非重新启动系统,否则即使root用户也无法重新添加被删除的能力。

2.1.能力的概念

   Linux内核中使用的能力(capability)概念非常容易被混淆。计算机科学中定义了很多种能力(capability)。能力就是一个进程能够对某个对象进行的操作,它标志对象以及允许在这个对象上进行的操作。文件描述符就是一种能力,你使用open系统调用请求获得读或者写的权限,如果open系统调用成功,系统的内核就会建立一个文件描述符。然后,如果收到读或者写的请求,内核就使用这个文件描述符作为一个数据结构的索引,检索相关的操作是否允许。这是一种检查权限的有效方式,在执行open系统调用是,内核一次性建立必要的数据结构,然后的读写等操作检查只需要在数据结构中梭梭即可。对能力的操作包括:复制能力、进程间的迁移能力、修改一个能力以及撤消一个能力等。修改一个能力类似与把一个可以读写的文件描述符改为只读。目前,各种系统对能力的应用程度并不相同。

   POSIX 1003.1e中也提出了一种能力定义,通常称为POSIX能力(POSIX capabilities),Linux中的定义不大一样。内核使用这些能力分割root的权限,因为传统*NIX系统中root的权限过于强大了。

2.2.Linux是如何使用POSIX capabilities代替传统的信任状模型的

   每个进程有三个和能力有关的位图:inheritable(I)、permitted(P)和effective(E),对应进程描述符task_struct(include/linux/sched.h)里面的cap_effective, cap_inheritable, cap_permitted。每种能力由一位表示,1表示具有某种能力,0表示没有。当一个进程要进行某个特权操作时,操作系统会检查cap_effective的对应位是否有效,而不再是检查进程的有效UID是否为0。例如,如果一个进程要设置系统的时钟,Linux的内核就会检查cap_effective的CAP_SYS_TIME位(第25位)是否有效,

   cap_permitted表示进程能够使用的能力。在cap_permitted中可以包含cap_effective中没有的能力,这些能力是被进程自己临时放弃的,也可以说cap_effective是cap_permitted的一个子集。进程放弃没有必要的能力对于提高安全性大有助益。例如,ping只需要CAP_NET_RAW,如果它放弃除这个能力之外的其它能力,即使存在安全缺陷,也不会对系统造成太大的损害。cap_inheritable表示能够被当前进程执行的程序继承的能力。


3.Linux支持的能力

   Linux实现了7个POSIX 1003.1e规定的能力,还有21个(截止到2.4.7-10版本的内核)Linux所特有的,这些能力在/usr/src/linux/include/linux/capability.h文件中定义。其细节如下:

能力名 数字 描述
CAP_CHOWN 0 允许改变文件的所有权
CAP_DAC_OVERRIDE 1 忽略对文件的所有DAC访问限制
CAP_DAC_READ_SEARCH 2 忽略所有对读、搜索操作的限制
CAP_FOWNER 3 如果文件属于进程的UID,就取消对文件的限制
CAP_FSETID 4 允许设置setuid位
CAP_KILL 5 允许对不属于自己的进程发送信号
CAP_SETGID 6 允许改变组ID
CAP_SETUID 7 允许改变用户ID
CAP_SETPCAP 8 允许向其它进程转移能力以及删除其它进程的任意能力
CAP_LINUX_IMMUTABLE 9 允许修改文件的不可修改(IMMUTABLE)

[1] [2] [3] 下一页

教程录入:admin    责任编辑:admin 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     
     
     
     

    dos入门教程

    dos入门教程-2

    dos入门教程-1
    免责声明!本站资料大部分来自于互联网,其版权归原作者或其他合法者所有.如内容涉及或侵犯了您的权益,请通知本人,我将尽快处理!.欢迎您的光临。
    辽ICP备07003958号
    无师自通,伴你一生-教程网