4.1.2. نمایش در سیستمفایلهای سیستمعامل
مدل دادهی شیء سیستمفایل در نیکس بسیار مینیمال است. تمامی اجزا و بخشهای مختلف دیگر واسطهای سیستمفایل در دنیای واقعی، مانند صفات توسعهیافتهی فایل، عمدتاً نادیده گرفته میشوند تا سطح تماس واسط ما کاهش یابد و مسائل مربوط به بازتولیدپذیری که با یک واسط بزرگتر همراه هستند، کمتر شوند. از دیدگاه توسعهدهندگان نیکس، انواعی از کارهای دستهای ساده و با دانهبندی ریزتر (معمولاً ساخت نرمافزار) که نیکس در آنها تخصص دارد، بهاندازهای از این پیچیدگی اضافی سود نمیبرند که هزینههای پشتیبانی از آن توجیهپذیر باشد.
اما برای اینکه اشیاء سیستمفایل واقعاً توسط نرمافزار مورد استفاده قرار گیرند، باید از طریق سیستمفایل سیستمعامل در دسترس قرار بگیرند. این کار گاهی «متصل کردن» (mounting) یا «در معرض نمایش گذاشتن» شیء سیستمفایل نامیده میشود، البته توجه داشته باشید که این کار ممکن است با مکانیزمی که سیستمعامل آن را «mount کردن» مینامد پیادهسازی شود یا نشود.
عادیسازی فراداده (Metadata normalization)
سیستمفایلها معمولاً حاوی فرادادهی دیگری هستند که خارج از مدل دادهی نیکس قرار دارد. برای جلوگیری از اینکه این فرادادهی دیگر به یک کانال جانبی (side channel) و منبعی برای عدمقطعیت تبدیل شود، نیکس دقت میکند که آنها را به مقادیر ثابتی عادیسازی کند. به عنوان مثال، در یونیکس، عادیسازی فرادادهی زیر رخ میدهد:
زمانسنجهای ایجاد و آخرین تغییر روی تمامی فایلها روی زمان مبدأ یونیکس (Unix Epoch) یعنی ثانیهٔ ۱ تنظیم میشوند (00:00:01 1/1/1970 به وقت UTC).
گروه روی گروه پیشفرض تنظیم میشود.
حالت (Mode) یونیکس فایل روی 0444 یا 0555 تنظیم میشود (یعنی فقطخواندنی، با این تفاوت که اگر فایل در ابتدا قابلاجرا بوده، مجوز اجرا فعال است).
هرگونه بیتهای احتمالی
setuidوsetgidپاک میشوند.نکته
برنامههای دارای
setuidوsetgidدر حال حاضر توسط نیکس پشتیبانی نمیشوند. این مجوزهای خاص سیستمفایل به طور کلی یک نقطهضعف امنیتی خطرناک هستند و با توجه به دادههایی که متعلق به کاربران مختلف در انبارهای مختلف هستند، کپی کردن اشیاء انبار بین انبارها میتواند خطرساز باشد.این محدودیت در عمل چندان دستوپاگیر نبوده است. به عنوان مثال، NixOS از برنامههای موسوم به پوششهای setuid (setuid-wrappers) که خارج از انبار قرار دارند، استفاده میکند.
توضیح
همانطور که پیشتر بحث شد، نیکس اساساً مدل دادهی شیء سیستمفایل خود را با ابزارهای دیگری مانند Git به اشتراک میگذارد. اما آن ابزارها تمایل دارند این فراداده را در هر دو جهت نادیده بگیرند --- هنگام خواندن فایلها مانند نیکس عمل میکنند، اما هنگام نوشتن فایلها، زمانسنجها به صورت طبیعی تنظیم میشوند و کاربر آزاد است هرگونه مجوز خاص دیگری (
setuid،setgid، sticky و غیره) را به دلخواه خود تنظیم کند. بنابراین، عادیسازی و نه صرفاً نادیده گرفتن این فراداده، چیزی است که نیکس را از این ابزارهای دیگر بیشتر متمایز میکند تا خود مدل دادهی شیء سیستمفایل.رویکرد نیکس با هدف ساخت قطعی هدایت میشود. در حالی که Git میتواند فرض کند که انسانهای در حال اجرای دستورات، زمانسنجها و غیره را در صورت لزوم نادیده خواهند گرفت و درک میکنند که آنها محلی و زودگذر هستند، نیکس قصد دارد نرمافزاری را اجرا کند که لزوماً با در نظر گرفتن نیکس طراحی نشده است و از هرگونه ایزولهسازی/مجازیسازی که در جریان است، بیخبر میباشد.
nix.dev/manual/nix/stable/store/file-system-object/os-file-system.html