SYSTEMD-ANALYZE(1) systemd-analyze SYSTEMD-ANALYZE(1)

systemd-analyze - تحلیل و عیب‌یابی عملکرد بوت و سیستم در systemd

systemd-analyze [OPTIONS...] [time]

systemd-analyze [OPTIONS...] blame

systemd-analyze [OPTIONS...] critical-chain [UNIT...]

systemd-analyze [OPTIONS...] dump [PATTERN...]

systemd-analyze [OPTIONS...] plot [>file.svg]

systemd-analyze [OPTIONS...] dot [PATTERN...] [>file.dot]

systemd-analyze [OPTIONS...] unit-files

systemd-analyze [OPTIONS...] unit-paths

systemd-analyze [OPTIONS...] exit-status [STATUS...]

systemd-analyze [OPTIONS...] capability [CAPABILITY... | {-m | --mask} MASK]

systemd-analyze [OPTIONS...] condition CONDITION...

systemd-analyze [OPTIONS...] syscall-filter [SET...]

systemd-analyze [OPTIONS...] filesystems [SET...]

systemd-analyze [OPTIONS...] calendar SPEC...

systemd-analyze [OPTIONS...] timestamp TIMESTAMP...

systemd-analyze [OPTIONS...] timespan SPAN...

systemd-analyze [OPTIONS...] cat-config NAME|PATH...

systemd-analyze [OPTIONS...] compare-versions VERSION1 [OP] VERSION2

systemd-analyze [OPTIONS...] verify FILE...

systemd-analyze [OPTIONS...] security [UNIT...]

systemd-analyze [OPTIONS...] inspect-elf FILE...

systemd-analyze [OPTIONS...] malloc [D-BUS SERVICE...]

systemd-analyze [OPTIONS...] fdstore UNIT...

systemd-analyze [OPTIONS...] image-policy POLICY...

systemd-analyze [OPTIONS...] has-tpm2

systemd-analyze [OPTIONS...] pcrs [PCR...]

systemd-analyze [OPTIONS...] srk [>FILE]

systemd-analyze [OPTIONS...] architectures [NAME...]

systemd-analyze [OPTIONS...] smbios11

دستور systemd-analyze می‌تواند برای تعیین آمار عملکرد راه‌اندازی (بوت) سیستم، دریافت سایر اطلاعات وضعیت و ردگیری از مدیر سیستم و سرویس‌ها، و اعتبارسنجی درستی فایل‌های واحد (unit files) به کار رود. این ابزار همچنین برای دسترسی به توابع ویژه‌ای که برای عیب‌یابی پیشرفته مدیر سیستم مفید هستند استفاده می‌شود.

اگر هیچ دستوری مشخص نشود، systemd-analyze time به‌طور پیش‌فرض در نظر گرفته می‌شود.

این دستور مدت‌زمان صرف‌شده در هسته (kernel) قبل از رسیدن به فضای کاربری (userspace)، مدت‌زمان صرف‌شده در initrd قبل از رسیدن به فضای کاربری عادی سیستم، و مدت‌زمانی که فضای کاربری عادی سیستم برای مقداردهی اولیه صرف کرده است را چاپ می‌کند. توجه داشته باشید که این اندازه‌گیری‌ها صرفاً زمان سپری‌شده تا نقطه‌ای را می‌سنجند که همه سرویس‌های سیستم اجرا شده باشند، نه لزوماً تا زمانی که مقداردهی اولیه آن‌ها کاملاً تمام شود یا دیسک بیکار گردد.

مثال ۱. نمایش مدت‌زمان راه‌اندازی (بوت)

# in a container
$ systemd-analyze time
Startup finished in 296ms (userspace)
multi-user.target reached after 275ms in userspace
# on a real machine
$ systemd-analyze time
Startup finished in 2.584s (kernel) + 19.176s (initrd) + 47.847s (userspace) = 1min 9.608s
multi-user.target reached after 47.820s in userspace

این دستور فهرستی از تمام واحدهای در حال اجرا را که بر اساس مدت‌زمان صرف‌شده برای مقداردهی اولیه مرتب شده‌اند، چاپ می‌کند. از این اطلاعات می‌توان برای بهینه‌سازی زمان‌های راه‌اندازی سیستم استفاده کرد. توجه داشته باشید که خروجی ممکن است گمراه‌کننده باشد، زیرا مقداردهی اولیه یک سرویس ممکن است صرفاً به این دلیل کند باشد که منتظر تکمیل مقداردهی اولیه سرویس دیگری است. همچنین توجه کنید: systemd-analyze blame نتایج را برای سرویس‌های دارای Type=simple نمایش نمی‌دهد، زیرا systemd این سرویس‌ها را بلافاصله شروع‌شده در نظر می‌گیرد و بنابراین سنجش تأخیرهای مقداردهی اولیه امکان‌پذیر نیست. همچنین دقت کنید که این دستور فقط زمانی را نشان می‌دهد که واحدها برای راه‌اندازی صرف کرده‌اند، و مدت‌زمانی را که وظایف (jobs) واحد در صف اجرا سپری کرده‌اند نشان نمی‌دهد. به‌ویژه زمانی را نشان می‌دهد که واحدها در وضعیت "activating" سپری کرده‌اند، وضعیتی که برای واحدهایی مانند واحدهای دستگاه (device units) که مستقیماً از "inactive" به "active" تغییر وضعیت می‌دهند تعریف نشده است. از این رو، این دستور تصویری از عملکرد کد برنامه ارائه می‌دهد، اما نمی‌تواند تأخیر ناشی از انتظار برای سخت‌افزار و رویدادهای مشابه را به‌دقت منعکس کند.

مثال ۲. نمایش واحدهایی که بیشترین زمان را در طول بوت صرف کرده‌اند

$ systemd-analyze blame
         32.875s pmlogger.service
         20.905s systemd-networkd-wait-online.service
         13.299s dev-vda1.device
         ...
            23ms sysroot.mount
            11ms initrd-udevadm-cleanup-db.service
             3ms sys-kernel-config.mount

این دستور درختی از زنجیره زمانی بحرانی واحدها را چاپ می‌کند (برای هر یک از UNITهای مشخص‌شده یا در غیر این صورت برای هدف پیش‌فرض). زمان پس از فعال شدن یا شروع واحد بعد از نویسه "@" چاپ می‌شود. مدت‌زمانی که واحد برای شروع صرف می‌کند بعد از نویسه "+" چاپ می‌شود. توجه داشته باشید که خروجی ممکن است به دلیل وابستگی مقداردهی اولیه سرویس‌ها به فعال‌سازی سوکت و همچنین اجرای موازی واحدها گمراه‌کننده باشد. همچنین، مشابه دستور blame، این دستور نیز تنها زمان سپری‌شده واحدها در وضعیت "activating" را در نظر می‌گیرد، و بنابراین واحدهایی را که هرگز از وضعیت "activating" عبور نکرده‌اند (مانند واحدهای دستگاه که مستقیماً از "inactive" به "active" منتقل می‌شوند) پوشش نمی‌دهد. علاوه بر این، اطلاعاتی درباره وظایف (و به‌ویژه وظایفی که با پایان مهلت زمانی مواجه شده‌اند) ارائه نمی‌دهد.

مثال ۳. دستور systemd-analyze critical-chain

$ systemd-analyze critical-chain
multi-user.target @47.820s
└─pmie.service @35.968s +548ms
  └─pmcd.service @33.715s +2.247s
    └─network-online.target @33.712s
      └─systemd-networkd-wait-online.service @12.804s +20.905s
        └─systemd-networkd.service @11.109s +1.690s
          └─systemd-udevd.service @9.201s +1.904s
            └─systemd-tmpfiles-setup-dev.service @7.306s +1.776s
              └─kmod-static-nodes.service @6.976s +177ms
                └─systemd-journald.socket
                  └─system.slice
                    └─-.slice

بدون هیچ پارامتری، این دستور یک سریال‌سازی خوانا برای انسان (معمولاً بسیار طولانی) از وضعیت کامل مدیر سرویس را خروجی می‌دهد. می‌توان یک الگوی glob اختیاری مشخص کرد تا خروجی به واحدهایی که نام آن‌ها با یکی از الگوها مطابقت دارد محدود شود. قالب خروجی بدون اطلاع قبلی قابل تغییر است و نباید توسط برنامه‌ها تجزیه شود. این دستور برای کاربران عادی (غیرریشه) دارای محدودیت نرخ فراخوانی است.

مثال ۴. نمایش وضعیت داخلی مدیر کاربر

$ systemd-analyze --user dump
Timestamp userspace: Thu 2019-03-14 23:28:07 CET
Timestamp finish: Thu 2019-03-14 23:28:07 CET
Timestamp generators-start: Thu 2019-03-14 23:28:07 CET
Timestamp generators-finish: Thu 2019-03-14 23:28:07 CET
Timestamp units-load-start: Thu 2019-03-14 23:28:07 CET
Timestamp units-load-finish: Thu 2019-03-14 23:28:07 CET
-> Unit proc-timer_list.mount:
        Description: /proc/timer_list
        ...
-> Unit default.target:
        Description: Main user target
...

از این دستور می‌توان برای درخواست خروجی وضعیت حافظه داخلی (همان‌طور که توسط malloc_info(3) برگردانده می‌شود) یک سرویس D-Bus استفاده کرد. اگر سرویسی مشخص نشود، پرس‌وجو به org.freedesktop.systemd1 (مدیر سرویس سیستم یا کاربر) ارسال خواهد شد. پایداری قالب خروجی تضمین نمی‌شود و نباید توسط برنامه‌ها تجزیه شود.

سرویس باید رابط org.freedesktop.MemoryAllocation1 را پیاده‌سازی کرده باشد. در مجموعه systemd، در حال حاضر این رابط تنها توسط مدیر پیاده‌سازی شده است.

