关于 /proc/sys/fs/ 的文档¶
版权所有 (c) 1998, 1999, Rik van Riel <riel@nl.linux.org>
版权所有 (c) 2009, Shen Feng<shen@cn.fujitsu.com>
有关常规信息和法律信息,请查看 intro.rst。
此文件包含 /proc/sys/fs/
中 sysctl 文件和目录的文档。
此目录中的文件可用于调整和监视 Linux 内核操作中的各种杂项和常规事项。由于某些文件可以用来搞乱您的系统,因此建议在实际进行调整之前阅读文档和源代码。
1. /proc/sys/fs¶
目前,这些文件可能会(取决于您的配置)出现在 /proc/sys/fs
中
aio-nr & aio-max-nr¶
aio-nr
显示当前系统范围内的异步 IO 请求数。aio-max-nr
允许您更改 aio-nr
可以增长到的最大值。如果 aio-nr
达到 aio-nr-max
,则 io_setup
将失败并显示 EAGAIN
。请注意,提高 aio-max-nr
不会导致任何内核数据结构的预分配或调整大小。
dentry-negative¶
负 dentry 的策略。设置为 1 以在删除文件时始终删除 dentry,设置为 0 以禁用它。默认情况下,此行为被禁用。
dentry-state¶
此文件显示 fs/dcache.c
中定义的 struct dentry_stat_t
中的值
struct dentry_stat_t dentry_stat {
long nr_dentry;
long nr_unused;
long age_limit; /* age in seconds */
long want_pages; /* pages requested by system */
long nr_negative; /* # of unused negative dentries */
long dummy; /* Reserved for future use */
};
Dentry 是动态分配和释放的。
nr_dentry
显示分配的 dentry 总数(活动 + 未使用)。nr_unused shows
显示未积极使用但保存在 LRU 列表中以供将来重用的 dentry 数量。
age_limit
是以秒为单位的期限,在此期限之后,当内存不足时可以回收 dcache 条目,并且当调用 shrink_dcache_pages()
且 dcache 尚未修剪时,want_pages
为非零。
nr_negative
显示未使用的 dentry 的数量,这些 dentry 也是不映射到任何文件的负 dentry。相反,它们有助于加快拒绝用户提供的非现有文件。
file-max & file-nr¶
file-max
中的值表示 Linux 内核将分配的最大文件句柄数。当您收到大量关于文件句柄耗尽的错误消息时,您可能需要增加此限制。
历史上,内核能够动态分配文件句柄,但不能再次释放它们。file-nr
中的三个值表示已分配的文件句柄数、已分配但未使用的文件句柄数以及最大文件句柄数。Linux 2.6 及更高版本始终报告 0 作为空闲文件句柄的数量 - 这不是错误,它只是意味着已分配的文件句柄数与使用的文件句柄数完全匹配。
尝试分配超过 file-max
的文件描述符会使用 printk
报告,请在内核日志中查找
VFS: file-max limit <number> reached
在内核日志中。
inode-nr & inode-state¶
与文件句柄一样,内核动态分配 inode 结构,但尚无法释放它们。
文件 inode-nr
包含 inode-state
中的前两项,因此我们将跳到该文件...
inode-state
包含三个实际数字和四个虚拟数字。实际数字按出现顺序依次为 nr_inodes
、nr_free_inodes
和 preshrink
。
nr_inodes
代表系统已分配的 inode 数量。
nr_free_inodes
表示空闲 inode 的数量 (?),当系统需要修剪 inode 列表而不是分配更多 inode 时,preshrink 为非零。
mount-max¶
这表示挂载命名空间中可能存在的最大挂载数。
nr_open¶
这表示一个进程可以分配的最大文件句柄数。默认值为 1024*1024 (1048576),这对于大多数机器来说应该足够了。实际限制取决于 RLIMIT_NOFILE
资源限制。
overflowgid & overflowuid¶
某些文件系统仅支持 16 位 UID 和 GID,尽管在 Linux 中 UID 和 GID 为 32 位。当以启用写入的方式挂载这些文件系统之一时,任何将超过 65535 的 UID 或 GID 在写入磁盘之前都会转换为固定值。
这些 sysctl 允许您更改固定 UID 和 GID 的值。默认值为 65534。
pipe-user-pages-hard¶
非特权用户可以为管道分配的最大页面总数。一旦达到此限制,将无法分配新的管道,直到使用量再次低于该限制。当设置为 0 时,不应用任何限制,这是默认设置。
pipe-user-pages-soft¶
非特权用户在管道大小被限制为单个页面之前,可以为管道分配的最大总页数。一旦达到此限制,为了限制总内存使用,该用户的新管道大小将被限制为单个页面,并且使用 fcntl()
尝试增加管道大小的操作将被拒绝,直到使用量降至限制以下。默认值允许分配多达 1024 个默认大小的管道。设置为 0 时,不应用任何限制。
protected_fifos¶
此保护的目的是避免意外写入攻击者控制的 FIFO,而程序本应创建一个常规文件。
设置为“0”时,对 FIFO 的写入不受限制。
设置为“1”时,不允许在全局可写粘性目录中对我们不拥有的 FIFO 进行 O_CREAT
打开操作,除非它们的所有者是该目录的所有者。
设置为“2”时,它也适用于组可写粘性目录。
此保护基于 Openwall 中的限制。
protected_hardlinks¶
一个长期存在的安全问题是基于硬链接的检查时-使用时竞争,最常见于全局可写目录(如 /tmp
)。这种缺陷的常见利用方法是在遵循给定的硬链接时跨越特权边界(例如,根进程遵循另一个用户创建的硬链接)。此外,在没有独立分区的系统上,这可以阻止未授权用户“固定”易受攻击的 setuid/setgid 文件,以防止管理员升级它们,或者链接到特殊文件。
设置为“0”时,硬链接创建行为不受限制。
设置为“1”时,如果用户不拥有源文件,或者没有对其的读取/写入访问权限,则无法创建硬链接。
此保护基于 Openwall 和 grsecurity 中的限制。
protected_regular¶
此保护类似于 protected_fifos,但它可以避免写入攻击者控制的常规文件,而程序本应创建一个常规文件。
设置为“0”时,对常规文件的写入不受限制。
设置为“1”时,不允许在全局可写粘性目录中对我们不拥有的常规文件进行 O_CREAT
打开操作,除非它们的所有者是该目录的所有者。
设置为“2”时,它也适用于组可写粘性目录。
protected_symlinks¶
一个长期存在的安全问题是基于符号链接的检查时-使用时竞争,最常见于全局可写目录(如 /tmp
)。这种缺陷的常见利用方法是在遵循给定的符号链接时跨越特权边界(例如,根进程遵循属于另一个用户的符号链接)。如需查看多年来数百个示例(可能不完整)的列表,请参阅:https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=/tmp
设置为“0”时,符号链接的跟随行为不受限制。
设置为“1”时,仅当符号链接位于粘性全局可写目录之外,或者当符号链接和跟随者的 uid 匹配时,或者当目录所有者与符号链接的所有者匹配时,才允许跟随符号链接。
此保护基于 Openwall 和 grsecurity 中的限制。
suid_dumpable¶
此值可用于查询和设置 setuid 或其他受保护/污染的二进制文件的核心转储模式。模式包括:
0 |
(默认) |
传统行为。任何更改了特权级别或仅可执行的进程都不会被转储。 |
1 |
(调试) |
所有进程在可能时都会转储核心。核心转储归当前用户所有,并且不应用任何安全措施。这仅适用于系统调试情况。Ptrace 未选中。这是不安全的,因为它允许普通用户检查特权进程的内存内容。 |
2 |
(suidsafe) |
任何通常不会被转储的二进制文件都会被转储,但前提是 |
2. /proc/sys/fs/binfmt_misc¶
/proc/sys/fs/binfmt_misc
中文件的文档位于 杂项二进制格式的内核支持 (binfmt_misc) 中。
3. /proc/sys/fs/mqueue - POSIX 消息队列文件系统¶
“mqueue”文件系统提供了必要的内核功能,以启用用户空间库的创建,该库实现了 POSIX 消息队列 API(如 POSIX 1003.1-2001 版系统接口规范中的 MSG 标记所示)。
“mqueue”文件系统包含用于确定/设置文件系统所用资源量的值。
/proc/sys/fs/mqueue/queues_max
是一个读/写文件,用于设置/获取系统上允许的最大消息队列数。
/proc/sys/fs/mqueue/msg_max
是一个读/写文件,用于设置/获取队列中的最大消息数的值。实际上,它是 mq_open
调用中设置的另一个(用户)限制的限制值。队列的此属性必须小于或等于 msg_max
。
/proc/sys/fs/mqueue/msgsize_max
是一个读/写文件,用于设置/获取最大消息大小值(它是每个消息队列的属性,在创建期间设置)。
/proc/sys/fs/mqueue/msg_default
是一个读/写文件,用于设置/获取队列中消息的默认值(如果 mq_open(2)
的 attr
参数为 NULL
)。如果它超过 msg_max
,则默认值初始化为 msg_max
。
/proc/sys/fs/mqueue/msgsize_default
是一个读/写文件,用于设置/获取消息大小的默认值(如果 mq_open(2)
的 attr
参数为 NULL
)。如果它超过 msgsize_max
,则默认值初始化为 msgsize_max
。
4. /proc/sys/fs/epoll - epoll 接口的配置选项¶
此目录包含 epoll(7) 接口的配置选项。
max_user_watches¶
每个 epoll 文件描述符可以存储许多要监视事件就绪的文件。每个被监视的文件都构成一个“观察”。此配置选项设置每个用户允许的最大“观察”次数。在 32 位内核上,每个“观察”大约花费 90 个字节,在 64 位内核上大约花费 160 个字节。max_user_watches
的当前默认值是可用低内存的 4%,除以“观察”的字节成本。
5. /proc/sys/fs/fuse - FUSE 文件系统的配置选项¶
此目录包含以下 FUSE 文件系统的配置选项
/proc/sys/fs/fuse/max_pages_limit
是一个读/写文件,用于设置/获取 FUSE 中用于处理请求的最大页数。