PROC_SYS_FS(5) فایلهای پیکربندی PROC_SYS_FS(5)

/proc/sys/fs/ - متغیرها و پارامترهای هسته مربوط به سامانههای پرونده

/proc/sys/fs/
این دایرکتوری حاوی فایل‌ها و زیردایرکتوری‌هایی برای متغیرهای هسته مربوط به سامانه‌های پرونده است.
/proc/sys/fs/aio-max-nr و /proc/sys/fs/aio-nr (از لینوکس 2.6.4)
aio-nr مجموع در حال اجرای تعداد رویدادهای مشخص‌شده توسط فراخوانی‌های io_setup(2) برای تمام زمینه‌های AIO فعال در لحظه است. اگر aio-nr به aio-max-nr برسد، فراخوانی io_setup(2) با خطای EAGAIN شکست می‌خورد. افزایش دادن aio-max-nr منجر به پیش‌تخصیص یا تغییر اندازه هیچ‌یک از ساختارهای داده هسته نمی‌شود.
/proc/sys/fs/binfmt_misc
مستندات مربوط به فایل‌های این دایرکتوری را می‌توان در سورس‌کد هسته لینوکس در فایل Documentation/admin-guide/binfmt-misc.rst (یا در Documentation/binfmt_misc.txt در هسته‌های قدیمی‌تر) یافت.
/proc/sys/fs/dentry-state (از لینوکس 2.2)
این فایل حاوی اطلاعاتی درباره وضعیت حافظه موقت دایرکتوری (dcache) است. این فایل شامل شش عدد است: nr_dentry، nr_unused، age_limit (سن بر حسب ثانیه)، want_pages (صفحات درخواستی سامانه) و دو مقدار ساختگی (dummy).
•
nr_dentry تعداد مدخل‌های dentry تخصیص‌یافته (مدخل‌های dcache) است. این فیلد در لینوکس 2.2 استفاده نمی‌شود.
•
nr_unused تعداد مدخل‌های استفاده‌نشده dentry است.
•
age_limit سن بر حسب ثانیه است که پس از آن در صورت کمبود حافظه، مدخل‌های dcache می‌توانند بازپس گرفته شوند.
•
want_pages زمانی غیرصفر است که هسته shrink_dcache_pages() را فراخوانی کرده باشد اما dcache هنوز هرس نشده باشد.
/proc/sys/fs/dir-notify-enable
از این فایل می‌توان برای غیرفعال یا فعال کردن رابط dnotify توضیح‌داده‌شده در fcntl(2) در سطح سراسری سامانه استفاده کرد. مقدار 0 در این فایل رابط را غیرفعال می‌کند و مقدار 1 آن را فعال می‌سازد.
/proc/sys/fs/dquot-max
این فایل حداکثر تعداد مدخل‌های ذخیره‌شده سهمیه دیسک (disk quota) در حافظه موقت را نشان می‌دهد. در برخی سامانه‌ها (2.4)، این فایل وجود ندارد. اگر تعداد مدخل‌های آزاد سهمیه دیسک در حافظه موقت بسیار کم است و تعداد فوق‌العاده زیادی کاربر هم‌زمان روی سامانه دارید، ممکن است بخواهید این حد را افزایش دهید.
/proc/sys/fs/dquot-nr
این فایل تعداد مدخل‌های تخصیص‌یافته سهمیه دیسک و تعداد مدخل‌های آزاد سهمیه دیسک را نشان می‌دهد.
/proc/sys/fs/epoll/ (از لینوکس 2.6.28)
این دایرکتوری شامل فایل max_user_watches است که می‌تواند برای محدود کردن میزان حافظه هسته مصرف‌شده توسط رابط epoll استفاده شود. برای جزئیات بیشتر، epoll(7) را ببینید.
/proc/sys/fs/file-max
این فایل یک محدودیت سراسری در سطح سامانه بر روی تعداد پرونده‌های باز برای تمام فرآیندها تعیین می‌کند. فراخوانی‌های سیستمی که هنگام مواجهه با این محدودیت شکست می‌خورند، با خطای ENFILE مواجه می‌شوند. (همچنین setrlimit(2) را ببینید که می‌تواند توسط یک فرآیند برای تعیین محدودیت مختص هر فرآیند، یعنی RLIMIT_NOFILE، روی تعداد پرونده‌هایی که ممکن است باز کند، استفاده شود.) اگر پیام‌های خطای فراوانی در گزارش هسته (kernel log) درباره تمام شدن دستگیره‌های پرونده (توصیف‌کننده‌های پرونده باز) دریافت می‌کنید (به دنبال عبارت "VFS: file-max limit <number> reached" بگردید)، افزایش دادن این مقدار را امتحان کنید:

