| USBGUARD-RULES.CO(5) | USBGUARD-RULES.CO(5) |
نام (NAME)
usbguard-rules.conf - فایل مجموعه قوانین USBGuard
توضیحات (DESCRIPTION)
فایل usbguard-rules.conf توسط دیمن USBGuard پس از پردازش فایل پیکربندی اصلی، usbguard-daemon.conf(5)، بارگذاری میشود. این دیمن انتظار دارد که فایل حاوی قوانینی باشد که به زبانی نوشته شدهاند که در بخش «زبان قوانین» در ادامه شرح داده شده است.
زبان قوانین (RULE LANGUAGE)
دیمن USBGuard بر اساس یک خطمشی تعریفشده توسط مجموعهای از قوانین، تصمیم میگیرد که کدام دستگاه USB را مجاز کند. هنگامی که یک دستگاه USB به سیستم متصل میشود، دیمن قوانین موجود را به صورت متوالی بررسی میکند. اگر قانون منطبقی پیدا شود، بر اساس هدف (target) قانون، دستگاه را مجاز (allow)، غیرمجاز و مسدود (block) یا حذف (reject) میکند. اگر هیچ قانون منطبقی یافت نشود، تصمیم بر اساس یک هدف پیشفرض ضمنی اتخاذ میشود. این پیشفرض ضمنی مسدود کردن دستگاه است تا زمانی که تصمیمی توسط کاربر گرفته شود. گرامر زبان قوانین که با ساختاری شبیه به BNF بیان شده، به شرح زیر است:
rule ::= target attributes. target ::= "allow" | "block" | "reject". attributes ::= attributes | attribute. attributes ::= .
مشخصههای قانون مشخص میکنند که کدام دستگاهها باید مطابقت داده شوند یا چه شرایطی باید برقرار باشد تا قانون اعمال شود. برای فهرست مشخصههای موجود، بخش «مشخصات دستگاه» و برای فهرست شرایط پشتیبانیشده، بخش «شرایط» را ببینید.
اهداف (Targets)
هدف یک قانون مشخص میکند که آیا استفاده از دستگاه مجاز خواهد بود یا خیر. سه نوع هدف شناخته شده است:
مشخصات دستگاه (Device Specification)
به جز هدف، تمام فیلدهای دیگر یک قانون اختیاری هستند. قانونی که در آن تنها هدف مشخص شده باشد، با هر دستگاهی مطابقت خواهد داشت. این قابلیت به مدیر خطمشی اجازه میدهد تا یک هدف پیشفرض صریح بنویسد. اگر هیچ قانونی از خطمشی بر دستگاه قابل اعمال نباشد، هدف ضمنی پیکربندیشده در usbguard-daemon.conf(5) استفاده خواهد شد. با این حال، اگر فردی بخواهد کاربرد یک قانون را به مجموعهای از دستگاهها یا فقط یک دستگاه محدود کند، میتواند این کار را با استفاده از مشخصههای دستگاه و شرایط قانون انجام دهد.
مشخصههای
دستگاه (Device Attributes)
مشخصههای دستگاه مقادیر خاصی هستند که پس از اتصال دستگاه USB به سیستم، از آن خوانده میشوند. این که کدام مشخصهها در دسترس هستند در ادامه تعریف شده است. برخی از مشخصهها اشتقاقی هستند و برخی بر اساس مقادیری هستند که مستقیماً از دستگاه خوانده میشوند. همه مشخصهها از دو شکل پشتیبانی میکنند:
name value
name [operator] { value1 value2 ... }
که در آن operator (عملگر) اختیاری یکی از موارد زیر است:
all-of
one-of
none-of
equals
equals-ordered
match-all
اگر عملگر مشخص نشود، روی equals تنظیم میشود.
فهرست مشخصهها:
id usb-device-id
id [operator] { usb-device-id ... }
hash "value"
hash [operator] { "value" ... }
parent-hash "value"
parent-hash [operator] { "value" ... }
name "device-name"
name [operator] { "device-name" ... }
serial "serial-number"
serial [operator] { "serial-number" ... }
via-port "port-id"
via-port [operator] { "port-id" ... }
with-interface interface-type
with-interface [operator] { interface-type ... }
with-connect-type "connect-type"
with-connect-type [operator] { "connect-type" ... }
label "label"
مقدار usb-device-id یک جفت جداشده با دونقطه به شکل vendor_id:product_id است. تمام دستگاههای USB این شناسه را توسط سازنده دریافت کردهاند و این مقدار باید نوع محصول USB را به طور منحصربهفرد مشخص کند. هر دو مقدار vendor_id و product_id اعدادی ۱۶ بیتی هستند که در مبنای شانزدهشانزدهی (هگزادسیمال) نشان داده میشوند. امکان استفاده از نویسه ستاره برای مطابقت با هر شناسه دستگاه *:* یا هر شناسه محصول از یک سازنده خاص، به عنوان مثال 1234:* وجود دارد.
مقدار port-id یک شناسه درگاه USB وابسته به پلتفرم است. در لینوکس در مورد یک کنترلکننده USB (دقیقتر یک «root hub») به شکل "usbN" یا در مورد یک دستگاه USB به شکل "bus-port[.port[.port ...]]" (مثلاً 1-2، 1-2.1 و ...) است.
مقدار interface-type نمایانگر یک رابط USB است و باید به صورت سه عدد ۸ بیتی در مبنای شانزدهشانزدهی جداشده با نویسه دونقطه قالببندی شود، یعنی cc:ss:pp. این اعداد به ترتیب نشاندهنده کلاس رابط (cc)، زیرکلاس (ss) و پروتکل (pp) هستند که توسط USB-IF تعیین شدهاند. برای جزئیات بیشتر به فهرست کلاسها، زیرکلاسها و پروتکلهای تعیینشده مراجعه کنید. به جای شماره زیرکلاس و پروتکل، میتوانید یک نویسه ستاره (*) بنویسید تا با تمام زیرکلاسها یا پروتکلها مطابقت یابد. تطبیق یک کلاس خاص با یک پروتکل خاص مجاز نیست؛ یعنی اگر از ستاره برای شماره زیرکلاس استفاده کنید، باید برای پروتکل نیز از ستاره استفاده نمایید.
شرایط (Conditions)
اینکه قانونی که با یک دستگاه مطابقت دارد اعمال شود یا خیر، میتواند با استفاده از شرایط قانون بیشتر محدود گردد. اگر عبارت شرط در زمان ارزیابی قانون برقرار باشد، هدف قانون برای دستگاه اعمال میشود. یک عبارت شرط زمانی برقرار است که مقدار آن درست (true) ارزیابی شود. در غیر این صورت، ارزیابی قانون با قانون بعدی ادامه مییابد. شرایط یک قانون دارای ساختار نحوی زیر است:
if [!]condition
if [operator] { [!]conditionA [!]conditionB ... }
به صورت اختیاری، میتوان از علامت تعجب (!) برای نقیض کردن نتیجه یک شرط استفاده کرد.
تفسیر عملگر مجموعه:
all-of
one-of
none-of
equals
equals-ordered
فهرست شرایط:
localtime(time_range)
allowed-matches(query)
rule-applied
rule-applied(past_duration)
rule-evaluated
rule-evaluated(past_duration)
random
random(p_true)
true
false
قانون جزئی (Partial rule)
قانون جزئی قانونی بدون هدف (target) است. قوانین جزئی ممکن است توسط برخی دستورات ابزار خط فرمان usbguard استفاده شوند.
توضیحات و کامنتها (Comments)
به منظور درک آسان مفهوم هر قانون، میتوان از کامنتها استفاده کرد. هر چیزی پس از نویسه "#" توسط تجزیهکننده قوانین نادیده گرفته میشود.
خطمشی اولیه (INITIAL POLICY)
با استفاده از ابزار خط فرمان usbguard و زیردستور generate-policy آن، میتوانید به جای نوشتن خطمشی از ابتدا، یک خطمشی اولیه برای سیستم خود ایجاد کنید. این ابزار برای تمام دستگاههای متصل به سیستم در زمان اجرا، یک خطمشی allow تولید میکند. این دستور گزینههای متعددی برای تنظیم خطمشی حاصل دارد؛ برای جزئیات بیشتر به usbguard(1) مراجعه کنید.
خطمشی روی خروجی استاندارد چاپ خواهد شد. بهتر است پیش از استفاده از قوانین تولیدشده در سیستم، آنها را بازبینی کنید. گردش کار معمول برای تولید یک خطمشی اولیه میتواند به این صورت باشد:
$ sudo usbguard generate-policy > rules.conf $ vi rules.conf (review/modify the rule set) $ sudo install -m 0600 -o root -g root rules.conf /etc/usbguard/rules.conf $ sudo systemctl restart usbguard
نمونه خطمشیها (EXAMPLE POLICIES)
مثالهای زیر نشان میدهند که برای پیادهسازی خطمشی دادهشده چه مواردی را در فایل rules.conf قرار دهید.
این خطمشی هر دستگاهی را که صرفاً یک دستگاه ذخیرهسازی داده نباشد، مسدود میکند. دستگاههایی که رابط صفحهکلید مخفی در یک فلشدرایو USB دارند مسدود خواهند شد. فقط دستگاههایی با یک رابط ذخیرهسازی بزرگ مجاز به تعامل با سیستمعامل خواهند بود. این خطمشی از یک قانون منفرد تشکیل شده است:
allow with-interface equals { 08:*:* }
مسدودسازی در این حالت ضمنی است زیرا ما قانون block ننوشتهایم. مسدودسازی ضمنی برای کاربران میزکار مفید است. یک اپلت میزکار که به رویدادهای USBGuard گوش میدهد، در صورت اعمال یک هدف ضمنی، میتواند از کاربر برای تصمیمگیری سوال کند.
allow 1050:0011 name "Yubico Yubikey II" serial "0001234567" via-port "1-2" hash "044b5e168d40ee0245478416caf3d998" reject via-port "1-2"
ما میتوانستیم صرفاً از هش برای مطابقت دستگاه استفاده کنیم. با این حال، استفاده از مشخصههای name و serial راهنمای مفیدی برای بازبینیهای بعدی خطمشی فراهم میکند. از سوی دیگر، هش خاصترین مقداری است که میتوانیم برای شناسایی یک دستگاه استفاده کنیم. اگر میخواهید قانونی فقط با یک دستگاه مطابقت داشته باشد، این مشخصه بهترین گزینه برای استفاده است.
یک فلشدرایو USB که رابط صفحهکلید یا شبکه را پیادهسازی میکند بسیار مشکوک است. مجموعه قوانین زیر خطمشیای را تشکیل میدهد که فلشدرایوهای USB را مجاز کرده و صراحتاً دستگاههایی با رابط اضافی و مشکوک (همانطور که قبلاً تعریف شد) را رد میکند.
allow with-interface equals { 08:*:* }
reject with-interface all-of { 08:*:* 03:00:* }
reject with-interface all-of { 08:*:* 03:01:* }
reject with-interface all-of { 08:*:* e0:*:* }
reject with-interface all-of { 08:*:* 02:*:* }
این خطمشی تمام دستگاههای فلشدرایو USB دارای رابطی از کلاسهای HID/Keyboard، Communications و Wireless را رد میکند. توجه داشته باشید که حالت مجاز پیشفرض رویکرد اشتباهی است و نباید مجموعهای از دستگاهها را رد کرده و بقیه را مجاز بگذارید. خطمشی فوق فرض میکند که مسدودسازی حالت پیشفرض است. رد کردن مجموعهای از دستگاهها که «بد» در نظر گرفته میشوند رویکرد خوبی برای محدود کردن مواجهه سیستمعامل با چنین دستگاههایی تا حد امکان است.
allow with-interface one-of { 03:00:01 03:01:01 } if !allowed-matches(with-interface one-of { 03:00:01 03:01:01 })
allow if random(0.1666) reject
همچنین ببینید (SEE ALSO)
usbguard-daemon(8), usbguard-daemon.conf(5)
اشکالات (BUGS)
اگر اشکالی در این نرمافزار پیدا کردید یا مایلید ویژگی جدیدی درخواست دهید، لطفاً یک تیکت در نشانی https://github.com/USBGuard/usbguard/issues/new ثبت کنید.
نویسنده (AUTHOR)
USBGuard در اصل توسط Daniel Kopeček نوشته شده است. افراد بسیاری در توسعه آن مشارکت داشتهاند.
منابع (RESOURCES)
وبگاه اصلی: https://usbguard.github.io
کپیرایت و تکثیر (COPYING)
مجوز GPLv2+: گنو GPL نسخه ۲ یا بالاتر http://gnu.org/licenses/gpl.html. این نرمافزار آزاد است: شما میتوانید آزادانه آن را تغییر داده و بازتوزیع کنید. در حدود مجاز قانون، هیچ ضمانتی وجود ندارد.
| 09/05/2026 |