| SYSCTL.D(5) | sysctl.d | SYSCTL.D(5) |
نام (NAME)
sysctl.d - پیکربندی پارامترهای هسته در هنگام بوت
خلاصه دستور (SYNOPSIS)
key.name.under.proc.sys = some value key/name/under/proc/sys = some value key/middle.part.with.dots/foo = 123 key.middle/part/with/dots.foo = 123 -key.that.will.not.fail = value key.pattern.*.with.glob = whatever -key.pattern.excluded.with.glob key.pattern.overridden.with.glob = custom
توضیحات (DESCRIPTION)
در زمان بوت، systemd-sysctl.service(8) فایلهای پیکربندی را از دایرکتوریهای بالا میخواند تا پارامترهای هسته sysctl(8) را پیکربندی کند.
قالب فایل پیکربندی (CONFIGURATION FILE FORMAT)
فایلهای پیکربندی شامل فهرستی از مقداردهیهای متغیر هستند که با خطوط جدید از یکدیگر جدا شدهاند. خطوط خالی و خطوطی که اولین نویسه غیر فاصلهای آنها "#" یا ";" باشد، نادیده گرفته میشوند.
توجه داشته باشید که میتوان از "/" یا "." به عنوان جداکننده در نام متغیرهای sysctl استفاده کرد. اگر اولین جداکننده یک اسلش باشد، اسلشها و نقطههای باقیمانده دستنخورده باقی میمانند. اگر اولین جداکننده یک نقطه باشد، نقطهها و اسلشها با یکدیگر جابهجا میشوند. "kernel.domainname=foo" و "kernel/domainname=foo" معادل یکدیگرند و باعث میشوند مقدار "foo" در /proc/sys/kernel/domainname نوشته شود. هر یک از دو عبارت "net.ipv4.conf.enp3s0/200.forwarding" یا "net/ipv4/conf/enp3s0.200/forwarding" میتوانند برای اشاره به /proc/sys/net/ipv4/conf/enp3s0.200/forwarding استفاده شوند. میتوان از یک الگوی تطبیق سراسری glob(7) برای نوشتن یک مقدار یکسان در تمام کلیدهای منطبق استفاده کرد. کلیدهایی که برای آنها یک الگوی صریح وجود دارد، از هرگونه تطبیق glob مستثنی خواهند شد. علاوه بر این، یک کلید را میتوان با مشخص کردن نام کلید همراه با پیشوند نویسه "-" و بدون درج "=" بعد از آن، بهطور صریح از تنظیم شدن توسط الگوهای glob منطبق مستثنی کرد، به بخش خلاصه دستور مراجعه کنید.
هرگونه خطای دسترسی و تلاش برای نوشتن متغیرهایی که در سیستم محلی وجود ندارند، در سطح اشکالزدایی (debug) ثبت میشوند و باعث شکست سرویس نخواهند شد. انواع دیگر خطاها هنگام تنظیم متغیرها با اولویت بالاتری ثبت میشوند و باعث میشوند سرویس در پایان (پس از پردازش سایر متغیرها) وضعیت شکست را برگرداند. به عنوان یک استثنا، اگر مقداردهی یک متغیر با یک نویسه منفرد "-" شروع شود، شکست در تنظیم متغیر به هر دلیلی در سطح اشکالزدایی ثبت میشود و باعث شکست سرویس نخواهد شد.
تنظیمات پیکربندیشده با فایلهای sysctl.d در مراحل اولیه بوت اعمال خواهند شد. گزینههای مربوط به هر رابط شبکه نیز به صورت جداگانه با ظاهر شدن آن رابط در سیستم اعمال خواهند شد. (به طور مشخصتر، net.ipv4.conf.*، net.ipv6.conf.*، net.ipv4.neigh.* و net.ipv6.neigh.*).
بسیاری از پارامترهای sysctl تنها زمانی در دسترس قرار میگیرند که ماژولهای خاصی از هسته بارگذاری شوند. ماژولها معمولاً بر حسب تقاضا بارگذاری میشوند، برای مثال هنگام اتصال سختافزاری خاص یا بالا آمدن شبکه. این بدان معناست که systemd-sysctl.service(8) که در مراحل اولیه بوت اجرا میشود، اگر این پارامترها پس از اجرای آن در دسترس قرار گیرند، آنها را پیکربندی نخواهد کرد. برای تنظیم چنین پارامترهایی، توصیه میشود یک قاعده udev(7) اضافه شود تا آن پارامترها را به محض در دسترس قرار گرفتن تنظیم کند. روش جایگزین، که گزینهای کمی سادهتر اما با کارایی کمتر است، اضافه کردن ماژول به modules-load.d(5) است که باعث میشود ماژول قبل از اعمال تنظیمات sysctl به صورت ایستا بارگذاری شود (مثال زیر را ببینید).
دایرکتوریهای پیکربندی و اولویت (CONFIGURATION DIRECTORIES AND PRECEDENCE)
فایلهای پیکربندی به ترتیب اولویت، همانطور که در بخش خلاصه دستور در بالا ذکر شد، از دایرکتوریهای موجود در /etc/، /run/، /usr/local/lib/ و /usr/lib/ خوانده میشوند. فایلها باید پسوند ".conf" داشته باشند. فایلهای موجود در /etc/ فایلهای همنام در /run/، /usr/local/lib/ و /usr/lib/ را بازنویسی میکنند. فایلهای موجود در /run/ فایلهای همنام در /usr/ را بازنویسی میکنند.
تمام فایلهای پیکربندی بدون توجه به اینکه در کدامیک از دایرکتوریها قرار دارند، بر اساس نام فایل خود به ترتیب واژهنگاری (ترتیب الفبایی) مرتب میشوند. اگر چند فایل یک گزینه یکسان را مشخص کنند، ورودی موجود در فایلی که نام آن از نظر واژهنگاری مؤخرتر است، اولویت خواهد داشت. بنابراین، پیکربندی یک فایل را میتوان بهطور کامل جایگزین کرد (با قرار دادن فایلی با همان نام در دایرکتوری با اولویت بالاتر)، یا میتوان تنظیمات جداگانه را تغییر داد (با تعیین تنظیمات اضافی در فایلی با نام دیگر که از نظر ترتیبی بعدتر قرار میگیرد).
بستهها باید فایلهای پیکربندی خود را در /usr/lib/ (بستههای توزیع) یا /usr/local/lib/ (نصبهای محلی) [1] نصب کنند. فایلهای موجود در /etc/ برای مدیر محلی سیستم رزرو شدهاند، که میتواند از این منطق برای بازنویسی فایلهای پیکربندی نصبشده توسط بستههای توزیعکننده (vendor) استفاده کند.
توصیه میشود برای سادهتر کردن ترتیب، نام همه فایلها با یک عدد دو رقمی و یک خط تیره شروع شود. توصیه میشود از محدوده 10-40 برای فایلهای پیکربندی در /usr/ و از محدوده 60-90 برای فایلهای پیکربندی در /etc/ و /run/ استفاده شود، تا اطمینان حاصل شود که فایلهای پیکربندی محلی و گذرا همیشه بر فایلهای پیکربندی عرضهشده توسط توزیعکننده سیستمعامل اولویت خواهند داشت.
اگر مدیر سیستم بخواهد یک فایل پیکربندی عرضهشده توسط توزیعکننده را غیرفعال کند، راهکار توصیهشده قرار دادن یک پیوند نمادین (symlink) به /dev/null در دایرکتوری پیکربندی در /etc/ با همان نام فایل پیکربندی توزیعکننده است. اگر فایل پیکربندی توزیعکننده در تصویر initrd گنجانده شده باشد، آن تصویر باید دوباره ایجاد شود.
مثالها (EXAMPLES)
مثال 1. تنظیم نام دامنه YP هسته
/etc/sysctl.d/domain-name.conf:
kernel.domainname=example.com
مثال 2. اعمال تنظیماتی که تنها در زمان بارگذاری یک ماژول خاص در دسترس هستند (روش اول)
/etc/udev/rules.d/99-bridge.rules:
ACTION=="add", SUBSYSTEM=="module", KERNEL=="br_netfilter", \
RUN+="/usr/lib/systemd/systemd-sysctl --prefix=/net/bridge"
/etc/sysctl.d/bridge.conf:
net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0
این روش تنظیمات را هنگام بارگذاری ماژول اعمال میکند. لطفاً توجه داشته باشید که تا زمانی که ماژول br_netfilter بارگذاری نشود، بستههای پلشده (bridged) توسط Netfilter فیلتر نخواهند شد (از هسته 3.18 به بعد)، بنابراین بارگذاری نکردن ماژول برای جلوگیری از فیلتر شدن کافی است.
مثال 3. اعمال تنظیماتی که تنها در زمان بارگذاری یک ماژول خاص در دسترس هستند (روش دوم)
/etc/modules-load.d/bridge.conf:
br_netfilter
/etc/sysctl.d/bridge.conf:
net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0
این روش ماژول را مجبور میکند که همیشه بارگذاری شود. لطفاً توجه داشته باشید که تا زمانی که ماژول br_netfilter بارگذاری نشود، بستههای پلشده توسط Netfilter فیلتر نخواهند شد (از هسته 3.18 به بعد)، بنابراین بارگذاری نکردن ماژول برای جلوگیری از فیلتر شدن کافی است.
مثال 4. تنظیم ویژگیهای مسیریابی شبکه برای همه رابطها
/etc/sysctl.d/20-rp_filter.conf:
net.ipv4.conf.default.rp_filter = 2 net.ipv4.conf.*.rp_filter = 2 -net.ipv4.conf.all.rp_filter net.ipv4.conf.hub0.rp_filter = 1
کلید rp_filter برای همه رابطها به جز "hub0" روی مقدار "2" تنظیم خواهد شد. ما ابتدا net.ipv4.conf.default.rp_filter را تنظیم میکنیم تا هر رابطی که بعداً اضافه شود این مقدار را دریافت کند (این شامل تمام رابطهایی که در حین اجرای ما شناسایی میشوند نیز میشود). الگوی glob با تمام رابطهایی که قبلاً شناسایی شدهاند مطابقت پیدا میکند. این الگو همچنین با net.ipv4.conf.all.rp_filter مطابقت دارد که اصلاً مایل به تنظیم آن نیستیم، بنابراین صراحتاً مستثنی شده است. و "hub0" نیز از glob مستثنی است زیرا یک تنظیم صریح برای آن وجود دارد.
همچنین ببینید (SEE ALSO)
systemd(1), systemd-sysctl.service(8), systemd-delta(1), sysctl(8), sysctl.conf(5), modprobe(8)
نکات (NOTES)
- 1.
- 💣💥🧨💥💥💣 لطفاً توجه داشته باشید که این فایلهای پیکربندی باید همیشه در دسترس باشند. اگر /usr/local/ یک پارتیشن جداگانه باشد، ممکن است در مراحل اولیه بوت در دسترس نباشد و نباید برای پیکربندی استفاده شود.
| systemd 261.2 |