echo 100000 > /proc/sys/fs/file-max

فرآیندهای ممتاز (CAP_SYS_ADMIN) می‌توانند محدودیت file-max را نادیده بگیرند.
/proc/sys/fs/file-nr
این فایل (فقط‌خواندنی) شامل سه عدد است: تعداد دستگیره‌های پرونده تخصیص‌یافته (یعنی تعداد توصیف‌کننده‌های پرونده باز؛ open(2) را ببینید)؛ تعداد دستگیره‌های پرونده آزاد؛ و حداکثر تعداد دستگیره‌های پرونده (یعنی همان مقدار /proc/sys/fs/file-max). اگر تعداد دستگیره‌های پرونده تخصیص‌یافته به حداکثر نزدیک باشد، باید افزایش مقدار حداکثر را در نظر بگیرید. پیش از لینوکس 2.6، هسته دستگیره‌های پرونده را به صورت پویا تخصیص می‌داد، اما پس از استفاده آن‌ها را دوباره آزاد نمی‌کرد. در عوض، دستگیره‌های پرونده آزاد در یک فهرست برای تخصیص مجدد نگهداری می‌شدند؛ مقدار «دستگیره‌های پرونده آزاد» اندازه آن فهرست را نشان می‌دهد. تعداد زیاد دستگیره‌های پرونده آزاد نشان می‌دهد که در گذشته اوج مصرفی در استفاده از دستگیره‌های پرونده باز وجود داشته است. از لینوکس 2.6، هسته دستگیره‌های پرونده رهاشده را از تخصیص خارج می‌کند و مقدار «دستگیره‌های پرونده آزاد» همیشه صفر است.
/proc/sys/fs/inode-max (فقط تا لینوکس 2.2 موجود است)
این فایل شامل حداکثر تعداد آی‌نودها (inode) در حافظه است. این مقدار باید ۳ تا ۴ برابر بزرگ‌تر از مقدار موجود در file-max باشد، زیرا stdin، stdout و سوکت‌های شبکه نیز برای مدیریت به یک آی‌نود نیاز دارند. هنگامی که به طور مرتب با کمبود آی‌نود مواجه می‌شوید، باید این مقدار را افزایش دهید.
از آغاز لینوکس 2.4، دیگر محدودیت ایستایی روی تعداد آی‌نودها وجود ندارد و این فایل حذف شده است.
/proc/sys/fs/inode-nr
این فایل حاوی دو مقدار نخست از inode-state است.
/proc/sys/fs/inode-state
این فایل شامل هفت عدد است: nr_inodes، nr_free_inodes، preshrink، و چهار مقدار ساختگی (همیشه صفر).
nr_inodes تعداد آی‌نودهایی است که سامانه تخصیص داده است. nr_free_inodes نشان‌دهنده تعداد آی‌نودهای آزاد است.
preshrink زمانی غیرصفر است که nr_inodes > inode-max باشد و سامانه به جای تخصیص بیشتر، نیاز به هرس کردن فهرست آی‌نودها داشته باشد؛ از لینوکس 2.4 به بعد، این فیلد یک مقدار ساختگی است (همیشه صفر).
/proc/sys/fs/inotify/ (از لینوکس 2.6.13)
این دایرکتوری شامل فایل‌های max_queued_events، max_user_instances و max_user_watches است که می‌توانند برای محدود کردن میزان حافظه هسته مصرف‌شده توسط رابط inotify استفاده شوند. برای جزئیات بیشتر، inotify(7) را ببینید.
/proc/sys/fs/lease-break-time
این فایل مهلت ارفاقی را مشخص می‌کند که هسته به فرآیندِ دارنده‌ی اجاره پرونده (fcntl(2)) اعطا می‌کند، پس از آن‌که سیگنالی به آن فرآیند مبنی بر این‌که فرآیند دیگری در انتظار باز کردن پرونده است ارسال کرد. اگر دارنده اجاره در این مهلت، اجاره را برطرف یا تنزل ندهد، هسته به اجبار اجاره را باطل می‌کند.
/proc/sys/fs/leases-enable
از این فایل می‌توان برای فعال یا غیرفعال کردن اجاره‌های پرونده (fcntl(2)) در سطح سراسری سامانه استفاده کرد. اگر این فایل حاوی مقدار 0 باشد، اجاره‌ها غیرفعال هستند. مقدار غیرصفر، اجاره‌ها را فعال می‌سازد.
/proc/sys/fs/mount-max (از لینوکس 4.9)
مقدار موجود در این فایل حداکثر تعداد سوارکردن‌هایی (mounts) را که می‌توانند در یک فضای نام سوارکردن (mount namespace) وجود داشته باشند مشخص می‌کند. مقدار پیش‌فرض در این فایل 100,000 است.
/proc/sys/fs/mqueue/ (از لینوکس 2.6.6)
این دایرکتوری شامل فایل‌های msg_max، msgsize_max و queues_max است که منابع مورداستفاده توسط صف‌های پیام پازیکس (POSIX message queues) را کنترل می‌کنند. برای جزئیات، mq_overview(7) را ببینید.
/proc/sys/fs/nr_open (از لینوکس 2.6.25)
این فایل سقفی را بر روی مقداری که محدودیت منبع RLIMIT_NOFILE می‌تواند تا آن افزایش یابد تحمیل می‌کند (ببینید: getrlimit(2)). این سقف هم برای فرآیندهای فاقد امتیاز و هم برای فرآیندهای ممتاز اعمال می‌شود. مقدار پیش‌فرض در این فایل 1048576 است. (پیش از لینوکس 2.6.25، سقف RLIMIT_NOFILE به صورت سخت‌کدشده بر روی همین مقدار قرار داشت.)
/proc/sys/fs/overflowgid و /proc/sys/fs/overflowuid
این فایل‌ها به شما امکان می‌دهند تا مقدار UID و GID ثابت را تغییر دهید. مقدار پیش‌فرض 65534 است. برخی از سامانه‌های پرونده تنها از UIDها و GIDهای ۱۶ بیتی پشتیبانی می‌کنند، اگرچه در لینوکس UIDها و GIDها ۳۲ بیتی هستند. هنگامی که یکی از این سامانه‌های پرونده با قابلیت نوشتنِ فعال سوار می‌شود، هر UID یا GID که از 65535 فراتر رود، قبل از نوشته شدن روی دیسک به مقدار سرریز ترجمه می‌شود.
/proc/sys/fs/pipe-max-size (از لینوکس 2.6.35)
ببینید: pipe(7).
/proc/sys/fs/pipe-user-pages-hard (از لینوکس 4.5)
ببینید: pipe(7).
/proc/sys/fs/pipe-user-pages-soft (از لینوکس 4.5)
ببینید: pipe(7).
/proc/sys/fs/protected_fifos (از لینوکس 4.19)
مقدار این فایل برابر با یا قابل تنظیم به یکی از موارد زیر است:
0
نوشتن در FIFOها بدون محدودیت است.
1
اجازه نده فراخوانی open(2) با پرچم O_CREAT روی FIFOهایی که فراخواننده مالک آن‌ها نیست، در دایرکتوری‌های چسبانِ (sticky) قابل نوشتن برای همگان انجام شود، مگر اینکه مالک FIFO، مالک همان دایرکتوری نیز باشد.
2
مشابه مقدار 1، اما این محدودیت برای دایرکتوری‌های چسبان قابل نوشتن توسط گروه نیز اعمال می‌شود.
هدف از محافظت‌های فوق، جلوگیری از نوشتن ناخواسته در یک FIFO تحت کنترل مهاجم است، در حالی که برنامه انتظار ایجاد یک پرونده عادی را داشته است.
/proc/sys/fs/protected_hardlinks (از لینوکس 3.6)
هنگامی که مقدار موجود در این فایل 0 باشد، هیچ محدودیتی بر ایجاد پیوندهای سخت (hard links) اعمال نمی‌شود (یعنی این همان رفتار پیشین پیش از لینوکس 3.6 است). هنگامی که مقدار در این فایل 1 باشد، پیوند سخت به یک پرونده مقصد تنها در صورتی می‌تواند ایجاد شود که یکی از شرایط زیر برقرار باشد:
•
فرآیند فراخواننده دارای قابلیت CAP_FOWNER در فضای نام کاربری خود باشد و UID پرونده در آن فضای نام نگاشت داشته باشد.
•
شناسه کاربری سامانه پرونده (filesystem UID) فرآیندی که پیوند را ایجاد می‌کند با مالک (UID) پرونده مقصد مطابقت داشته باشد (همان‌طور که در credentials(7) توضیح داده شده است، شناسه کاربری سامانه پرونده یک فرآیند معمولاً همان UID مؤثر آن است).
•
تمامی شرایط زیر برقرار باشند:
•
مقصد یک پرونده معمولی باشد؛
•
بیت حالت set-user-ID پرونده مقصد فعال نباشد؛
•
پرونده مقصد هر دو بیت حالت set-group-ID و قابل اجرا برای گروه را هم‌زمان فعال نداشته باشد؛ و
•
فراخواننده مجوز خواندن و نوشتن پرونده مقصد را داشته باشد (خواه از طریق ماسک دسترسی‌های پرونده یا به دلیل داشتن قابلیت‌های مناسب).
مقدار پیش‌فرض در این فایل 0 است. تنظیم مقدار بر روی 1 از یک رده قدیمی از آسیب‌پذیری‌های امنیتی ناشی از شرایط رقابتی زمان بررسی تا زمان استفاده (TOCTOU) مبتنی بر پیوندهای سخت جلوگیری می‌کند، که عمدتاً در دایرکتوری‌های قابل نوشتن برای همگان مانند /tmp دیده می‌شوند. روش متداول سوءاستفاده از این نقص، عبور از مرزهای امتیازی هنگام دنبال کردن یک پیوند سخت مشخص است (یعنی فرآیندی با دسترسی ریشه، پیوند سختی را که توسط کاربر دیگری ایجاد شده است دنبال می‌کند). علاوه بر این، در سامانه‌های بدون پارتیشن‌های مجزا، این تنظیم مانع از آن می‌شود که کاربران غیرمجاز فایل‌های آسیب‌پذیر دارای set-user-ID و set-group-ID را در برابر ارتقا توسط مدیر سامانه «قفل (pin)» کنند یا به فایل‌های ویژه پیوند بزنند.
/proc/sys/fs/protected_regular (از لینوکس 4.19)
مقدار موجود در این فایل برابر با یا قابل تنظیم به یکی از موارد زیر است:
0
نوشتن در پرونده‌های معمولی بدون محدودیت است.
1
اجازه نده فراخوانی open(2) با پرچم O_CREAT روی پرونده‌های معمولی که فراخواننده مالک آن‌ها نیست، در دایرکتوری‌های چسبان قابل نوشتن برای همگان انجام شود، مگر اینکه مالک پرونده معمولی، مالک همان دایرکتوری نیز باشد.
2
مشابه مقدار 1، اما این محدودیت برای دایرکتوری‌های چسبان قابل نوشتن توسط گروه نیز اعمال می‌شود.
هدف از محافظت‌های فوق مشابه protected_fifos است، اما به برنامه اجازه می‌دهد از نوشتن در یک پرونده معمولی تحت کنترل مهاجم، در حالتی که برنامه انتظار ایجاد یک پرونده را داشته است، اجتناب ورزد.
/proc/sys/fs/protected_symlinks (از لینوکس 3.6)
هنگامی که مقدار موجود در این فایل 0 باشد، هیچ محدودیتی بر دنبال کردن پیوندهای نمادین (symbolic links) اعمال نمی‌شود (یعنی این همان رفتار پیشین پیش از لینوکس 3.6 است). هنگامی که مقدار این فایل 1 باشد، پیوندهای نمادین تنها در شرایط زیر دنبال می‌شوند:
•
شناسه کاربری سامانه پرونده (filesystem UID) فرآیندی که پیوند را دنبال می‌کند با مالک (UID) پیوند نمادین مطابقت داشته باشد (همان‌طور که در credentials(7) توضیح داده شده است، شناسه کاربری سامانه پرونده یک فرآیند معمولاً همان UID مؤثر آن است)؛
•
پیوند در یک دایرکتوری چسبانِ قابل نوشتن برای همگان نباشد؛ یا
•
پیوند نمادین و دایرکتوری والد آن مالک (UID) یکسانی داشته باشند.
فراخوانی سیستمی که به دلیل محدودیت‌های فوق در دنبال کردن پیوند نمادین شکست بخورد، خطای EACCES را در errno برمی‌گرداند.
مقدار پیش‌فرض در این فایل 0 است. تنظیم مقدار بر روی 1 مانع از بروز رده دیرینه‌ای از مسائل امنیتی مبتنی بر شرایط رقابتی زمان بررسی تا زمان استفاده در هنگام دسترسی به پیوندهای نمادین می‌شود.
/proc/sys/fs/suid_dumpable (از لینوکس 2.6.13)
مقدار موجود در این فایل در شرایط توصیف‌شده در prctl(2) به پرچم "dumpable" (قابلیت تخلیه حافظه) فرآیند تخصیص می‌یابد. در عمل، مقدار این فایل تعیین می‌کند که آیا پرونده‌های تخلیه حافظه هسته (core dump) برای پرونده‌های دودویی دارای set-user-ID یا دیگر باینری‌های حفاظت‌شده/آلوده تولید شوند یا خیر. تنظیم "dumpable" همچنین بر مالکیت فایل‌ها در دایرکتوری /proc/pid فرآیند، همان‌طور که در بالا توضیح داده شد، اثر می‌گذارد.
سه مقدار عدد صحیح مختلف را می‌توان مشخص کرد:
0 (پیش‌فرض)
این گزینه رفتار سنتی (پیش از لینوکس 2.6.13) را ارائه می‌دهد. تخلیه حافظه هسته (core dump) برای فرآیندی که اعتبارهای خود را تغییر داده است (با فراخوانی seteuid(2)، setgid(2) یا موارد مشابه، یا با اجرای یک برنامه دارای set-user-ID یا set-group-ID) یا پرونده دودویی آن مجوز خواندن فعال ندارد، تولید نخواهد شد.
1 ("debug")
تمام فرآیندها در صورت امکان تخلیه حافظه (dump core) را انجام می‌دهند. (دلایلی که چرا ممکن است با این وجود یک فرآیند تخلیه حافظه انجام ندهد در core(5) توصیف شده است.) پرونده تخلیه حافظه متعلق به شناسه کاربری سامانه پرونده فرآیند در حال تخلیه خواهد بود و هیچ امنیتی اعمال نمی‌شود. این حالت فقط برای موقعیت‌های اشکال‌زدایی سامانه در نظر گرفته شده است: این حالت ناامن است چرا که به کاربران فاقد امتیاز اجازه می‌دهد محتویات حافظه فرآیندهای ممتاز را بررسی کنند.
2 ("suidsafe")
هر باینری که معمولاً برای آن تخلیه حافظه صورت نمی‌گیرد (گزینه «0» در بالا را ببینید)، به گونه‌ای تخلیه حافظه می‌شود که تنها برای کاربر ریشه (root) قابل خواندن باشد. این به کاربر امکان می‌دهد پرونده تخلیه حافظه را حذف کند اما نمی‌تواند آن را بخواند. به دلایل امنیتی، پرونده‌های تخلیه حافظه در این حالت بر روی یکدیگر یا فایل‌های دیگر بازنویسی نخواهند شد. این حالت زمانی مناسب است که مدیران سامانه در تلاش برای اشکال‌زدایی مشکلات در یک محیط عادی هستند.
علاوه بر این، از لینوکس 3.6 به بعد، /proc/sys/kernel/core_pattern باید یا یک نام مسیر مطلق باشد یا یک دستور پایپ (pipe)، همان‌طور که در core(5) با جزئیات تشریح شده است. اگر core_pattern از این قوانین پیروی نکند، هشدارهایی در گزارش هسته نوشته خواهد شد و هیچ پرونده تخلیه حافظه‌ای ایجاد نمی‌شود.
برای جزئیات اثر تنظیم "dumpable" یک فرآیند بر بررسی حالت دسترسی ptrace، ptrace(2) را ببینید.
/proc/sys/fs/super-max
این فایل حداکثر تعداد ابربلاک‌ها (superblocks) و در نتیجه حداکثر تعداد سامانه‌های پرونده سوارشده‌ای را که هسته می‌تواند داشته باشد کنترل می‌کند. تنها زمانی نیاز به افزایش super-max دارید که نیاز به سوار کردن سامانه‌های پرونده بیشتری نسبت به مقدار مجاز فعلی در super-max داشته باشید.
/proc/sys/fs/super-nr
این فایل شامل تعداد سامانه‌های پرونده‌ای است که در حال حاضر سوار شده‌اند.

proc(5), proc_sys(5)

مه ۲۰۲۵ man-pages