این دستور یا یک گرافیک SVG چاپ می‌کند که جزئیات سرویس‌های سیستم را با زمان شروع آن‌ها و برجسته‌سازی زمان صرف‌شده برای مقداردهی اولیه نشان می‌دهد، یا داده‌های خام زمانی را در قالب JSON یا جدول نمایش می‌دهد.

مثال ۵. رسم نمودار زمان‌بندی راه‌اندازی (bootchart)

$ systemd-analyze plot >bootup.svg
$ eog bootup.svg&

توجه داشته باشید که این نمودار بر اساس تازه‌ترین داده‌های زمان‌بندی به ازای هر واحد از واحدهای بارگذاری‌شده است. این بدان معناست که اگر واحدی شروع شود، سپس متوقف گردد و دوباره شروع شود، اطلاعات نمایش‌داده‌شده تازه‌ترین چرخه شروع را پوشش می‌دهد، نه اولین چرخه را. بنابراین توصیه می‌شود این اطلاعات تنها کمی پس از بوت بررسی شود تا این تمایز تأثیری نداشته باشد. علاوه بر این، واحدهایی که توسط هیچ واحد دیگری از طریق یک وابستگی ارجاع داده نشده‌اند، ممکن است پس از خاتمه (در صورتی که با شکست مواجه نشده باشند) توسط مدیر سرویس از حافظه تخلیه شوند. چنین واحدهایی در نمودار نشان داده نخواهند شد.

این دستور توصیف متنی گراف وابستگی را در قالب dot برای پردازش بیشتر با ابزار GraphViz dot(1) تولید می‌کند. برای ایجاد یک درخت گرافیکی از وابستگی‌ها از خط فرمانی مانند systemd-analyze dot | dot -Tsvg >systemd.svg استفاده کنید. مگر اینکه --order یا --require ارسال شود، گراف تولیدشده هم وابستگی‌های ترتیبی و هم وابستگی‌های نیازمندی را نشان می‌دهد. مشخصات اختیاری با سبک الگوی تطبیق (مانند *.target) می‌تواند در انتها داده شود. اگر هر یک از این الگوها با گره مبدأ یا مقصد مطابقت داشته باشد، وابستگی واحد در گراف گنجانده می‌شود.

مثال ۶. رسم تمام وابستگی‌های هر واحدی که نام آن با "avahi-daemon" شروع می‌شود

$ systemd-analyze dot 'avahi-daemon.*' | dot -Tsvg >avahi.svg
$ eog avahi.svg

مثال ۷. رسم وابستگی‌های میان تمام واحدهای هدف شناخته‌شده

$ systemd-analyze dot --to-pattern='*.target' --from-pattern='*.target' \
      | dot -Tsvg >targets.svg
$ eog targets.svg

این دستور فهرستی از تمام دایرکتوری‌هایی را چاپ می‌کند که فایل‌های واحد، بازنویسی‌های .d و پیوندهای نمادین .wants و .requires ممکن است از آن‌ها بارگذاری شوند. این دستور را با --user ترکیب کنید تا فهرست مربوط به نمونه مدیر کاربر، و با --global برای دریافت پیکربندی سراسری نمونه‌های مدیر کاربر بازیابی شود.

مثال ۸. نمایش تمام مسیرها برای واحدهای تولیدشده

$ systemd-analyze unit-paths | grep '^/run'
/run/systemd/system.control
/run/systemd/transient
/run/systemd/generator.early
/run/systemd/system
/run/systemd/system.attached
/run/systemd/generator
/run/systemd/generator.late

توجه داشته باشید که این دستور فهرستی را چاپ می‌کند که درون خود systemd-analyze کامپایل شده است و با مدیر در حال اجرا ارتباط برقرار نمی‌کند. برای دریافت فهرست واقعی که مدیر استفاده می‌کند (با حذف دایرکتوری‌های خالی) از دستور زیر استفاده کنید:

systemctl [--user] [--global] show -p UnitPath --value

این دستور فهرستی از وضعیت‌های خروج را به همراه «کلاس» آن‌ها، یعنی منبع تعریف (یکی از "libc"، "systemd"، "LSB"، یا "BSD") چاپ می‌کند؛ بخش کدهای خروج فرایند در systemd.exec(5) را ببینید. اگر هیچ آرگومان اضافی مشخص نشود، تمام وضعیت‌های شناخته‌شده نشان داده می‌شوند. در غیر این صورت، تنها تعاریف کدهای مشخص‌شده نمایش داده خواهند شد.

مثال ۹. نمایش چند نمونه از نام‌های وضعیت خروج

$ systemd-analyze exit-status 0 1 {63..65}
NAME    STATUS CLASS
SUCCESS 0      libc
FAILURE 1      libc
-       63     -
USAGE   64     BSD
DATAERR 65     BSD

این دستور فهرستی از قابلیت‌های لینوکس را به همراه شناسه‌های عددی آن‌ها چاپ می‌کند. برای جزئیات به capabilities(7) مراجعه فرمایید. اگر هیچ آرگومانی مشخص نشود، فهرست کامل قابلیت‌های شناخته‌شده برای مدیر سرویس و هسته نشان داده می‌شود. قابلیت‌هایی که توسط هسته تعریف شده‌اند اما برای مدیر سرویس شناخته‌شده نیستند به‌صورت "cap_???" نمایش داده می‌شوند. در صورت تمایل، اگر آرگومان‌هایی مشخص شوند می‌توانند به قابلیت‌های خاصی بر اساس نام یا شناسه عددی اشاره کنند، که در این حالت تنها قابلیت‌های مشخص‌شده در جدول نمایش داده می‌شوند.

همچنین اگر --mask ارسال شود، باید یک آرگومان عددی واحد مشخص شود که به عنوان یک ماسک قابلیت هگزادسیمال تفسیر می‌شود. در این حالت، تنها قابلیت‌های موجود در ماسک در جدول نشان داده خواهند شد. این حالت برای کمک به رمزگشایی مجموعه‌های قابلیت موجود از طریق رابط‌های عیب‌یابی گوناگون (مانند "/proc/PID/status") طراحی شده است.

مثال ۱۰. نمایش چند نمونه از نام‌های قابلیت‌ها

$ systemd-analyze capability 0 1 {30..32}
NAME              NUMBER
cap_chown              0
cap_dac_override       1
cap_audit_control     30
cap_setfcap           31
cap_mac_override      32

مثال ۱۱. رمزگشایی یک ماسک قابلیت استخراج‌شده از proc/

$ systemd-analyze capability -m 0000000000003c00
NAME                 NUMBER
cap_net_bind_service     10
cap_net_broadcast        11
cap_net_admin            12
cap_net_raw              13

این دستور انتساب‌های Condition*=... و Assert*=... را ارزیابی کرده و مقادیر آن‌ها و مقدار نهایی حاصل از مجموعه شرایط ترکیبی را چاپ می‌کند. برای فهرستی از شرایط و ادعاهای موجود به systemd.unit(5) مراجعه کنید.

مثال ۱۲. ارزیابی شرایطی که نسخه‌های هسته را بررسی می‌کنند

$ systemd-analyze condition 'ConditionKernelVersion = ! <4.0' \
        'ConditionKernelVersion = >=5.1' \
        'ConditionACPower=|false' \
        'ConditionArchitecture=|!arm' \
        'AssertPathExists=/etc/os-release'
test.service: AssertPathExists=/etc/os-release succeeded.
Asserts succeeded.
test.service: ConditionArchitecture=|!arm succeeded.
test.service: ConditionACPower=|false failed.
test.service: ConditionKernelVersion=>=5.1 succeeded.
test.service: ConditionKernelVersion=!<4.0 succeeded.
Conditions succeeded.

این دستور فراخوانی‌های سیستمی موجود در مجموعه سیستم‌کال مشخص‌شده SET، یا در صورت عدم تعیین، تمام مجموعه‌های شناخته‌شده را فهرست می‌کند. آرگومان SET باید شامل پیشوند "@" باشد.

این دستور سیستم‌های فایل موجود در مجموعه سیستم فایل مشخص‌شده SET، یا در صورت عدم تعیین، تمام مجموعه‌های شناخته‌شده را فهرست می‌کند. آرگومان SET باید شامل پیشوند "@" باشد.

این دستور رویدادهای زمانی تکرارشونده تقویم را تجزیه و استانداردسازی (نرمال‌سازی) کرده و زمان سررسید بعدی آن‌ها را محاسبه می‌کند. این دستور همان ورودی تنظیم OnCalendar= در systemd.timer(5) را بر اساس نحو توصیف‌شده در systemd.time(7) دریافت می‌کند. به‌طور پیش‌فرض، تنها سررسید بعدی عبارت تقویمی نشان داده می‌شود؛ از --iterations= برای نمایش تعداد دفعات سررسید مشخص‌شده بعدی عبارت استفاده کنید. هر بار سررسید عبارت یک برچسب زمانی تشکیل می‌دهد، دستور فرعی timestamp را در زیر ببینید.

مثال ۱۳. نمایش روزهای کبیسه در آینده نزدیک

$ systemd-analyze calendar --iterations=5 '*-2-29 0:0:0'
  Original form: *-2-29 0:0:0
Normalized form: *-02-29 00:00:00
    Next elapse: Sat 2020-02-29 00:00:00 UTC
       From now: 11 months 15 days left
       Iter. #2: Thu 2024-02-29 00:00:00 UTC
       From now: 4 years 11 months left
       Iter. #3: Tue 2028-02-29 00:00:00 UTC
       From now: 8 years 11 months left
       Iter. #4: Sun 2032-02-29 00:00:00 UTC
       From now: 12 years 11 months left
       Iter. #5: Fri 2036-02-29 00:00:00 UTC
       From now: 16 years 11 months left

