/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
- این فایل
شامل تعداد
سامانههای
پروندهای
است که در
حال حاضر
سوار
شدهاند.