systemd-homed را برای مدیریت دایرکتوری های خانگی قابل حمل معرفی کرد

لنارت پوترینگ معرفی شده (PDF) در کنفرانس All Systems Go 2019، یک جزء جدید از سیستم مدیریت سیستم - systemd-homed، با هدف ایجاد دایرکتوری های خانگی کاربر قابل حمل و جدا از تنظیمات سیستم است. ایده اصلی پروژه ایجاد محیط های خودکفا برای داده های کاربر است که می تواند بین سیستم های مختلف بدون نگرانی در مورد همگام سازی شناسه و محرمانگی منتقل شود.

محیط دایرکتوری خانه به شکل یک فایل تصویری نصب شده است که داده ها در آن رمزگذاری شده اند. اعتبار کاربر به جای تنظیمات سیستم - به جای /etc/passwd و /etc/shadow به فهرست اصلی گره خورده است. نمایه در قالب JSON، ذخیره شده در فهرست ~/.identity. نمایه شامل پارامترهای لازم برای کار کاربر، از جمله اطلاعات در مورد نام، هش رمز عبور، کلیدهای رمزگذاری، سهمیه ها و منابع اختصاص داده شده است. نمایه را می توان با امضای دیجیتال ذخیره شده در یک توکن خارجی Yubikey تأیید کرد.

پارامترها همچنین ممکن است شامل اطلاعات اضافی مانند کلیدهای SSH، داده‌های احراز هویت بیومتریک، تصویر، ایمیل، آدرس، منطقه زمانی، زبان، محدودیت‌های فرآیند و حافظه، پرچم‌های نصب اضافی (nodev، noexec، nosuid)، اطلاعات مربوط به سرورهای IMAP/SMTP کاربر استفاده‌شده باشند. ، اطلاعاتی در مورد فعال کردن کنترل های والدین، گزینه های پشتیبان گیری و غیره. یک API برای درخواست و تجزیه پارامترها ارائه شده است وارلینک.

تخصیص و پردازش UID/GID به صورت پویا در هر سیستم محلی که فهرست اصلی به آن متصل است انجام می شود. با استفاده از سیستم پیشنهادی، کاربر می تواند دایرکتوری خانه خود را برای مثال در یک فلش درایو نزد خود نگه دارد و بدون ایجاد صراحتاً حساب کاربری روی آن، یک محیط کاری بر روی هر کامپیوتری دریافت کند (وجود یک فایل با تصویر فهرست اصلی منجر به سنتز کاربر می شود).

پیشنهاد شده است که از زیرسیستم LUKS2 برای رمزگذاری داده ها استفاده شود، اما systemd-homed همچنین امکان استفاده از پشتیبان های دیگر را نیز فراهم می کند، به عنوان مثال، برای دایرکتوری های رمزگذاری نشده، Btrfs، Fscrypt و پارتیشن های شبکه CIFS. برای مدیریت دایرکتوری های قابل حمل، ابزار homectl پیشنهاد شده است که به شما امکان می دهد تصاویر دایرکتوری های خانگی را ایجاد و فعال کنید و همچنین اندازه آنها را تغییر دهید و رمز عبور تعیین کنید.

در سطح سیستم، کار با اجزای زیر تضمین می شود:

  • systemd-homed.service - دایرکتوری اصلی را مدیریت می کند و سوابق JSON را مستقیماً در تصاویر فهرست اصلی جاسازی می کند.
  • pam_systemd - هنگامی که کاربر وارد سیستم می شود، پارامترها را از نمایه JSON پردازش می کند و آنها را در زمینه جلسه فعال شده اعمال می کند (احراز هویت را انجام می دهد، متغیرهای محیط را پیکربندی می کند و غیره).
  • systemd-logind.service - هنگام ورود کاربر، پارامترهای نمایه JSON را پردازش می کند، تنظیمات مدیریت منابع مختلف را اعمال می کند و محدودیت هایی را تعیین می کند.
  • nss-systemd - ماژول NSS برای glibc، سوابق کلاسیک NSS را بر اساس نمایه JSON ترکیب می‌کند و سازگاری رو به عقب با API UNIX برای پردازش کاربر (/etc/password) فراهم می‌کند.
  • PID 1 - کاربران را به صورت پویا ایجاد می کند (با استفاده از دستورالعمل DynamicUser در واحدها با قیاس ترکیب می شوند) و آنها را برای بقیه سیستم قابل مشاهده می کند.
  • systemd-userdbd.service - حساب‌های UNIX/glibc NSS را به رکوردهای JSON ترجمه می‌کند و یک Varlink API یکپارچه برای پرس و جو و تکرار روی رکوردها ارائه می‌کند.

مزایای سیستم پیشنهادی شامل توانایی مدیریت کاربران هنگام نصب دایرکتوری /etc در حالت فقط خواندنی، عدم نیاز به همگام سازی شناسه ها (UID/GID) بین سیستم ها، استقلال کاربر از یک کامپیوتر خاص، مسدود کردن داده های کاربر است. در حالت خواب، استفاده از روش های رمزگذاری و احراز هویت مدرن. Systemd-homed برنامه ریزی شده است که در نسخه 244 یا 245 در جریان اصلی systemd قرار گیرد.

نمونه پروفایل کاربری JSON:

"autoLogin": درست است،
"الزام آور" : {
«15e19cd24e004b949ddaac60c74aa165» : {
"fileSystemType" : "ext4"
«fileSystemUUID» : «758e88c8-5851-4a2a-b98f-e7474279c111»,
"gid": 60232،
"homeDirectory" : "/home/test"،
"imagePath" : "/home/test.home"،
"luksCipher" : "aes"،
"luksCipherMode" : "xts-plain64"،
«luksUUID» : «e63581ba-79fa-4226-b9de-1888393f7573»,
"luksVolumeKeySize" : 32،
«partitionUUID» : «41f9ce04-c927-4b74-a981-c669f93eb4dc»,
"ذخیره" : "لوکس"،
"uid" : 60233
}
},
"وضعیت" : "منظم"،
"enforcePasswordPolicy": نادرست،
"lastChangeUSec" : 1565951024279735،
"عضو" : [
"چرخ"
],
"ممتاز" : {
"hashedPassword" : [
«$6$WHBKvAFFT9jKPA4k$OPY4D5…/»
] }،
"امضا" : [
{
"data" : "LU/HeVrPZSzi3M3J...==",
"key" : "——BEGIN PUBLIC KEY——\nMCowBQADK2VwAy…=\n——END PUBLIC KEY——\n"
}
],
"username" : "test",
"وضعیت" : {
«15e19cf24e004b949dfaac60c74aa165» : {
"goodAuthenticationCounter": 16،
"lastGoodAuthenticationUSec" : 1566309343044322،
"rateLimitBeginUSec" : 1566309342341723،
"rateLimitCount" : 1،
"وضعیت": "غیرفعال"،
"service" : "io.systemd.Home"،
"DiskSize" : 161218667776،
"DiskCeiling": 191371729408،
"DiskFloor": 5242780،
"signedLocally" : درست است
}
}

منبع: opennet.ru

اضافه کردن نظر