این دستور یک برچسب زمانی (یعنی یک نقطه منفرد در زمان) را تجزیه کرده و شکل استانداردشده و اختلاف میان این برچسب زمانی و زمان حال را خروجی می‌دهد. برچسب زمانی باید با نحو مستندشده در systemd.time(7)، بخش "PARSING TIMESTAMPS" مطابقت داشته باشد.

مثال ۱۴. نمایش تجزیه برچسب‌های زمانی

$ systemd-analyze timestamp yesterday now tomorrow
  Original form: yesterday
Normalized form: Mon 2019-05-20 00:00:00 CEST
       (in UTC): Sun 2019-05-19 22:00:00 UTC
   UNIX seconds: @15583032000
       From now: 1 day 9h ago
  Original form: now
Normalized form: Tue 2019-05-21 09:48:39 CEST
       (in UTC): Tue 2019-05-21 07:48:39 UTC
   UNIX seconds: @1558424919.659757
       From now: 43us ago
  Original form: tomorrow
Normalized form: Wed 2019-05-22 00:00:00 CEST
       (in UTC): Tue 2019-05-21 22:00:00 UTC
   UNIX seconds: @15584760000
       From now: 14h left

این دستور یک بازه زمانی (یعنی اختلاف بین دو برچسب زمانی) را تجزیه کرده و شکل استانداردشده و مقدار معادل آن را برحسب میکروثانیه خروجی می‌دهد. بازه زمانی باید از نحو مستندشده در systemd.time(7)، بخش "PARSING TIME SPANS" پیروی کند. مقادیر بدون واحد به عنوان ثانیه در نظر گرفته می‌شوند.

مثال ۱۵. نمایش تجزیه بازه‌های زمانی

$ systemd-analyze timespan 1s 300s '1year 0.000001s'
Original: 1s
      μs: 1000000
   Human: 1s
Original: 300s
      μs: 300000000
   Human: 5min
Original: 1year 0.000001s
      μs: 31557600000001
   Human: 1y 1us

این دستور مشابه systemctl cat است، اما روی فایل‌های پیکربندی عمل می‌کند. این دستور محتوای یک فایل پیکربندی و هرگونه فایل drop-in را با استفاده از مجموعه دایرکتوری‌ها و قوانین اولویت معمول systemd به خروجی استاندارد کپی می‌کند. هر آرگومان باید یک مسیر مطلق شامل پیشوند (مانند /etc/systemd/logind.conf یا /usr/lib/systemd/logind.conf) یا یک نام نسبی نسبت به پیشوند (مانند systemd/logind.conf) باشد.

مثال ۱۶. نمایش پیکربندی logind

$ systemd-analyze cat-config systemd/logind.conf
# /etc/systemd/logind.conf
...
[Login]
NAutoVTs=8
...
# /usr/lib/systemd/logind.conf.d/20-test.conf
... some override from another package
# /etc/systemd/logind.conf.d/50-override.conf
... some administrator override

این دستور بسته به اینکه عملگر OP مشخص شده باشد یا خیر، دو حالت عملکرد متمایز دارد.

در حالت اول — زمانی که OP مشخص نشده است — دو رشته نسخه را با یکدیگر مقایسه کرده و بسته به مورد، یکی از عبارت‌های "VERSION1 < VERSION2"، یا "VERSION1 == VERSION2"، یا "VERSION1 > VERSION2" را چاپ می‌کند.

وضعیت خروج در صورتی که نسخه‌ها برابر باشند برابر 0، اگر نسخه سمت راست کوچک‌تر باشد برابر 11، و اگر نسخه سمت چپ کوچک‌تر باشد برابر 12 خواهد بود. (این منطبق بر قراردادی است که توسط rpmdev-vercmp استفاده می‌شود.)

در حالت دوم — زمانی که OP مشخص شده است — دو رشته نسخه را با استفاده از عملگر OP مقایسه کرده و در صورت برآورده شدن شرط، مقدار 0 (موفقیت) و در غیر این صورت مقدار 1 (شکست) را بازمی‌گرداند. OP می‌تواند یکی از مقادیر lt، le، eq، ne، ge، gt باشد. در این حالت، هیچ خروجی چاپ نمی‌شود. (این رفتار منطبق بر قراردادی است که توسط گزینه --compare-versions در dpkg(1) استفاده می‌شود.)

مثال ۱۷. مقایسه نسخه‌های یک بسته

$ systemd-analyze compare-versions systemd-250~rc1.fc36.aarch64 systemd-251.fc36.aarch64
systemd-250~rc1.fc36.aarch64 < systemd-251.fc36.aarch64
$ echo $?
12
$ systemd-analyze compare-versions 1 lt 2; echo $?
0
$ systemd-analyze compare-versions 1 ge 2; echo $?
1

این دستور فایل‌های واحد را بارگذاری کرده و در صورت شناسایی هرگونه خطا، هشدارهایی را چاپ می‌کند. علاوه بر فایل‌های مشخص‌شده در خط فرمان، سایر واحدهای ارجاع‌شده توسط آن‌ها نیز بارگذاری خواهند شد. نام یک واحد روی دیسک را می‌توان با مشخص کردن یک نام مستعار پس از دونقطه بازنویسی کرد؛ برای نمونه مثال زیر را ببینید. مسیر کامل جستجوی واحد با ترکیب دایرکتوری‌های تمام آرگومان‌های خط فرمان و مسیرهای معمول بارگذاری واحد تشکیل می‌شود. متغیر $SYSTEMD_UNIT_PATH پشتیبانی می‌شود و می‌توان از آن برای جایگزینی یا افزودن به مجموعه مسیرهای کامپایل‌شده بارگذاری واحد استفاده کرد؛ به systemd.unit(5) مراجعه فرمایید. تمام فایل‌های واحدهای موجود در دایرکتوری‌های حاوی آرگومان‌های خط فرمان با اولویت نسبت به سایر مسیرها استفاده خواهند شد. اگر یک واحد قالب بدون نام نمونه (مانند foo@.service) مشخص شود، "test_instance" به عنوان نام نمونه استفاده خواهد شد که می‌توان آن را با گزینه --instance= کنترل نمود.

خطاهای زیر در حال حاضر شناسایی می‌شوند:

•بخش‌ها و دستورالعمل‌های ناشناخته،
•وابستگی‌های مفقودی که برای شروع واحد داده‌شده لازم هستند،
•صفحات راهنمای ذکرشده در Documentation= که در سیستم یافت نمی‌شوند،
•دستورات ذکرشده در ExecStart= و موارد مشابه که در سیستم یافت نمی‌شوند یا قابل اجرا نیستند.

مثال ۱۸. دستورالعمل‌های دارای املای نادرست

$ cat ./user.slice
[Unit]
WhatIsThis=11
Documentation=man:nosuchfile(1)
Requires=different.service
[Service]
Description=x
$ systemd-analyze verify ./user.slice
[./user.slice:9] Unknown lvalue 'WhatIsThis' in section 'Unit'
[./user.slice:13] Unknown section 'Service'. Ignoring.
Error: org.freedesktop.systemd1.LoadFailed:
   Unit different.service failed to load:
   No such file or directory.
Failed to create user.slice/start: Invalid argument
user.slice: man nosuchfile(1) command failed with code 16

مثال ۱۹. واحدهای سرویس مفقود

$ tail ./a.socket ./b.socket
==> ./a.socket <==
[Socket]
ListenStream=100
==> ./b.socket <==
[Socket]
ListenStream=100
Accept=yes
$ systemd-analyze verify ./a.socket ./b.socket
Service a.service not loaded, a.socket cannot be started.
Service b@0.service not loaded, b.socket cannot be started.

مثال ۲۰. تعیین نام مستعار برای یک واحد

$ cat /tmp/source
[Unit]
Description=Hostname printer
[Service]
Type=simple
ExecStart=/usr/bin/echo %H
MysteryKey=true
$ systemd-analyze verify /tmp/source
Failed to prepare filename /tmp/source: Invalid argument
$ systemd-analyze verify /tmp/source:alias.service
alias.service:7: Unknown key name 'MysteryKey' in section 'Service', ignoring.

این دستور تنظیمات امنیتی و ایزوله‌سازی (sandboxing) یک یا چند واحد سرویس مشخص‌شده را تحلیل می‌کند. اگر دست‌کم یک نام واحد مشخص شود، تنظیمات امنیتی واحدهای سرویس مشخص بازرسی شده و تحلیلی با جزئیات کامل نمایش داده می‌شود. اگر هیچ نام واحدی مشخص نشود، تمام واحدهای سرویس طولانی‌مدت که در حال حاضر بارگذاری شده‌اند بازرسی شده و جدولی خلاصه همراه با نتایج نمایش داده می‌شود. این دستور تنظیمات مختلف سرویس را که با امنیت مرتبط هستند بررسی کرده و بسته به اهمیت هر تنظیم، یک مقدار عددی به عنوان «سطح مواجهه» (exposure level) به آن اختصاص می‌دهد. سپس یک سطح مواجهه کلی برای کل واحد محاسبه می‌کند که تخمینی در بازه ۰.۰ تا ۱۰.۰ است و نشان می‌دهد یک سرویس از منظر امنیتی چقدر در معرض آسیب‌پذیری قرار دارد. سطوح مواجهه بالا نشان‌دهنده ایزوله‌سازی بسیار اندک است. سطوح مواجهه پایین نشان‌دهنده ایزوله‌سازی سخت‌گیرانه و بالاترین محدودیت‌های امنیتی است. توجه داشته باشید که این دستور تنها قابلیت‌های امنیتی مربوط به هر سرویس را که خود systemd پیاده‌سازی می‌کند تحلیل می‌نماید. این بدان معناست که هیچ سازوکار امنیتی اضافی اعمال‌شده توسط خود کد سرویس لحاظ نمی‌شود. سطح مواجهه تعیین‌شده نباید نادرست برداشت شود: سطح مواجهه بالا نه به این معناست که هیچ ایزوله‌سازی مؤثری توسط خود کد سرویس اعمال نشده است، و نه به این معناست که سرویس لزوماً در برابر حملات محلی یا از راه دور آسیب‌پذیر است. با این وجود، سطوح مواجهه بالا نشان می‌دهند که به احتمال زیاد سرویس می‌تواند از تنظیمات امنیتی تکمیلی بهره‌مند شود.

