接前一篇文章:SELinux零知识学习十、SELinux策略语言之客体类别和许可(4)
一、SELinux策略语言之客体类别和许可
3. 有效的客体类别
(2)与网络有关的客体类别
与网络有关的客体类别代表网络资源如网络接口、不同种类的套接字和主机。目前的客体类别足以允许对单个系统上的网络进行广泛的控制,另外还有增强,如标记网络数据包。下表总结了与网络和套接字有关的客体类别:
客体类别 | 描述 |
association | IPsec安全联盟 |
key_socket | PF_KEY协议家族的套接字,用于管理IPsec中的密钥 |
netif | 网络接口(如eth0) |
netlink_audit_socket | 用于控制审核的Netlink套接字 |
netlink_dnrt_socket | 用于控制DECnet路由的Netlink套接字 |
netlink_firewall_socket | 用于创建用户空间防火墙过滤器的Netlink套接字 |
netlink_ip6fw_socket | 用于创建用户空间防火墙过滤器的Netlink套接字 |
netlink_kobject_uevent_socket | 用于在用户空间接收内核事件通知的Netlink套接字 |
netlink_nflog_socket | 用于接收Netfilter日志消息的Netlink套接字 |
netlink_route_socket | 用于控制和管理网络资源如路由表和IP地址的Netlink套接字 |
netlonk_selinux_socket | 用于接收策略载入通知,强制模式切换和清空AVC缓存的Netlink套接字 |
netlink_tcpdiag_socket | 用于监视TCP连接的Netlink套接字 |
netlink_socket | 所有其它的Netlink套接字 |
netlink_xfrm_socket | 用于获取、管理和设置IPsec参数的Nerlink套接字 |
node | 代表一个IP地址或一段IP地址的主机 |
packet_socket | 协议在用户空间执行的原始套接字 |
rawip_socket | 既不是TCP也不是UDP的IP套接字 |
tcp_socket | TCP套接字 |
udp_socket | UDP套接字 |
unix_dgram_socket | 本地机器上(unix域)的IPC数据报套接字 |
unix_stream_socket | 本地机器上(unix域)的IPC流套接字 |
客体类别node、netif、packet_socket、rawip_socket、tcp_socket、udp_socket和socket控制典型的网络访问。
1)netif、node
- netif
客体类别netif代表网络接口,每个有名字的网络接口(如eth0、eth1)都是通过netif客体类别的实例进行表现的。
- node
由IP地址或地址段进行标识的网络上的远程主机是通过node客体类别表现的,使用客体类别node,可以限制主机(通过IP地址)上的哪个进程可以使用网络。
前面列出的不同种类的套接字客体类别代表协议套接字类型,成功发送或接收网络数据需要所有有关的netif、node、socket客体类别实例的许可。
2)标准网络套接字
标准网络套接字是由协议分配的(在调用socket(2)系统调用时确定的),不同的socket客体类别允许我们限制应用程序发送或接收数据包的类型,这对限制应用程序发送原始数据包的能力特别有用。
- tcp_socket和udp_socket
客体类别tcp_socket和udp_socket分别代表TCP和UDP套接字。
- rawip_socket
客体类别rawip_socket代表发送原始IP数据包的套接字。
- packet_socket
客体类别packet_socket代表发送其它类型的原始数据包的套接字。
- socket
所有其它的套接字都由客体类别socket表示。
- association和key_socket
使用IP安全(IPsec)的通讯拥有额外的资源,由客体类别association和key_socket表示,IPsec安全联盟是为通讯提供安全服务的连接。客体类别association代表IPsec联盟,IPsec需要通过密钥管理(PF_KEY)套接字管理密钥,它通过客体类别key_socket进行表现。
3)unix域套接字
Linux系统上的本地通讯可以使用unix域套接字(PF_UNIX)实现,这些套接字通常用于本地IPC。
- unix_stream_socket
面向连接的套接字也叫流套接字,通过客体类别unix_stream_socket进行表现。
- unix_dgram_socket
面向无连接的套接字也叫数据报套接字,通过客体类别unix_dgram_socket进行表现。
- sock_file
unix域套接字可以与文件系统上的某个特定文件关联起来,让其它应用程序很容易就连接到套接字,这个文件通过客体类别sock_file表现,它是一个与文件有关的客体类别,见前一篇文章SELinux零知识学习十、SELinux策略语言之客体类别和许可(4)。
4)Netlink套接字
SELinux中最后一组是Netlink套接字,这些套接字最初是开发用于在Linux最后提供一个标准意义的网络配置。现在它们常常用于在内核与用户之间通讯。基于协议类型的不同,有多种表示Netlink套接字的客体类别,常见的netlink_socket表示无特定客体类别的保留协议。