linux capability
linux capability功能在访问控制上的优势,掌握使用Capability达到遵守最小权限原则的目的,并分析linux中基于Capability访问控制的设计。Linux内核从2.1版本开始,就开始支持Capabilities的安全机制。Capabilities安全机制提出的目的在于实现系统特权操作的更加细粒度的访问控制,使用户能够根据实际的安全需求来控制root进程拥有的权限范围,从而取消root进程多余权限带来的安全隐患。在Capabilities机制中,所有权限被分割成比较具体和细小的权限(并将分割出来的每种细小权限称为权能),每种权能代表着root用户进行某种特权操作的权限;系统中只有进程和可执行文件具有权能,系统根据一定的安全策略来赋予进程权能,并根据进程拥有的权能来进行特权操作的访问控制。
一、环境搭建
libcap 库能够使用户级别的程序与 capability 特性做交互,一些linux发行版不包括这个库,在环境中已经有 /usr/include/sys/capability.h 这个文件,为了避免老版本的影响,我们还是删掉以前的,然后重新下载一个。
$ cd
$ wget http://labfile.oss.aliyuncs.com/libcap-2.21.tar.gz
$ tar xvf libcap-2.21.tar.gz
$ sudo rm /usr/include/sys/capability.h
$ sudo rm /lib/libcap.so*
$ cd /home/shiyanlou/libcap-2.21/
$ sudo make
$ sudo make install
编译完成后将make生成的文件安装到系统目录中。
二、感受一下Capabilities
首先,以普通用户登录并运行以下命令:
$ ping -c 3 www.baidu.com
命令成功运行,如果你查看/bin/ping的属性会发现它是一个root所有的Set-UID程序。如果ping中包含漏洞,那么整个系统就可能被入侵。问题是我们是否能移除ping的这些权限。
让我们关闭程序的suid位:
$ sudo su
显示当前目录下文件详细信息:文件所有者具有读取写入执行的所有权限,同组用户具有读取执行的权限、其他用户具有读取执行的权限.
我们将其关闭后,我们现在再ping百度看会发生什么
$ ping www.baidu.com
ping: icmp open socket: Operation not permitted
它会提示你操作不被允许。这是因为ping命令需要打开RAW套接字,该操作需要root特权,这就是为什么ping是Set-UID程序了。但有了capability,我们就可以杯酒释兵权了,让我们分配cap_net_raw给ping,看看会发生什么:
发现此时又可以连接到baidu.com
接着我们进行修改密码, seed 用户的密码是 dees
$ sudo su seed
$ sudo chmod u-s /usr/bin/passwd
$ passwd
$