لطفاً توجه داشته باشید که بسیاری از تنظیمات امنیتی و ایزوله‌سازی به‌تنهایی قابل دور زدن هستند — مگر اینکه با موارد دیگر ترکیب شوند. به عنوان مثال، اگر یک سرویس امتیاز ایجاد یا لغو نقاط اتصال (mount points) را حفظ کند، بسیاری از گزینه‌های ایزوله‌سازی می‌توانند توسط خود کد سرویس خنثی شوند. به همین دلیل بسیار حائز اهمیت است که هر سرویس از جامع‌ترین و سخت‌گیرانه‌ترین تنظیمات ایزوله‌سازی و امنیتی ممکن استفاده کند. این ابزار برخی از این ترکیبات و روابط میان تنظیمات را در نظر می‌گیرد، اما نه همه آن‌ها را. همچنین دقت کنید تنظیمات امنیتی و ایزوله‌سازی که در اینجا تحلیل می‌شوند، تنها بر عملیاتی اعمال می‌گردند که توسط خود کد سرویس اجرا می‌شوند. اگر سرویسی به یک سامانه ارتباط بین‌فرایندی (مانند D-Bus) دسترسی داشته باشد، ممکن است عملیاتی را از سایر سرویس‌ها درخواست کند که مشمول همان محدودیت‌ها نیستند. بنابراین هرگونه تحلیل جامع امنیت و ایزوله‌سازی در صورتی که خط‌مشی دسترسی سامانه ارتباط بین‌فرایندی اعتبارسنجی نشود، ناقص خواهد بود.

مثال ۲۱. تحلیل systemd-logind.service

$ systemd-analyze security --no-pager systemd-logind.service
  NAME                DESCRIPTION                              EXPOSURE
✗ PrivateNetwork=     Service has access to the host's network      0.5
✗ User=/DynamicUser=  Service runs as root user                     0.4
✗ DeviceAllow=        Service has no device ACL                     0.2
✓ IPAddressDeny=      Service blocks all IP address ranges
...
→ Overall exposure level for systemd-logind.service: 4.1 OK 🙂

این دستور فایل‌های مشخص‌شده را بارگذاری می‌کند و اگر آن‌ها اشیاء ELF (فایل‌های اجرایی، کتابخانه‌ها، فایل‌های core و غیره) باشند، فراداده‌های بسته‌بندی تعبیه‌شده را (در صورت وجود) تجزیه کرده و آن را در قالب جدول یا json چاپ می‌کند. برای اطلاعات بیشتر به مستندات فراداده‌های بسته‌بندی (Packaging Metadata)[1] مراجعه فرمایید.

مثال ۲۲. چاپ اطلاعات مربوط به یک فایل core به صورت JSON

$ systemd-analyze inspect-elf core.service.1000.5e02422a5e98450a9d391060932204eb.11478.1683820256000000
{
        "elfType" : "coredump",
        "elfArchitecture" : "AMD x86-64",
        ...
        "packageMetadata" : {
                "systemd" : {
                        "type" : "rpm",
                        "name" : "systemd",
                        "version" : "253",
                        "release" : "8.fc38",
                        "architecture" : "x86_64"
                }
        }
}

محتویات فعلی مخزن توصیف‌گر فایل واحد سرویس مشخص‌شده را فهرست می‌کند. این دستور نام‌ها، انواع inode، شماره‌های دستگاه، شماره‌های inode، مسیرها و حالت‌های باز بودن توصیف‌گرهای فایل باز را نشان می‌دهد. برای واحدهای مشخص‌شده باید FileDescriptorStoreMax= فعال باشد؛ برای جزئیات به systemd.service(5) مراجعه کنید.

مثال ۲۳. خروجی جدول

$ systemd-analyze fdstore systemd-journald.service
FDNAME TYPE DEVNO   INODE RDEVNO PATH             FLAGS
stored sock 0:8   4218620 -      socket:[4218620] ro
stored sock 0:8   4213198 -      socket:[4213198] ro
stored sock 0:8   4213190 -      socket:[4213190] ro
...

نکته: ستون "DEVNO" به شماره‌های اصلی/فرعی گره دستگاه پشتیبان سیستم فایلی که inode توصیف‌گر فایل روی آن قرار دارد اشاره دارد. ستون "RDEVNO" به شماره‌های اصلی/فرعی خود گره دستگاه در صورتی که توصیف‌گر فایل به آن ارجاع دهد اشاره می‌کند. با فیلدهای متناظر .st_dev و .st_rdev در struct stat مقایسه فرمایید (برای جزئیات به stat(2) مراجعه کنید). شماره‌های inode فهرست‌شده در ستون "INODE" روی سیستم فایل مشخص‌شده توسط "DEVNO" قرار دارند.

این دستور رشته خط‌مشی ایمیج مشخص‌شده را طبق systemd.image-policy(7) تحلیل می‌کند. خط‌مشی استانداردسازی و ساده‌سازی می‌شود. برای هر شناسه پارتیشن تعریف‌شده فعلی (مطابق با مشخصات پارتیشن‌های قابل کشف (Discoverable Partitions Specification)[2]) اثر رشته خط‌مشی ایمیج به صورت جدولی نشان داده می‌شود.

مثال ۲۴. نمونه خروجی

$ systemd-analyze image-policy swap=encrypted:usr=read-only-on+verity:root=encrypted
Analyzing policy: root=encrypted:usr=verity+read-only-on:swap=encrypted
       Long form: root=encrypted:usr=verity+read-only-on:swap=encrypted:=unused+absent
PARTITION       MODE        READ-ONLY GROWFS
root            encrypted   -         -
usr             verity      yes       -
home            ignore      -         -
srv             ignore      -         -
esp             ignore      -         -
xbootldr        ignore      -         -
swap            encrypted   -         -
root-verity     ignore      -         -
usr-verity      unprotected yes       -
root-verity-sig ignore      -         -
usr-verity-sig  ignore      -         -
tmp             ignore      -         -
var             ignore      -         -
default         ignore      -         -

گزارش می‌دهد که آیا سیستم به یک دستگاه TPM2 قابل استفاده مجهز است یا خیر. اگر یک دستگاه TPM2 کشف شود، پشتیبانی گردد و توسط سفت‌افزار، درایورهای هسته سیستم‌عامل و فضای کاربری (یعنی systemd) استفاده شود، مقدار "yes" را چاپ کرده و با کد خروج صفر خارج می‌شود. اگر چنین دستگاهی کشف/پشتیبانی/استفاده نشود، "no" را چاپ می‌کند. در غیر این صورت، "partial" را چاپ می‌نماید. در هر یک از این دو حالت اخیر با وضعیت خروج غیرصفر خارج می‌شود. همچنین پنج خط را نمایش می‌دهد که به‌طور جداگانه مشخص می‌کنند آیا سفت‌افزار، درایورها، سیستم، هسته و کتابخانه‌ها TPM2 را شناسایی/پشتیبانی/استفاده کرده‌اند یا خیر. در حال حاضر، کتابخانه‌های مورد نیاز عبارتند از: libtss2-esys.so.0، libtss2-rc.so.0، و libtss2-mu.so.0. این نیازمندی ممکن است در نسخه‌های آینده تغییر کند.

توجه داشته باشید که این دستور تنها دستگاه‌های TPM 2.0 را بررسی می‌کند و TPM 1.2 را اصلاً در نظر نمی‌گیرد.

همراه با --quiet برای جلوگیری از نمایش خروجی استفاده نمایید.

مثال ۲۵. نمونه خروجی

yes
+firmware
+driver
+system
+subsystem
+libraries
  +libtss2-esys.so.0
  +libtss2-rc.so.0
  +libtss2-mu.so.0

اضافه‌شده در نسخه ۲۵۷.

این دستور PCRهای شناخته‌شده TPM2 را به همراه نام‌های شناسایی و مقادیر فعلی آن‌ها نمایش می‌دهد.

مثال ۲۶. نمونه خروجی

$ systemd-analyze pcrs
NR NAME                SHA256
 0 platform-code       bcd2eb527108bbb1f5528409bcbe310aa9b74f687854cc5857605993f3d9eb11
 1 platform-config     b60622856eb7ce52637b80f30a520e6e87c347daa679f3335f4f1a600681bb01
 2 external-code       1471262403e9a62f9c392941300b4807fbdb6f0bfdd50abfab752732087017dd
 3 external-config     3d458cfe55cc03ea1f443f1562beec8df51c75e14a9fcf9a7234a13f198e7969
 4 boot-loader-code    939f7fa1458e1f7ce968874d908e524fc0debf890383d355e4ce347b7b78a95c
 5 boot-loader-config  864c61c5ea5ecbdb6951e6cb6d9c1f4b4eac79772f7fe13b8bece569d83d3768
 6 -                   3d458cfe55cc03ea1f443f1562beec8df51c75e14a9fcf9a7234a13f198e7969
 7 secure-boot-policy  9c905bd9b9891bfb889b90a54c4b537b889cfa817c4389cc25754823a9443255
 8 -                   0000000000000000000000000000000000000000000000000000000000000000
 9 kernel-initrd       9caa29b128113ef42aa53d421f03437be57211e5ebafc0fa8b5d4514ee37ff0c
