首页 理论教育 其他客体介绍-Linux内核安全模块详解

其他客体介绍-Linux内核安全模块详解

时间:2023-11-22 理论教育 版权反馈
【摘要】:文件是使用最普遍的一种客体类型,下面看看其他类型的客体。命名管道命名管道,即named pipe,也称为FIFO。而管道没有名字,内核中的管道只存在于特殊的pipefs文件系统中。设备与命名管道一样,内核将设备处理为特殊文件。或者可以这么说,内核的套接字数据结构中没有用于标记用户和组的成员。它的作用是将套接字和地址绑定在一起绑定后,服务器进程就会等待客户端进程来“连接”。cuid和cgid标记创建者,uid和gid标记所有者。

其他客体介绍-Linux内核安全模块详解

文件是使用最普遍的一种客体类型,下面看看其他类型的客体。

(1)目录

目录就是一种特殊的文件。

(2)管道

Linux内核将管道处理为存储在名为“pipefs”的文件系统中的文件,是文件就有inode,inode中自然有属主和属组。一句话,管道在内核中和文件没有差异。

(3)命名管道

命名管道,即named pipe,也称为FIFO。内核将它处理成一种特殊的文件。是文件就有inode,inode中有属主和属组。命名管道和管道的区别在于命名管道有名字,命名管道文件存在于普通文件系统中。而管道没有名字,内核中的管道只存在于特殊的pipefs文件系统中。

(4)设备

与命名管道一样,内核将设备处理为特殊文件。

(5)套接字(socket)

在内核中,套接字没有任何标记可用于自主访问控制。或者可以这么说,内核的套接字数据结构中没有用于标记用户和组的成员。(www.xing528.com)

有必要叙述一下套接字和套接字文件的关系了。套接字是通过系统调用socket来创建的:

参数domain值为AF_UNIX或AF_LOCAL(这两个常量名对应的值相同)时,被创建出来的套接字是一个属于UNIX本地域的套接字。之后针对此socket执行bind系统调用时,内核会根据传入的addr参数生成一个套接字文件。系统调用bind的原型是:

系统调用bind是由作为服务器的进程来调用的。它的作用是将套接字和地址绑定在一起绑定后,服务器进程就会等待客户端进程来“连接”。作为客户端的进程会调用connect。系统调用connect的原型是:

内核在系统调用connect的代码中会判断当前进程(客户端进程)能否写addr所表示的socket文件。

综上,套接字不等于套接字文件。内核中套接字本身没有用于访问控制的标记!

(6)IPC

IPC是进程间通信(Inter-Process Communication)的缩写。虽然管道、命名管道和UNIX域套接字都可以用作进程间通信,但是IPC一般指共享内存(shared memory)、信号灯(semaphore)、消息队列(message queue)。在内核中,这三者的数据结构中都有一个类型为kern_ipc_perm的成员,在其中有uid、gid、cuid、cgid。cuid和cgid标记创建者,uid和gid标记所有者。这两者的区别在于uid和gid可以通过shmctl、semctl或msgctl修改,而cuid和cgid在IPC对象创建之后不能被修改。下面看一下代码:

7)密钥(key)

在Linux内核中用struct key来表示密钥。此结构中有成员uid和gid代表密钥的属主和属组:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