요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
===============================
Documentation for /proc/sys/fs/
===============================
Copyright (c) 1998, 1999, Rik van Riel <[email protected]>
Copyright (c) 2009, Shen Feng<[email protected]>
For general info and legal blurb, please look in intro.rst.
------------------------------------------------------------------------------
This file contains documentation for the sysctl files and directories
in ``/proc/sys/fs/``.
The files in this directory can be used to tune and monitor
miscellaneous and general things in the operation of the Linux
kernel. Since some of the files *can* be used to screw up your
system, it is advisable to read both documentation and source
before actually making adjustments.
1. /proc/sys/fs
===============
Currently, these files might (depending on your configuration)
show up in ``/proc/sys/fs``:
.. contents:: :local:
aio-nr & aio-max-nr
-------------------
``aio-nr`` shows the current system-wide number of asynchronous io
requests. ``aio-max-nr`` allows you to change the maximum value
``aio-nr`` can grow to. If ``aio-nr`` reaches ``aio-nr-max`` then
``io_setup`` will fail with ``EAGAIN``. Note that raising
``aio-max-nr`` does not result in the
pre-allocation or re-sizing of any kernel data structures.
dentry-negative
----------------------------
Policy for negative dentries. Set to 1 to always delete the dentry when a
file is removed, and 0 to disable it. By default, this behavior is disabled.
dentry-state
------------
This file shows the values in ``struct dentry_stat_t``, as defined in
``fs/dcache.c``::
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 */
};
Dentries are dynamically allocated and deallocated.
``nr_dentry`` shows the total number of dentries allocated (active
+ unused). ``nr_unused shows`` the number of dentries that are not
actively used, but are saved in the LRU list for future reuse.
``age_limit`` is the age in seconds after which dcache entries
can be reclaimed when memory is short and ``want_pages`` is
nonzero when ``shrink_dcache_pages()`` has been called and the
dcache isn't pruned yet.
``nr_negative`` shows the number of unused dentries that are also
negative dentries which do not map to any files. Instead,
they help speeding up rejection of non-existing files provided
by the users.
file-max & file-nr
------------------
The value in ``file-max`` denotes the maximum number of file-
handles that the Linux kernel will allocate. When you get lots
of error messages about running out of file handles, you might
want to increase this limit.
Historically,the kernel was able to allocate file handles
dynamically, but not to free them again. The three values in
``file-nr`` denote the number of allocated file handles, the number
of allocated but unused file handles, and the maximum number of
file handles. Linux 2.6 and later always reports 0 as the number of free
file handles -- this is not an error, it just means that the
number of allocated file handles exactly matches the number of
used file handles.
Attempts to allocate more file descriptors than ``file-max`` are
reported with ``printk``, look for::
VFS: file-max limit <number> reached
in the kernel logs.
inode-nr & inode-state
----------------------
As with file handles, the kernel allocates the inode structures
dynamically, but can't free them yet.
The file ``inode-nr`` contains the first two items from
``inode-state``, so we'll skip to that file...
``inode-state`` contains three actual numbers and four dummies.
The actual numbers are, in order of appearance, ``nr_inodes``,
``nr_free_inodes`` and ``preshrink``.
``nr_inodes`` stands for the number of inodes the system has
allocated.
``nr_free_inodes`` represents the number of free inodes (?) and
preshrink is nonzero when the
system needs to prune the inode list instead of allocating
more.
mount-max
---------
This denotes the maximum number of mounts that may exist
in a mount namespace.
nr_open
-------
This denotes the maximum number of file-handles a process can
allocate. Default value is 1024*1024 (1048576) which should be
enough for most machines. Actual limit depends on ``RLIMIT_NOFILE``
resource limit.
overflowgid & overflowuid
-------------------------
Some filesystems only support 16-bit UIDs and GIDs, although in Linux
UIDs and GIDs are 32 bits. When one of these filesystems is mounted
with writes enabled, any UID or GID that would exceed 65535 is translated
to a fixed value before being written to disk.
These sysctls allow you to change the value of the fixed UID and GID.
The default is 65534.
pipe-user-pages-hard
--------------------
Maximum total number of pages a non-privileged user may allocate for pipes.
Once this limit is reached, no new pipes may be allocated until usage goes
below the limit again. When set to 0, no limit is applied, which is the default
setting.
pipe-user-pages-soft
--------------------
Maximum total number of pages a non-privileged user may allocate for pipes
before the pipe size gets limited to two pages. Once this limit is reached,
new pipes will be limited to two pages in size for this user in order to
limit total memory usage, and trying to increase them using ``fcntl()`` will be
denied until usage goes below the limit again. The default value allows to
allocate up to 1024 pipes at their default size. When set to 0, no limit is
applied.
protected_fifos
---------------
The intent of this protection is to avoid unintentional writes to
an attacker-controlled FIFO, where a program expected to create a regular
file.
When set to "0", writing to FIFOs is unrestricted.
When set to "1" don't allow ``O_CREAT`` open on FIFOs that we don't own
in world writable sticky directories, unless they are owned by the
owner of the directory.
When set to "2" it also applies to group writable sticky directories.
This protection is based on the restrictions in Openwall.
protected_hardlinks
--------------------
A long-standing class of security issues is the hardlink-based
time-of-check-time-of-use race, most commonly seen in world-writable
directories like ``/tmp``. The common method of exploitation of this flaw
is to cross privilege boundaries when following a given hardlink (i.e. a
root process follows a hardlink created by another user). Additionally,
on systems without separated partitions, this stops unauthorized users
from "pinning" vulnerable setuid/setgid files against being upgraded by
the administrator, or linking to special files.
When set to "0", hardlink creation behavior is unrestricted.
When set to "1" hardlinks cannot be created by users if they do not
already own the source file, or do not have read/write access to it.
This protection is based on the restrictions in Openwall and grsecurity.
protected_regular
-----------------
This protection is similar to `protected_fifos`_, but it
avoids writes to an attacker-controlled regular file, where a program
expected to create one.
When set to "0", writing to regular files is unrestricted.
When set to "1" don't allow ``O_CREAT`` open on regular files that we
don't own in world writable sticky directories, unless they are
owned by the owner of the directory.
When set to "2" it also applies to group writable sticky directories.
protected_symlinks
------------------
A long-standing class of security issues is the symlink-based
time-of-check-time-of-use race, most commonly seen in world-writable
directories like ``/tmp``. The common method of exploitation of this flaw
is to cross privilege boundaries when following a given symlink (i.e. a
root process follows a symlink belonging to another user). For a likely
incomplete list of hundreds of examples across the years, please see:
https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=/tmp
When set to "0", symlink following behavior is unrestricted.
When set to "1" symlinks are permitted to be followed only when outside
a sticky world-writable directory, or when the uid of the symlink and
follower match, or when the directory owner matches the symlink's owner.
This protection is based on the restrictions in Openwall and grsecurity.
suid_dumpable
-------------
This value can be used to query and set the core dump mode for setuid
or otherwise protected/tainted binaries. The modes are
= ========== ===============================================================
0 (default) Traditional behaviour. Any process which has changed
privilege levels or is execute only will not be dumped.
1 (debug) All processes dump core when possible. The core dump is
owned by the current user and no security is applied. This is
intended for system debugging situations only.
Ptrace is unchecked.
This is insecure as it allows regular users to examine the
memory contents of privileged processes.
2 (suidsafe) Any binary which normally would not be dumped is dumped
anyway, but only if the ``core_pattern`` kernel sysctl (see
:ref:`Documentation/admin-guide/sysctl/kernel.rst <core_pattern>`)
is set to
either a pipe handler or a fully qualified path. (For more
details on this limitation, see CVE-2006-2451.) This mode is
appropriate when administrators are attempting to debug
problems in a normal environment, and either have a core dump
pipe handler that knows to treat privileged core dumps with
care, or specific directory defined for catching core dumps.
If a core dump happens without a pipe handler or fully
qualified path, a message will be emitted to syslog warning
about the lack of a correct setting.
= ========== ===============================================================
2. /proc/sys/fs/binfmt_misc
===========================
Documentation for the files in ``/proc/sys/fs/binfmt_misc`` is
in Documentation/admin-guide/binfmt-misc.rst.
3. /proc/sys/fs/mqueue - POSIX message queues filesystem
========================================================
The "mqueue" filesystem provides the necessary kernel features to enable the
creation of a user space library that implements the POSIX message queues
API (as noted by the MSG tag in the POSIX 1003.1-2001 version of the System
Interfaces specification.)
The "mqueue" filesystem contains values for determining/setting the
amount of resources used by the file system.
``/proc/sys/fs/mqueue/queues_max`` is a read/write file for
setting/getting the maximum number of message queues allowed on the
system.
``/proc/sys/fs/mqueue/msg_max`` is a read/write file for
setting/getting the maximum number of messages in a queue value. In
fact it is the limiting value for another (user) limit which is set in
``mq_open`` invocation. This attribute of a queue must be less than
or equal to ``msg_max``.
``/proc/sys/fs/mqueue/msgsize_max`` is a read/write file for
setting/getting the maximum message size value (it is an attribute of
every message queue, set during its creation).
``/proc/sys/fs/mqueue/msg_default`` is a read/write file for
setting/getting the default number of messages in a queue value if the
``attr`` parameter of ``mq_open(2)`` is ``NULL``. If it exceeds
``msg_max``, the default value is initialized to ``msg_max``.
``/proc/sys/fs/mqueue/msgsize_default`` is a read/write file for
setting/getting the default message size value if the ``attr``
parameter of ``mq_open(2)`` is ``NULL``. If it exceeds
``msgsize_max``, the default value is initialized to ``msgsize_max``.
4. /proc/sys/fs/epoll - Configuration options for the epoll interface
=====================================================================
This directory contains configuration options for the epoll(7) interface.
max_user_watches
----------------
Every epoll file descriptor can store a number of files to be monitored
for event readiness. Each one of these monitored files constitutes a "watch".
This configuration option sets the maximum number of "watches" that are
allowed for each user.
Each "watch" costs roughly 90 bytes on a 32-bit kernel, and roughly 160 bytes
on a 64-bit one.
The current default value for ``max_user_watches`` is 4% of the
available low memory, divided by the "watch" cost in bytes.
5. /proc/sys/fs/fuse - Configuration options for FUSE filesystems
=====================================================================
This directory contains the following configuration options for FUSE
filesystems:
``/proc/sys/fs/fuse/max_pages_limit`` is a read/write file for
setting/getting the maximum number of pages that can be used for servicing
requests in FUSE.
``/proc/sys/fs/fuse/default_request_timeout`` is a read/write file for
setting/getting the default timeout (in seconds) for a fuse server to
reply to a kernel-issued request in the event where the server did not
specify a timeout at mount. If the server set a timeout,
then default_request_timeout will be ignored. The default
"default_request_timeout" is set to 0. 0 indicates no default timeout.
The maximum value that can be set is 65535.
``/proc/sys/fs/fuse/max_request_timeout`` is a read/write file for
setting/getting the maximum timeout (in seconds) for a fuse server to
reply to a kernel-issued request. A value greater than 0 automatically opts
the server into a timeout that will be set to at most "max_request_timeout",
even if the server did not specify a timeout and default_request_timeout is
set to 0. If max_request_timeout is greater than 0 and the server set a timeout
greater than max_request_timeout or default_request_timeout is set to a value
greater than max_request_timeout, the system will use max_request_timeout as the
timeout. 0 indicates no max request timeout. The maximum value that can be set
is 65535.
For timeouts, if the server does not respond to the request by the time
the set timeout elapses, then the connection to the fuse server will be aborted.
Please note that the timeouts are not 100% precise (eg you may set 60 seconds but
the timeout may kick in after 70 seconds). The upper margin of error for the
timeout is roughly FUSE_TIMEOUT_TIMER_FREQ seconds.
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
문서 범위와 주의 사항
1-21이 문서는 Rik van Riel과 Shen Feng이 작성한 `/proc/sys/fs/`의 sysctl 파일·디렉터리 설명서입니다. 일반 정보와 법적 안내는 `intro.rst`를 참조합니다.
이 디렉터리의 파일은 Linux 커널 동작의 여러 일반 항목을 감시하고 조정합니다. 일부 값은 시스템을 망가뜨릴 수 있으므로 실제로 바꾸기 전에 이 문서와 관련 소스를 모두 읽어야 합니다.
aio-nr과 aio-max-nr
22-40`aio-nr`은 시스템 전체에서 현재 사용하는 비동기 I/O 요청 수를 보여주고, `aio-max-nr`은 `aio-nr`이 증가할 수 있는 최대값을 정합니다. 원문의 `aio-nr-max` 표기는 문맥상 `aio-max-nr`을 뜻합니다.
현재 요청 수가 최대값에 도달하면 `io_setup`이 `EAGAIN`으로 실패합니다. `aio-max-nr`을 높여도 커널 자료 구조를 미리 할당하거나 크기를 즉시 바꾸지는 않습니다.
dentry-negative
41-46negative dentry 정책입니다. 파일을 제거할 때 해당 dentry를 항상 삭제하려면 `1`, 이 동작을 끄려면 `0`으로 설정합니다. 기본값은 비활성화인 `0`입니다.
dentry-state
47-78이 파일은 `fs/dcache.c`에 정의된 `struct dentry_stat_t`의 값을 표시합니다. dentry는 동적으로 할당되고 해제됩니다.
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 */
};
| 필드 | 의미 |
|---|---|
| `nr_dentry` | 활성 및 미사용 상태를 합친 전체 할당 dentry 수 |
| `nr_unused` | 현재 사용하지 않지만 재사용을 위해 LRU에 보관한 dentry 수 |
| `age_limit` | 메모리가 부족할 때 dcache 항목을 회수할 수 있는 나이(초) |
| `want_pages` | `shrink_dcache_pages()`가 호출됐지만 dcache 정리가 끝나지 않았으면 0이 아닌 값 |
| `nr_negative` | 파일에 매핑되지 않는 미사용 negative dentry 수 |
| `dummy` | 향후 사용을 위해 예약된 값 |
negative dentry는 실제 파일에 매핑되지 않지만 사용자가 요청한 존재하지 않는 파일을 빠르게 거부하는 데 도움을 줍니다.
file-max와 file-nr
79-103`file-max`는 Linux 커널이 할당할 file handle의 최대 수입니다. file handle 고갈 오류가 반복되면 이 한도를 늘릴 수 있습니다.
역사적으로 커널은 file handle을 동적으로 할당했지만 다시 해제하지 못했습니다. `file-nr`의 세 값은 할당된 file handle 수, 할당됐지만 쓰지 않는 수, 최대 수입니다. Linux 2.6 이상은 미사용 수를 항상 0으로 보고하며 오류가 아니라 할당 수와 사용 수가 정확히 같다는 뜻입니다.
| `file-nr` 위치 | 값 |
|---|---|
| 첫 번째 | 할당된 file handle 수 |
| 두 번째 | 할당됐지만 쓰지 않는 수. Linux 2.6 이상에서는 항상 0 |
| 세 번째 | file handle 최대 수 |
`file-max`보다 많은 file descriptor를 할당하려 하면 커널 로그에 다음 `printk` 메시지가 기록됩니다.
VFS: file-max limit <number> reached
inode-nr과 inode-state
104-125file handle처럼 커널은 inode 구조를 동적으로 할당합니다. `inode-nr`은 `inode-state`의 앞 두 값을 담고, `inode-state`에는 실제 값 세 개와 더미 네 개가 있습니다.
| 실제 필드 | 의미 |
|---|---|
| `nr_inodes` | 시스템이 할당한 inode 수 |
| `nr_free_inodes` | 사용 가능한 inode 수 |
| `preshrink` | 더 할당하는 대신 inode 목록을 정리해야 하면 0이 아닌 값 |
mount-max와 nr_open
126-141| 항목 | 의미 |
|---|---|
| `mount-max` | 하나의 mount namespace에 존재할 수 있는 mount 최대 수 |
| `nr_open` | 프로세스가 할당할 수 있는 file handle 최대 수 |
`nr_open` 기본값은 `1024*1024`, 즉 1048576이며 대부분 시스템에 충분합니다. 실제 한도는 `RLIMIT_NOFILE` 자원 제한에도 좌우됩니다.
overflowgid와 overflowuid
142-153Linux UID와 GID는 32비트지만 일부 파일 시스템은 16비트 값만 지원합니다. 쓰기 가능하게 마운트한 이런 파일 시스템에 65535를 넘는 UID·GID를 기록할 때는 고정 대체값으로 변환합니다.
| 항목 | 기본값과 역할 |
|---|---|
| `overflowuid` | 기록할 수 없는 UID의 대체값, 기본 65534 |
| `overflowgid` | 기록할 수 없는 GID의 대체값, 기본 65534 |
사용자별 pipe 페이지 한도
154-174| 항목 | 동작 |
|---|---|
| `pipe-user-pages-hard` | 권한 없는 사용자 한 명이 pipe에 할당할 수 있는 전체 페이지의 절대 최대값 |
| `pipe-user-pages-soft` | 새 pipe를 2페이지로 제한하고 `fcntl()` 확장을 거부하기 시작하는 전체 페이지 기준 |
hard 한도에 도달하면 사용량이 다시 내려갈 때까지 새 pipe를 만들 수 없습니다. 값 `0`은 제한 없음이며 기본값입니다.
soft 한도에 도달하면 해당 사용자의 새 pipe는 총 메모리 사용을 줄이기 위해 2페이지로 제한되고, 사용량이 내려갈 때까지 `fcntl()`로 키울 수 없습니다. 기본값은 기본 크기의 pipe 1024개를 만들 수 있는 수준입니다. 값 `0`은 제한 없음입니다.
protected_fifos
175-192프로그램이 일반 파일을 만들 것으로 기대한 위치에 공격자가 제어하는 FIFO가 있을 때 실수로 쓰는 일을 막는 보호입니다. Openwall 제한을 기반으로 합니다.
| 값 | 정책 |
|---|---|
| `0` | FIFO 쓰기 제한 없음 |
| `1` | world-writable sticky 디렉터리에서 자신이나 디렉터리 소유자가 소유하지 않은 FIFO를 `O_CREAT`로 열지 못함 |
| `2` | 값 1의 제한을 group-writable sticky 디렉터리에도 적용 |
protected_hardlinks
193-212world-writable `/tmp` 같은 곳에서 hardlink를 이용한 TOCTOU(time-of-check-time-of-use) 경쟁으로 권한 경계를 넘는 오랜 보안 문제를 줄입니다. 별도 파티션이 없는 시스템에서는 권한 없는 사용자가 취약한 setuid·setgid 파일을 hardlink로 붙잡아 관리자의 업그레이드를 방해하거나 특수 파일에 연결하는 것도 막습니다.
| 값 | 정책 |
|---|---|
| `0` | hardlink 생성 제한 없음 |
| `1` | 원본 파일 소유자가 아니고 파일에 읽기·쓰기 권한도 없으면 hardlink 생성 금지 |
이 보호는 Openwall과 grsecurity의 제한을 기반으로 합니다.
protected_regular
213-228`protected_fifos`와 비슷하지만 프로그램이 만들려던 일반 파일 자리에 공격자가 제어하는 일반 파일이 있을 때 쓰는 일을 막습니다.
| 값 | 정책 |
|---|---|
| `0` | 일반 파일 쓰기 제한 없음 |
| `1` | world-writable sticky 디렉터리에서 자신이나 디렉터리 소유자가 소유하지 않은 일반 파일을 `O_CREAT`로 열지 못함 |
| `2` | 값 1의 제한을 group-writable sticky 디렉터리에도 적용 |
protected_symlinks
229-248world-writable `/tmp` 같은 곳에서 symlink를 이용한 TOCTOU 경쟁으로 권한 경계를 넘는 오랜 보안 문제를 줄입니다. 관련 사례는 원문의 CVE 검색 URL `https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=/tmp`에서 볼 수 있습니다.
| 값 | 정책 |
|---|---|
| `0` | symlink 추적 제한 없음 |
| `1` | sticky world-writable 디렉터리 밖이거나, symlink와 추적자의 UID가 같거나, 디렉터리 소유자와 symlink 소유자가 같을 때만 추적 허용 |
이 보호는 Openwall과 grsecurity의 제한을 기반으로 합니다.
suid_dumpable
249-280setuid 또는 다른 방식으로 보호·taint된 바이너리의 core dump 모드를 조회하고 설정합니다.
| 값 | 이름 | 동작 |
|---|---|---|
| `0` | default | 전통적 동작. 권한 수준을 바꿨거나 execute-only인 프로세스는 dump하지 않음 |
| `1` | debug | 가능하면 모든 프로세스가 현재 사용자 소유 core를 만들며 보안 검사를 적용하지 않음. `Ptrace`도 검사하지 않아 일반 사용자가 권한 프로세스 메모리를 볼 수 있는 위험한 디버깅 전용 모드 |
| `2` | suidsafe | 일반적으로 dump하지 않을 바이너리도 dump하되 `core_pattern`이 pipe handler 또는 완전한 경로일 때만 허용 |
값 `2`는 관리자가 정상 환경의 문제를 디버깅하며 권한 core dump를 안전하게 처리하는 pipe handler나 전용 디렉터리를 갖춘 경우에 적합합니다. 제한 이유는 CVE-2006-2451을 참조합니다. `core_pattern`이 pipe handler나 완전한 경로가 아니면 syslog에 올바른 설정이 없다는 경고를 남깁니다. 관련 항목은 `Documentation/admin-guide/sysctl/kernel.rst`의 `core_pattern` 절입니다.
binfmt_misc
281-287`/proc/sys/fs/binfmt_misc`의 파일은 `Documentation/admin-guide/binfmt-misc.rst`에서 설명합니다.
POSIX message queue 파일 시스템
288-323`mqueue` 파일 시스템은 POSIX 1003.1-2001 System Interfaces의 MSG 기능인 POSIX message queue API를 사용자 공간 라이브러리가 구현하는 데 필요한 커널 기능과 자원 조정 값을 제공합니다.
| sysctl | 의미 |
|---|---|
| `/proc/sys/fs/mqueue/queues_max` | 시스템에서 허용하는 message queue 최대 수 |
| `/proc/sys/fs/mqueue/msg_max` | queue 하나에 허용하는 message 최대 수. `mq_open`의 사용자 지정 한도도 이 값 이하여야 함 |
| `/proc/sys/fs/mqueue/msgsize_max` | queue 생성 때 정하는 message 최대 크기 |
| `/proc/sys/fs/mqueue/msg_default` | `mq_open(2)`의 `attr`이 `NULL`일 때 기본 message 수. `msg_max`를 넘으면 `msg_max` 사용 |
| `/proc/sys/fs/mqueue/msgsize_default` | `attr`이 `NULL`일 때 기본 message 크기. `msgsize_max`를 넘으면 `msgsize_max` 사용 |
epoll max_user_watches
324-340`/proc/sys/fs/epoll`은 `epoll(7)` 인터페이스의 설정을 담습니다. 각 epoll file descriptor가 이벤트 준비 상태를 감시하는 파일 하나가 watch 하나입니다.
| 항목 | 의미 |
|---|---|
| `max_user_watches` | 사용자 한 명에게 허용되는 watch 최대 수 |
| 32비트 비용 | watch 하나당 약 90바이트 |
| 64비트 비용 | watch 하나당 약 160바이트 |
| 현재 기본값 | 사용 가능한 low memory의 4%를 watch 바이트 비용으로 나눈 값 |
FUSE 요청 페이지와 timeout
341-374| sysctl | 동작 |
|---|---|
| `/proc/sys/fs/fuse/max_pages_limit` | FUSE 요청 처리에 사용할 수 있는 최대 페이지 수 |
| `/proc/sys/fs/fuse/default_request_timeout` | 서버가 mount 때 timeout을 지정하지 않았을 때 커널 요청 응답의 기본 timeout(초) |
| `/proc/sys/fs/fuse/max_request_timeout` | 서버의 커널 요청 응답에 허용하는 최대 timeout(초) |
`default_request_timeout`은 서버가 timeout을 지정하면 무시됩니다. 기본값 `0`은 기본 timeout 없음이고 최대 설정값은 65535입니다.
`max_request_timeout`이 0보다 크면 서버가 timeout을 지정하지 않고 기본값이 0이어도 최대 이 값인 timeout을 자동 적용합니다. 서버 지정값이나 기본값이 이 값보다 크면 최대값을 사용합니다. `0`은 최대 timeout 없음이며 최대 설정값은 65535입니다.
설정 시간이 지날 때까지 서버가 응답하지 않으면 FUSE 서버 연결을 중단합니다. timeout은 완전히 정밀하지 않아 60초로 설정해도 70초 뒤에 발동할 수 있으며, 상한 오차는 대략 `FUSE_TIMEOUT_TIMER_FREQ`초입니다.
요약과 해설
fs.rst:1-374이 sysctl들은 파일 시스템 동작뿐 아니라 시스템 전체의 커널 객체 한도와 보안 정책을 바꿉니다. 값의 단위가 요청 수, page, byte, second처럼 서로 다르므로 자동 조정 스크립트에서는 항목별 의미와 `0`의 뜻을 확인해야 합니다.
`protected_*`는 sticky 공유 디렉터리의 TOCTOU 공격을 줄이고, `suid_dumpable`은 권한 프로세스 메모리가 core dump로 노출되는 범위를 정합니다. 운영 환경에서는 보안 의미를 이해하지 않고 완화하지 않는 편이 안전합니다.