10 ima                 5ea9e3dab53eb6b483b6ec9e3b2c712bea66bca1b155637841216e0094387400
11 kernel-boot         0000000000000000000000000000000000000000000000000000000000000000
12 kernel-config       627ffa4b405e911902fe1f1a8b0164693b31acab04f805f15bccfe2209c7eace
13 sysexts             0000000000000000000000000000000000000000000000000000000000000000
14 shim-policy         0000000000000000000000000000000000000000000000000000000000000000
15 system-identity     0000000000000000000000000000000000000000000000000000000000000000
16 debug               0000000000000000000000000000000000000000000000000000000000000000
17 -                   ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
18 -                   ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
19 -                   ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
20 -                   ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
21 -                   ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
22 -                   ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
23 application-support 0000000000000000000000000000000000000000000000000000000000000000

این دستور کلید ریشه ذخیره‌سازی (SRK) را از دستگاه TPM2 خوانده و آن را در قالب بسته‌بندی‌شده TPM2B_PUBLIC به خروجی استاندارد می‌نویسد. خروجی حاوی داده‌های غیرقابل چاپ است، بنابراین باید به یک فایل یا لوله (pipe) هدایت شود.

مثال ۲۷. ذخیره کلید ریشه ذخیره‌سازی در srk.tpm2b_public

systemd-analyze srk >srk.tpm2b_public

تمام معماری‌های شناخته‌شده CPU و اینکه کدام موارد بومی (native) هستند را فهرست می‌کند. نام‌های معماری فهرست‌شده مواردی هستند که ConditionArchitecture= از آن‌ها پشتیبانی می‌کند؛ برای جزئیات به systemd.unit(5) مراجعه نمایید. اگر نام‌های معماری مشخص شده باشند، تنها موارد مشخص‌شده فهرست می‌شوند.

مثال ۲۸. خروجی جدول

$ systemd-analyze architectures
NAME        SUPPORT
alpha       foreign
arc         foreign
arc-be      foreign
arm         foreign
arm64       foreign
...
sparc       foreign
sparc64     foreign
tilegx      foreign
x86         secondary
x86-64      native

فهرستی از رشته‌های SMBIOS نوع ۱۱ ارسال‌شده به سیستم را نشان می‌دهد. همچنین به smbios-type-11(7) مراجعه کنید.

مثال ۲۹. نمونه خروجی

$ systemd-analyze smbios11
io.systemd.stub.kernel-cmdline-extra=console=ttyS0
io.systemd.credential.binary:ssh.ephemeral-authorized_keys-all=c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSURGd20xbFp4WlRGclJteG9ZQlozOTYzcE1uYlJCaDMwM1MxVXhLSUM2NmYgbGVubmFydEB6ZXRhCg==
io.systemd.credential:vmm.notify_socket=vsock-stream:2:254570042
3 SMBIOS Type #11 strings passed.

اضافه‌شده در نسخه ۲۵۷.

گزینه‌های زیر پشتیبانی می‌شوند:

--system

روی نمونه سیستمی systemd عمل می‌کند. این حالت پیش‌فرض ضمنی است.

اضافه‌شده در نسخه ۲۰۹.

--user

روی نمونه کاربری systemd عمل می‌کند.

اضافه‌شده در نسخه ۱۸۶.

--global

روی پیکربندی سراسری سیستم برای نمونه‌های کاربری systemd عمل می‌کند.

اضافه‌شده در نسخه ۲۳۸.

--order, --require

هنگامی که در ترکیب با دستور dot (در بالا ببینید) استفاده شود، مشخص می‌کند کدام وابستگی‌ها در گراف وابستگی نشان داده شوند. اگر --order ارسال شود، تنها وابستگی‌های از نوع After= یا Before= نشان داده می‌شوند. اگر --require ارسال شود، تنها وابستگی‌های از نوع Requires=، Requisite=، BindsTo=، Wants=، و Conflicts= نشان داده خواهند شد. اگر هیچ‌کدام ارسال نشود، وابستگی‌های تمام این انواع نشان داده می‌شوند.

اضافه‌شده در نسخه ۱۹۸.

--from-pattern=, --to-pattern=

هنگامی که در ترکیب با دستور dot (در بالا ببینید) استفاده شود، مشخص می‌کند کدام رابطه‌ها در گراف وابستگی نشان داده شوند. هر دو گزینه به یک الگوی glob(7) به عنوان آرگومان نیاز دارند که به ترتیب با گره‌های سمت چپ و راست یک رابطه تطبیق داده می‌شود.

هر یک از این گزینه‌ها را می‌توان بیش از یک بار استفاده کرد که در این حالت نام واحد باید با یکی از مقادیر مطابقت داشته باشد. هنگامی که آزمون‌ها برای هر دو سمت رابطه وجود داشته باشند، یک رابطه برای نمایش داده شدن باید هر دو آزمون را با موفقیت پشت سر بگذارد. هنگامی که الگوها به صورت آرگومان‌های مکانی نیز مشخص شوند، باید دست‌کم با یکی از طرفین رابطه مطابقت داشته باشند. به عبارت دیگر، الگوهای مشخص‌شده با این دو گزینه فهرست یال‌های تطبیق‌یافته با آرگومان‌های مکانی (در صورت ارائه) را غربال می‌کنند و در غیر این صورت فهرست یال‌های نمایش‌داده‌شده را به‌طور کامل تعیین می‌نمایند.

اضافه‌شده در نسخه ۲۰۱.

--fuzz=timespan

هنگامی که در ترکیب با دستور critical-chain (در بالا ببینید) استفاده شود، واحدهایی را که مقدار timespan زودتر از آخرین واحد در همان سطح به پایان رسیده‌اند نیز نشان می‌دهد. واحد timespan ثانیه است مگر اینکه با واحد دیگری مشخص شود، مانند "50ms".

اضافه‌شده در نسخه ۲۰۳.

--man=no

از فراخوانی man(1) برای اعتبارسنجی وجود صفحات راهنمای ذکرشده در Documentation= صرف‌نظر می‌کند.

اضافه‌شده در نسخه ۲۳۵.

--generators

مولدهای واحد (generators) را فراخوانی می‌کند؛ به systemd.generator(7) مراجعه کنید. برخی مولدها به امتیازات ریشه نیاز دارند. اجرای دستور تحت کاربر عادی با فعال بودن مولدها عموماً به صدور چند هشدار می‌انجامد.

اضافه‌شده در نسخه ۲۳۵.

--instance=NAME

یک نام نمونه جایگزین برای واحدهای قالب مشخص می‌کند. این نام زمانی استفاده می‌شود که یک یا چند واحد قالب بدون نام نمونه (مانند foo@.service) برای systemd-analyze condition همراه با --unit=، systemd-analyze security، و systemd-analyze verify مشخص شوند. در صورت عدم تعیین، "test_instance" استفاده خواهد شد.

اضافه‌شده در نسخه ۲۵۷.

--recursive-errors=MODE

اعتبارسنجی واحدها و وابستگی‌های آن‌ها و همچنین خروج systemd-analyze verify با وضعیت خروج غیرصفر را کنترل می‌کند. با مقدار yes، در صورت بروز هشدار هنگام اعتبارسنجی واحد مشخص‌شده یا هر یک از وابستگی‌های مرتبط با آن، وضعیت خروج فرایند غیرصفر خواهد بود. با مقدار no، تنها در صورت بروز هشدار هنگام اعتبارسنجی واحد مشخص‌شده، وضعیت خروج فرایند غیرصفر برگردانده می‌شود. با مقدار one، در صورت بروز هشدار هنگام اعتبارسنجی واحد مشخص‌شده یا وابستگی‌های بی‌واسطه آن، وضعیت خروج غیرصفر خواهد بود. اگر این گزینه مشخص نشود، بدون در نظر گرفتن بروز یا عدم بروز هشدار در حین اعتبارسنجی، وضعیت خروج صفر برگردانده می‌شود.

اضافه‌شده در نسخه ۲۵۰.

--root=PATH

همراه با دستورات cat-config، verify، condition و security هنگامی که با --offline= استفاده شود، روی فایل‌های زیر مسیر ریشه مشخص‌شده PATH عمل می‌کند.

اضافه‌شده در نسخه ۲۳۹.

--image=PATH

همراه با دستورات cat-config، verify، condition و security هنگامی که با --offline= استفاده شود، روی فایل‌های درون مسیر ایمیج مشخص‌شده PATH عمل می‌کند.

اضافه‌شده در نسخه ۲۵۰.

--image-policy=policy

یک رشته خط‌مشی ایمیج را به عنوان آرگومان می‌پذیرد، طبق systemd.image-policy(7). این خط‌مشی هنگام کار روی ایمیج دیسک مشخص‌شده از طریق --image= (در بالا ببینید) اعمال می‌شود. در صورت عدم تعیین، مقدار پیش‌فرض خط‌مشی "*" است، یعنی تمام سیستم‌های فایل شناسایی‌شده در ایمیج استفاده می‌شوند.

--offline=BOOL

همراه با دستور security، یک بازبینی امنیتی آفلاین از فایل‌های واحد مشخص‌شده انجام می‌دهد؛ بدین معنا که بر خلاف دستور security در حالت عادی، نیازی به اتکا بر PID 1 برای دریافت اطلاعات امنیتی فایل‌ها ندارد. بنابراین --offline= می‌تواند همراه با --root= و --image= نیز استفاده شود. اگر سطح مواجهه کلی یک واحد بالاتر از مقدار تنظیم‌شده با --threshold= باشد (مقدار پیش‌فرض ۱۰۰ است)، --offline= یک خطا برمی‌گرداند.

