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/
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.