Monday, June 21, 2010

由setrlimit引发的学习

 
POSIX标准中有这样一个函数: sysconf(3).  自己写了小段代码:

 19 #include <unistd.h>
 20 #include <stdio.h>
 21
 22 int main(int argc, char *argv[]){
 23     int fd_max_number = sysconf(_SC_OPEN_MAX);
 24     printf("%d\n", fd_max_number);
 25
 26 }

使用strace可以知道它其实是调用了getrlimit(2),
什么limit? 全称为 resource limit. 这是kernel分给每个进程独立的一组数据。代表了进程可以使用的最大resource上限。具体有哪些, 可以见getrlimit(2)的manual

kernel也有一堆limit参数, 使用sysctl(2)来修改, kernel的limit应该被称为"limit of limits"。

下面的有关于文件描述符的limit:
 * http://www.karakas-online.de/forum/viewtopic.php?t=9834
 * 其中提到一点很有意义:file descriptor与open file

在了解setrlimit(2)配置file descriptor时, 有一个文件引起了我的高度注意:
/etc/security/limits.conf

疑问:
1. setrlimit是system call, 为什么会使用这样一个配置文件的?
2. limits.conf是pam_limits module的配置文件, 如果用户不加载此module时,kernel的setrlimit又是处理的?

不解的情况下, 在kernel的源代码堆里纠结时, 发现了一个常常会看到的一个词:SELinux
FAQ了一把, 得知SELinux是在kernel里加入复杂的access control。比如role-based access control

疑问又来了: Linux是一个可高度裁剪(scale)的系统, 如何做到去掉Linux Security Modules可以不影响现有的system call的呢?

这其中的机制比较吸引我。 google了一把, 得到一篇好文, 分享:
 * http://www.ibm.com/developerworks/linux/library/l-selinux/





No comments:

Post a Comment

Note: Only a member of this blog may post a comment.