اضافه‌شده در نسخه ۲۵۰.

--profile=PATH

همراه با security --offline=، پروفایل پرتابل مشخص‌شده را هنگام ارزیابی تنظیمات واحد لحاظ می‌کند. پروفایل را می‌توان با نام ارسال کرد که در این حالت مکان‌های شناخته‌شده سیستمی جستجو می‌شوند، یا می‌تواند مسیر کامل به یک فایل drop-in خاص باشد.

اضافه‌شده در نسخه ۲۵۰.

--threshold=NUMBER

همراه با دستور security، به کاربر امکان می‌دهد یک مقدار سفارشی برای مقایسه سطح مواجهه کلی فایل‌های واحد مشخص‌شده با آن تعیین کند. اگر سطح مواجهه کلی یک واحد بیشتر از مقدار تعیین‌شده توسط کاربر باشد، security یک خطا برمی‌گرداند. --threshold= می‌تواند همراه با --offline= نیز استفاده شود و مقدار پیش‌فرض آن ۱۰۰ است.

اضافه‌شده در نسخه ۲۵۰.

--security-policy=PATH

همراه با دستور security، به کاربر اجازه می‌دهد مجموعه‌ای سفارشی از نیازمندی‌ها را در قالب یک فایل JSON تعریف کند تا فایل(های) واحد مشخص‌شده با آن مقایسه شده و سطح مواجهه کلی آن‌ها در برابر تهدیدات امنیتی تعیین گردد.

جدول ۱. شناسه‌های آزمون ارزیابی پذیرفته‌شده

Assessment Test Identifier
UserOrDynamicUser
SupplementaryGroups
PrivateMounts
PrivateDevices
PrivateTmp
PrivateNetwork
PrivateUsers
ProtectControlGroups
ProtectKernelModules
ProtectKernelTunables
ProtectKernelLogs
ProtectClock
ProtectHome
ProtectHostname
ProtectSystem
RootDirectoryOrRootImage
LockPersonality
MemoryDenyWriteExecute
NoNewPrivileges
CapabilityBoundingSet_CAP_SYS_ADMIN
CapabilityBoundingSet_CAP_SET_UID_GID_PCAP
CapabilityBoundingSet_CAP_SYS_PTRACE
CapabilityBoundingSet_CAP_SYS_TIME
CapabilityBoundingSet_CAP_NET_ADMIN
CapabilityBoundingSet_CAP_SYS_RAWIO
CapabilityBoundingSet_CAP_SYS_MODULE
CapabilityBoundingSet_CAP_AUDIT
CapabilityBoundingSet_CAP_SYSLOG
CapabilityBoundingSet_CAP_SYS_NICE_RESOURCE
CapabilityBoundingSet_CAP_MKNOD
CapabilityBoundingSet_CAP_CHOWN_FSETID_SETFCAP
CapabilityBoundingSet_CAP_DAC_FOWNER_IPC_OWNER
CapabilityBoundingSet_CAP_KILL
CapabilityBoundingSet_CAP_NET_BIND_SERVICE_BROADCAST_RAW
CapabilityBoundingSet_CAP_SYS_BOOT
CapabilityBoundingSet_CAP_MAC
CapabilityBoundingSet_CAP_LINUX_IMMUTABLE
CapabilityBoundingSet_CAP_IPC_LOCK
CapabilityBoundingSet_CAP_SYS_CHROOT
CapabilityBoundingSet_CAP_BLOCK_SUSPEND
CapabilityBoundingSet_CAP_WAKE_ALARM
CapabilityBoundingSet_CAP_LEASE
CapabilityBoundingSet_CAP_SYS_TTY_CONFIG
CapabilityBoundingSet_CAP_BPF
UMask
KeyringMode
ProtectProc
ProcSubset
NotifyAccess
RemoveIPC
Delegate
RestrictRealtime
RestrictSUIDSGID
RestrictNamespaces_user
RestrictNamespaces_mnt
RestrictNamespaces_ipc
RestrictNamespaces_pid
RestrictNamespaces_cgroup
RestrictNamespaces_uts
RestrictNamespaces_net
RestrictAddressFamilies_AF_INET_INET6
RestrictAddressFamilies_AF_UNIX
RestrictAddressFamilies_AF_NETLINK
RestrictAddressFamilies_AF_PACKET
RestrictAddressFamilies_OTHER
SystemCallArchitectures
SystemCallFilter_swap
SystemCallFilter_obsolete
SystemCallFilter_clock
SystemCallFilter_cpu_emulation
SystemCallFilter_debug
SystemCallFilter_mount
SystemCallFilter_module
SystemCallFilter_raw_io
SystemCallFilter_reboot
SystemCallFilter_privileged
SystemCallFilter_resources
IPAddressDeny
DeviceAllow
AmbientCapabilities

مثال «خط‌مشی JSON» را در زیر ببینید.

اضافه‌شده در نسخه ۲۵۰.

--json=MODE

همراه با دستور security، یک خروجی در قالب JSON از جدول تحلیل امنیتی تولید می‌کند. قالب خروجی یک آرایه JSON شامل اشیایی با فیلدهای زیر است: set که مشخص می‌کند آیا تنظیم فعال شده است یا خیر، name که نام مورد استفاده برای ارجاع به تنظیم است، json_field که شناسه سازگار با JSON مربوط به تنظیم است، description که خلاصه‌ای از وضعیت تنظیم است، و exposure که عددی در محدوده ۰.۰ تا ۱۰.۰ است و مقدار بالاتر نشان‌دهنده تهدید امنیتی بزرگ‌تر است. نسخه JSON جدول در خروجی استاندارد چاپ می‌شود. MODE ارسال‌شده به این گزینه می‌تواند یکی از سه مقدار زیر باشد: off که پیش‌فرض است، pretty و short که به ترتیب نسخه آراسته یا کوتاه JSON جدول امنیتی را خروجی می‌دهند. همراه با دستور plot، یک خروجی در قالب JSON از داده‌های زمانی خام تولید می‌کند. قالب خروجی یک آرایه JSON شامل اشیایی با فیلدهای زیر است: name که نام واحد است، activated که مدت‌زمان پس از راه‌اندازی است که سرویس فعال شد، activating که مدت‌زمان پس از راه‌اندازی است که سرویس ابتدا شروع به فعال‌سازی کرد، time که مدت‌زمانی است که سرویس از شروع اولیه تا فعال شدن صرف کرد، deactivated که مدت‌زمان پس از راه‌اندازی است که سرویس غیرفعال شد، deactivating که مدت‌زمان پس از راه‌اندازی است که در ابتدا به سرویس دستور غیرفعال‌سازی داده شد.

اضافه‌شده در نسخه ۲۵۰.

--iterations=NUMBER

هنگامی که همراه با دستور calendar استفاده شود، تعداد دفعات مشخص‌شده را که عبارت تقویمی در آینده سررسید خواهد شد نشان می‌دهد. پیش‌فرض ۱ است.

اضافه‌شده در نسخه ۲۴۲.

--base-time=TIMESTAMP

هنگامی که همراه با دستور calendar استفاده شود، تکرارهای بعدی را نسبت به نقطه زمانی مشخص‌شده نشان می‌دهد. در صورت عدم تعیین، مقدار پیش‌فرض زمان فعلی است.

اضافه‌شده در نسخه ۲۴۴.

--unit=UNIT

هنگامی که همراه با دستور condition استفاده شود، تمام انتساب‌های Condition*=... و Assert*=... در فایل واحد مشخص‌شده را ارزیابی می‌کند. مسیر کامل جستجوی واحد با ترکیب دایرکتوری‌های واحد مشخص‌شده با مسیرهای معمول بارگذاری واحد تشکیل می‌شود. متغیر $SYSTEMD_UNIT_PATH پشتیبانی می‌شود و می‌توان از آن برای جایگزینی یا افزودن به مجموعه مسیرهای کامپایل‌شده بارگذاری واحد استفاده کرد؛ به systemd.unit(5) مراجعه نمایید. تمام فایل‌های واحدهای موجود در دایرکتوری حاوی واحد مشخص‌شده با اولویت نسبت به سایر مسیرها استفاده خواهند شد. اگر یک واحد قالب بدون نام نمونه (مانند foo@.service) مشخص شود، "test_instance" به عنوان نام نمونه استفاده خواهد شد که می‌توان آن را با گزینه --instance= کنترل کرد.

اضافه‌شده در نسخه ۲۵۰.

--table

هنگامی که با دستور plot استفاده شود، داده‌های خام زمانی در قالب یک جدول خروجی داده می‌شوند.

اضافه‌شده در نسخه ۲۵۳.

--no-legend

هنگامی که با دستور plot در ترکیب با --table یا --json= استفاده شود، هیچ راهنما یا توضیحی در خروجی گنجانده نمی‌شود.

اضافه‌شده در نسخه ۲۵۳.

-H, --host=

عملیات را از راه دور اجرا می‌کند. برای اتصال، یک نام میزبان یا یک نام کاربری و نام میزبان جداشده با "@" را مشخص کنید. نام میزبان می‌تواند اختیاری با یک پورت که ssh روی آن گوش می‌دهد با جداکننده ":" و سپس نام یک کانتینر با جداکننده "/" همراه شود که مستقیماً به یک کانتینر خاص روی میزبان مشخص‌شده متصل می‌شود. این گزینه از SSH برای ارتباط با نمونه مدیر ماشین راه دور استفاده می‌کند. نام‌های کانتینر را می‌توان با machinectl -H HOST برشمرد. نشانی‌های IPv6 را درون براکت قرار دهید.

-M, --machine=

