socket创建问题
linux里,为什么创建一个socket,需要和sockfs关联,而且还需要一个inode结构;觉得这样做好像比较麻烦,
并且需要额外的数据结构和管理函数(sockfs inode相关)
在FreeBSD里,是没有这些处理的。
不知道linux这样做的理由是什么? Sockfs: a pseudo-filesystem for user/group-based access to privileged ports
sockfs is a pseudo-filesystem which allows the setting of owner, group and permissions for each reserved internet-domain port (i.e. family AF_INET, ports 1-1024). When mounted, directory entries for each reserved port appear (named 1, 2, 3, etc., rather like the procfs entries for each process named by PID).
The filesystem replaces the kernel privilege check for binding reserved ports. Instead of the default check which allows only root to bind to reserved ports, it checks whether the appropriate entry in the sockfs filesystem is writable by the process attempting the bind(). Owner, group and "other" bits are checked just as for ordinary file permission checks. The superuser (in fact, the fsuser just as for ordinary filesystems) is always granted permission. The filesystem allows the owner, group and permission bits to be changed by whoever has write access to the root of the mounted filesystem (usually root alone).
i guess linux try to treat everything as a fs. of course this will bring overhead. thx, 真详细,明白了sockfs的意义。我又check了一下FreeBSD5.1的code,它并没有对reserved port做额外的保护。:p the more functionalities, teh more protections, the more overhead. 我觉得linus这个是不是做过头了,不理解为socket添加文件权限的意义... 正像平常我们所看见的文件系统需要进行保护那样,socket一样需要保护。
我们在网络环境中所进行的操作也应该受到限制,socket和文件一样,都是操作系统中的一个对象,对操作系统中的所有的对象都应该进行保护,这样才可以增加操作系统的安全性。
但是这种访问控制是自主访问控制,安全级别只是达到了C1级水平,要达到更高级别的安全水平,还需要进行粒度更加细的访问控制,以及要根据具体的要求进行强制访问控制。不过这还是一个很复杂的话题。呵呵!
我认为linus之所以要把这个做成socketfs,一个十分重要的因素是把系统中所有的东西都看成是文件,这个的好处我想不用多说,我在这一点上同意dragonfly的看法。
不过为了提高安全性,牺牲一些代价也是应该的,很多的时候,安全比性能更重要。 :lol::lol::lol: 还是不明白,这么说系统里有65536个端口文件?不再需要socket这个函数,而是使用fread来获得? :oops::oops: no, u still use socket to get a socket, but os use sockfs to streamline the management.
:-D:-D
页:
[1]