عملیات را روی یک کانتینر محلی اجرا می‌کند. نام یک کانتینر را برای اتصال مشخص کنید که می‌تواند به صورت اختیاری با یک نام کاربری برای اتصال و نویسه جداکننده "@" پیشوندگذاری شود. اگر رشته ویژه ".host" به جای نام کانتینر استفاده شود، اتصالی به سیستم محلی برقرار می‌شود (که برای اتصال به گذرگاه کاربری یک کاربر خاص مفید است: "--user --machine=lennart@.host"). اگر نحو "@" استفاده نشود، اتصال با دسترسی کاربر ریشه برقرار می‌شود. اگر نحو "@" استفاده شود، می‌توان سمت چپ یا راست را حذف کرد (اما نه هر دو را) که در این حالت نام کاربر محلی و ".host" به‌طور ضمنی لحاظ می‌شوند.

-q, --quiet

راهنماها و سایر خروجی‌های غیرضروری را متوقف می‌کند.

اضافه‌شده در نسخه ۲۵۰.

--tldr

همراه با دستور cat-config، تنها بخش‌های «مهم» فایل‌های پیکربندی را چاپ می‌کند و از توضیحات، خطوط خالی و هدر بخش‌هایی که تنها با توضیحات و خطوط خالی دنبال شده‌اند صرف‌نظر می‌نماید.

اضافه‌شده در نسخه ۲۵۵.

--scale-svg=FACTOR

هنگامی که همراه با دستور plot استفاده شود، محور افقی (x) نمودار را می‌توان با مقدار FACTOR کشید (پیش‌فرض: ۱.۰).

اضافه‌شده در نسخه ۲۵۷.

--detailed

هنگامی که همراه با دستور plot استفاده شود، جزئیات برچسب‌های زمانی فعال‌سازی در نمودار SVG قابل مشاهده خواهد بود.

اضافه‌شده در نسخه ۲۵۷.

-h, --help

یک متن راهنمای کوتاه چاپ کرده و خارج می‌شود.

--version

یک رشته نسخه کوتاه چاپ کرده و خارج می‌شود.

--no-pager

خروجی را به یک صفحه‌بند (pager) هدایت نمی‌کند.

برای بیشتر دستورات، در صورت موفقیت 0 و در غیر این صورت یک کد خطای غیرصفر بازگردانده می‌شود.

برای دستور فرعی compare-versions، در حالت دو آرگومانی، اگر رشته نسخه دوم به ترتیب بزرگ‌تر از، مساوی با، یا کوچک‌تر از نسخه اول باشد، کدهای 12، 0، یا 11 بازگردانده می‌شوند. در حالت سه آرگومانی، اگر شرط به ترتیب برقرار یا برقرار نباشد، کدهای 0 یا 1 بازگردانده خواهند شد.

برای دستور فرعی has-tpm2، اگر یک دستگاه TPM2 کشف شود، پشتیبانی گردد و توسط سفت‌افزار، درایور و فضای کاربری (یعنی systemd) استفاده شود، کد 0 بازگردانده می‌شود. در غیر این صورت، ترکیب منطقی OR از مقادیر 1 (در صورت عدم پشتیبانی سفت‌افزار)، 2 (در صورت عدم پشتیبانی درایور)، و 4 (در صورت عدم پشتیبانی فضای کاربری) بازگردانده خواهد شد. اگر هیچ‌گونه پشتیبانی از TPM2 در دسترس نباشد، مقدار 7 بازگردانده می‌شود.

$SYSTEMD_LOG_LEVEL

حداکثر سطح ثبت وقایع (لاگ) برای پیام‌های ارسالی (پیام‌هایی با سطح لاگ بالاتر، یعنی کم‌اهمیت‌تر، متوقف خواهند شد). فهرستی از مقادیر جداشده با کاما را می‌پذیرد. یک مقدار می‌تواند یکی از موارد زیر (به ترتیب کاهش اهمیت) باشد: emerg، alert، crit، err، warning، notice، info، debug، یا یک عدد صحیح در محدوده ۰ تا ۷. برای اطلاعات بیشتر به syslog(3) مراجعه کنید. هر مقدار می‌تواند به صورت اختیاری با یکی از پیشوندهای console، syslog، kmsg یا journal به همراه یک علامت دونقطه برای تنظیم حداکثر سطح ثبت وقایع برای آن مقصد لاگ خاص همراه شود (به عنوان مثال SYSTEMD_LOG_LEVEL=debug,console:info مشخص می‌کند که لاگ در سطح debug ثبت شود، به جز هنگام ثبت در کنسول که باید در سطح info باشد). توجه داشته باشید که حداکثر سطح لاگ سراسری نسبت به سطوح لاگ تعیین‌شده برای هر مقصد اولویت دارد.

$SYSTEMD_LOG_COLOR

یک مقدار بولی (boolean). در صورت درست بودن (true)، پیام‌های نوشته‌شده در tty متناسب با اولویت رنگی خواهند شد.

این تنظیم تنها زمانی مفید است که پیام‌ها مستقیماً در ترمینال نوشته شوند، زیرا journalctl(1) و سایر ابزارهایی که لاگ‌ها را نمایش می‌دهند پیام‌ها را خودشان بر اساس سطح لاگ رنگ‌آمیزی می‌کنند.

$SYSTEMD_LOG_TIME

یک مقدار بولی. در صورت فعال بودن، پیام‌های لاگ کنسول با یک برچسب زمانی پیشوندگذاری می‌شوند.

این تنظیم تنها زمانی سودمند است که پیام‌ها مستقیماً در ترمینال یا یک فایل نوشته شوند، زیرا journalctl(1) و سایر ابزارهایی که لاگ‌ها را نمایش می‌دهند برچسب‌های زمانی را خودشان بر اساس فراداده‌های ورودی پیوست می‌کنند.

$SYSTEMD_LOG_LOCATION

یک مقدار بولی. در صورت فعال بودن، پیام‌ها با نام فایل و شماره خط در کد منبع که پیام از آنجا نشأت گرفته است پیشوندگذاری می‌شوند.

توجه داشته باشید که مکان لاگ اغلب به هر حال به عنوان فراداده به ورودی‌های ژورنال پیوست می‌شود. با این حال گنجاندن مستقیم آن در متن پیام می‌تواند هنگام عیب‌یابی برنامه‌ها بسیار کارآمد باشد.

$SYSTEMD_LOG_TID

یک مقدار بولی. در صورت فعال بودن، پیام‌ها با شناسه عددی نخ (TID) فعلی پیشوندگذاری می‌شوند.

توجه داشته باشید که این اطلاعات اغلب به هر حال به عنوان فراداده به ورودی‌های ژورنال پیوست می‌شود. با این حال گنجاندن مستقیم آن در متن پیام می‌تواند هنگام عیب‌یابی برنامه‌ها کارآمد باشد.

$SYSTEMD_LOG_TARGET

مقصد پیام‌های لاگ. یکی از مقادیر: console (ثبت در tty متصل)، console-prefixed (ثبت در tty متصل اما با پیشوندهای کدگذاری‌کننده سطح لاگ و بخش سامانه، به syslog(3) مراجعه کنید)، kmsg (ثبت در بافر لاگ حلقوی هسته)، journal (ثبت در ژورنال)، journal-or-kmsg (ثبت در ژورنال در صورت در دسترس بودن، و در غیر این صورت در kmsg)، auto (تعیین خودکار مقصد مناسب برای لاگ، که حالت پیش‌فرض است)، null (غیرفعال کردن خروجی لاگ).

$SYSTEMD_LOG_RATELIMIT_KMSG

آیا محدودیت نرخ ارسال برای kmsg اعمال شود یا خیر. یک مقدار بولی می‌پذیرد. مقدار پیش‌فرض "true" است. در صورت غیرفعال بودن، systemd پیام‌های نوشته‌شده در kmsg را محدود نمی‌کند.

$SYSTEMD_PAGER, $PAGER

صفحه‌بندی که هنگام عدم ارائه --no-pager استفاده می‌شود. در صورت تنظیم بودن، $SYSTEMD_PAGER استفاده می‌شود؛ در غیر این صورت $PAGER به کار می‌رود. اگر هیچ‌یک از $SYSTEMD_PAGER یا $PAGER تنظیم نشده باشند، مجموعه‌ای از پیاده‌سازی‌های شناخته‌شده صفحه‌بند به نوبت امتحان می‌شوند، از جمله less(1) و more(1)، تا زمانی که یکی پیدا شود. اگر هیچ پیاده‌سازی صفحه‌بندی کشف نشود، صفحه‌بندی فراخوانی نخواهد شد. تنظیم این متغیرهای محیطی به یک رشته خالی یا مقدار "cat" معادل ارسال --no-pager است.

نکته: اگر $SYSTEMD_PAGERSECURE تنظیم نشده باشد، $SYSTEMD_PAGER و $PAGER تنها می‌توانند برای غیرفعال کردن صفحه‌بند (با "cat" یا "") استفاده شوند و در غیر این صورت نادیده گرفته می‌شوند.

$SYSTEMD_LESS

بازنویسی گزینه‌های ارسالی به less (به‌طور پیش‌فرض "FRSXMK").

کاربران ممکن است به طور خاص مایل به تغییر دو گزینه باشند:

K

این گزینه به صفحه‌بند دستور می‌دهد هنگام فشرده شدن کلیدهای Ctrl+C بلافاصله خارج شود. برای اینکه به less اجازه دهید خودش Ctrl+C را برای بازگشت به خط فرمان صفحه‌بند مدیریت کند، این گزینه را لغو کنید.

اگر مقدار $SYSTEMD_LESS شامل "K" نباشد و صفحه‌بند فراخوانی‌شده less باشد، Ctrl+C توسط برنامه اجرایی نادیده گرفته شده و باید توسط صفحه‌بند مدیریت شود.

X

این گزینه به صفحه‌بند دستور می‌دهد رشته‌های مقداردهی اولیه و بازنشانی termcap را به ترمینال ارسال نکند. این گزینه به‌طور پیش‌فرض تنظیم شده است تا خروجی دستور حتی پس از خروج از صفحه‌بند در ترمینال قابل مشاهده باقی بماند. با این وجود، این امر مانع از کارکرد برخی امکانات صفحه‌بند می‌شود؛ به‌ویژه خروجی صفحه‌بندی‌شده را نمی‌توان با ماوس پیمایش کرد.

توجه داشته باشید که تنظیم متغیر محیطی معمولی $LESS هیچ اثری بر فراخوانی‌های less توسط ابزارهای systemd ندارد.

برای توضیحات بیشتر به less(1) مراجعه کنید.

$SYSTEMD_LESSCHARSET

مجموعه نویسه‌های ارسالی به less را بازنویسی می‌کند (به‌طور پیش‌فرض "utf-8"، در صورتی که ترمینال فراخوان سازگار با UTF-8 تشخیص داده شود).

توجه داشته باشید که تنظیم متغیر محیطی معمولی $LESSCHARSET هیچ اثری بر فراخوانی‌های less توسط ابزارهای systemd ندارد.

$SYSTEMD_PAGERSECURE

دستورات رایج صفحه‌بند مانند less(1)، علاوه بر «صفحه‌بندی» یعنی پیمایش در خروجی، از باز کردن یا نوشتن در فایل‌های دیگر و اجرای دستورات دلخواه پوسته (شل) پشتیبانی می‌کنند. هنگامی که دستورات با اختیارات بالا اجرا می‌شوند، برای مثال تحت sudo(8) یا pkexec(1)، صفحه‌بند به یک مرز امنیتی تبدیل می‌شود. باید دقت شود که تنها برنامه‌هایی با عملکرد کاملاً محدود به عنوان صفحه‌بند استفاده شوند، و ویژگی‌های تعاملی ناخواسته مانند باز کردن یا ایجاد فایل‌های جدید یا آغاز زیرپردازش‌ها مجاز نباشند. «حالت امن» برای صفحه‌بند را می‌توان همان‌طور که در زیر توضیح داده شده فعال کرد، در صورتی که صفحه‌بند از آن پشتیبانی کند (بیشتر صفحه‌بندها به شیوه‌ای نوشته نشده‌اند که این موضوع را لحاظ کنند). توصیه می‌شود هنگام اجازه دادن به کاربران غیرقابل اعتماد برای اجرای دستورات با اختیارات بالا، یا «حالت امن» را صراحتاً فعال کنید یا با استفاده از --no-pager یا PAGER=cat صفحه‌بند را به طور کامل غیرفعال نمایید.

این گزینه یک آرگومان بولی می‌پذیرد. در صورت تنظیم روی true، «حالت امن» صفحه‌بند فعال می‌شود. در «حالت امن»، هنگام فراخوانی صفحه‌بند متغیر LESSSECURE=1 تنظیم خواهد شد که به صفحه‌بند دستور می‌دهد دستوراتی را که فایل‌های جدید باز می‌کنند یا می‌سازند، یا زیرپردازش‌های جدید را آغاز می‌نمایند، غیرفعال کند. در حال حاضر تنها less(1) شناخته شده است که این متغیر را درک کرده و «حالت امن» را پیاده‌سازی می‌نماید.

در صورت تنظیم روی false، هیچ محدودیتی بر صفحه‌بند اعمال نمی‌شود. تنظیم SYSTEMD_PAGERSECURE=0 یا حذف نکردن آن از محیط به ارث رسیده ممکن است به کاربر اجازه اجرای دستورات دلخواه را بدهد.

هنگامی که $SYSTEMD_PAGERSECURE تنظیم نشده باشد، ابزارهای systemd تلاش می‌کنند به‌طور خودکار تشخیص دهند که آیا «حالت امن» باید فعال شود و آیا صفحه‌بند از آن پشتیبانی می‌کند یا خیر. اگر شناسه کاربری مؤثر (UID) با مالک نشست ورود یکسان نباشد (به geteuid(2) و sd_pid_get_owner_uid(3) مراجعه کنید)، یا هنگام اجرا تحت sudo(8) یا ابزارهای مشابه (که متغیر $SUDO_UID تنظیم شده باشد [3])، «حالت امن» فعال می‌شود. در این حالت‌ها، SYSTEMD_PAGERSECURE=1 تنظیم خواهد شد و صفحه‌بندهایی که اجرای «حالت امن» توسط آن‌ها شناخته نشده است اصلاً استفاده نخواهند شد. توجه داشته باشید که این تشخیص خودکار تنها متداول‌ترین سازوکارهای ارتقای اختیارات را پوشش می‌دهد و برای راحتی کار در نظر گرفته شده است. توصیه می‌شود صراحتاً $SYSTEMD_PAGERSECURE را تنظیم کنید یا صفحه‌بند را غیرفعال نمایید.

توجه داشته باشید که اگر قرار باشد متغیرهای $SYSTEMD_PAGER یا $PAGER رعایت شوند، به جز برای غیرفعال کردن صفحه‌بند، باید $SYSTEMD_PAGERSECURE نیز تنظیم شده باشد.

$SYSTEMD_COLORS

یک آرگومان بولی می‌پذیرد. هنگامی که درست (true) باشد، systemd و ابزارهای وابسته از رنگ‌ها در خروجی خود استفاده می‌کنند، در غیر این صورت خروجی تک‌رنگ خواهد بود. علاوه بر این، این متغیر می‌تواند یکی از مقادیر ویژه زیر را بپذیرد: "16"، "256" تا استفاده از رنگ‌ها را به ترتیب به ۱۶ یا ۲۵۶ رنگ پایه ANSI محدود کند. این متغیر را می‌توان برای بازنویسی تصمیم‌گیری خودکار بر اساس $TERM و نوع اتصال کنسول تعیین نمود.

$SYSTEMD_URLIFY

مقدار باید یک بولی باشد. مشخص می‌کند آیا برای شبیه‌سازهای ترمینال پشتیبانی‌کننده، پیوندهای قابل کلیک در خروجی ایجاد شوند یا خیر. این متغیر می‌تواند برای لغو تصمیمی که systemd بر اساس $TERM و سایر شرایط می‌گیرد مشخص شود.

مثال ۳۰. خط‌مشی JSON (JSON Policy)

فایل JSON که به عنوان پارامتر مسیر به --security-policy= ارسال می‌شود، دارای یک شیء سطح بالای JSON است که کلیدهای آن شناسه‌های آزمون ارزیابی ذکرشده در بالا هستند. مقادیر موجود در فایل باید اشیاء JSON با یک یا چند مورد از فیلدهای زیر باشند: description_na (رشته)، description_good (رشته)، description_bad (رشته)، weight (عدد صحیح بدون علامت)، و range (عدد صحیح بدون علامت). اگر هر یک از این فیلدهای متناظر با یک شناسه خاص از فایل واحد در شیء JSON موجود نباشد، مقدار پیش‌فرض فیلد توکار متناظر با همان شناسه به عنوان مقدار پیش‌فرض برای تحلیل امنیتی استفاده می‌شود. فیلدهای وزن (weight) و دامنه (range) برای تعیین سطح مواجهه کلی فایل‌های واحد استفاده می‌شوند: به مقدار هر تنظیم یک امتیاز نامطلوب بودن (badness score) اختصاص داده می‌شود، که در وزن خط‌مشی ضرب شده و بر دامنه خط‌مشی تقسیم می‌شود تا میزان مواجهه کلی حاصل از آن تنظیم تعیین گردد. امتیاز نامطلوب بودن محاسبه‌شده در میان تمام تنظیمات موجود در فایل واحد جمع شده، در محدوده ۱ تا ۱۰۰ استانداردسازی می‌شود و برای تعیین سطح مواجهه کلی واحد به کار می‌رود. با دادن امکان تنظیم این فیلدها به کاربران، دستور فرعی 'security' به آن‌ها این حق انتخاب را می‌دهد که خود تصمیم بگیرند کدام شناسه‌ها اهمیت بیشتری دارند و در نتیجه باید تأثیر بیشتری بر سطح مواجهه داشته باشند. وزن "0" به این معناست که آن تنظیم بررسی نخواهد شد.

{
  "PrivateDevices":
    {
    "description_good": "Service has no access to hardware devices",
    "description_bad": "Service potentially has access to hardware devices",
    "weight": 1000,
    "range": 1
    },
  "PrivateMounts":
    {
    "description_good": "Service cannot install system mounts",
    "description_bad": "Service may install system mounts",
    "weight": 1000,
    "range": 1
    },
  "PrivateNetwork":
    {
    "description_good": "Service has no access to the host's network",
    "description_bad": "Service has access to the host's network",
    "weight": 2500,
    "range": 1
    },
  "PrivateTmp":
    {
    "description_good": "Service has no access to other software's temporary files",
    "description_bad": "Service has access to other software's temporary files",
    "weight": 1000,
    "range": 1
    },
  "PrivateUsers":
    {
    "description_good": "Service does not have access to other users",
    "description_bad": "Service has access to other users",
    "weight": 1000,
    "range": 1
    }
}

systemd(1), systemctl(1)

1.
فراداده‌های بسته‌بندی (Packaging Metadata)
2.
مشخصات پارتیشن‌های قابل کشف (Discoverable Partitions Specification)
3.
توصیه می‌شود سایر ابزارها نیز متغیر $SUDO_UID را در صورت لزوم تنظیم و بررسی کرده و با آن به عنوان یک رابط مشترک رفتار نمایند.
systemd 257.13