تعیین مجوزهای دسترسی فایل در ویندوز مشابه پرمیشن فایلها در لینوکس

البته احتمالا اصطلاح پرمیشن و مقایسه با کارکرد فرمان chmod لینوکس، از نظر تخصصی در اینجا زیاد درست نباشه، چون این اصطلاح بیشتر به سیستم پرمیشن کلاسیک مثل سیستم پرمیشن فایل معروف در سیستم عاملهای بر مبنای یونیکس، مثل لینوکس، گفته میشه. اما بهرصورت بحث این هست که آیا ویندوز هم چیزی مثل سیستم پرمیشن فایل لینوکس داره و میتونیم برای فایلها بر اساس کاربران و گروههای مختلف مجوزهای دسترسی خواندن (read)، نوشتن (write)، اجرا (execute) و غیره تعیین کنیم یا نه!

جواب این سوال بله است، و باید بگم این قابلیت زمان زیادی هست که به ویندوز اضافه شده و ویندوز XP هم این قابلیت رو داره (درواقع فکر کنم از قبل تر و با بوجود آمدن سیستم فایل NTFS این امکان ایجاد شده). و چیز دیگه که باید بگم اینکه سیستم کنترل دسترسی به فایلها (و نه فقط فایلها، بلکه شامل بخشها و چیزهای دیگری هم میشه) در ویندوز از نوع جدید و پیشرفته تری نسبت به سیستم پرمیشن کلاسیک در لینوکس است و امکان تنظیمات دقیق و گسترده و منعطفی رو میده که در سیستم پرمیشن کلاسیک ممکن نیست یا شایدم در مواردی ممکنه اما با ترفند و بصورت غیرسرراست تری و دشواره. البته طرفداران لینوکس ناراحت نشن، چون سیستم عاملهای لینوکس امروزی هم مشابه همین روش جدید که بهشون ACL گفته میشه رو دارن که انواع کم و بیش مختلفی هم داره (ولی اصول و اساس همشون تقریبا مشابه است)؛ درواقع بخاطر محدودیت هایی که سیستم پرمیشن کلاسیک یونیکس داشت، سیستمهای جدیدتر بر اساس ACL هم به لینوکس اضافه شدن. حالا نمیخوام وارد جزییاتش بشم چون نیاز به تحقیق و دقت زیادی داره که حضور ذهن و وقت و حوصلش رو ندارم و هدف و محتوای اصلی این پست هم نیست.
بله ویندوز از سیستم کنترل دسترسی پیشرفته و منعطفی استفاده میکنه و البته با وجود این سیستم دیگه به سیستم پرمیشن کلاسیک مثل لینوکس هم نیازی نیست و ویندوز مشابه اون رو نداره، چون با سیستم ACL میشه تمام کارایی های سیستم پرمیشن کلاسیک یونیکس رو داشت بعلاوهء انعطاف و قابلیت تنظیم بیشتر و بدون محدودیت های سیستم پرمیشن کلاسیک.
اما نکته اینکه به احتمال زیاد اکثریت یا حداقل خیلی از کاربران ویندوز و حتی برنامه نویسان روی ویندوز، عملکرد سیستم کنترل دسترسی ویندوز رو مشاهده نکردن تاحالا و متوجهش نشدن، و بعضا حتی از وجود چنین چیزی هم اطلاعی ندارن، و حتی برای یک حرفه ای مثل منهم این مسئله تا همین اواخر که بخاطر نیاز بهش دنبال تحقیق و تستش رفتم تاحد زیادی مبهم و ناشناخته بود! (قبلا راجع بهش خونده بودم اما از جزییاتش بی خبر بودم و عملا باهاش برخورد نکرده بودم) یک دلیل مهم این مسئله بنظرم اینه که فایلها در ویندوز بطور پیشفرض قواعد دسترسی تعریف شده ای ندارن و بصورت بدون محدودیت در اختیار تمام کاربران سیستم هستن (البته شاید به استثنای یکسری بخشها و فایلهای خاص خود سیستم عامل). درحالیکه در لینوکس تمام فایلها و دایرکتوریهای ایجاد شده در موقع نصب سیستم عامل و بعدش دارای پرمیشن های تعیین شده و محدودکننده ای هستن که کاربران حتما باهاشون برخورد میکنن و برای کاربری جدی لینوکس باید حتما درموردشون بدونن و بقدر کافی آشنا بشن. اینه که سیستم کنترل دسترسی ویندوز نسبت به لینوکس خیلی ناشناخته تر مونده و در عمل هم خیلی کم استفاده میشه، باوجودی که سیستم کاملا پیشرفته و منعطفی است و میشه باهاش کنترل و امنیت خوبی ایجاد کرد. البته دلیل دیگر هم احتمالا پیچیدگی و ظرافت بیشتر این سیستم هست؛ یک سیستم پیشرفتهء قوی و منعطف و گسترده، پیچیدگی و جزییات بیشتر و یادگیری سخت تر و زمانبرتری هم داره خیلی وقتا. به همین خاطر اینطور سیستمها حتی روی لینوکس هم زیاد استفاده نمیشن (حداقل توسط کاربران معمولی) و از طرفی همون سیستم پرمیشن کلاسیک که ساده تر و شناخته شده تره برای خیلی کاربردها کفایت میکنه.
اما یک دلیل دیگر اینکه چرا ویندوز بصورت پیشفرض قواعد کنترل دسترسی روی فایلها نمیذاره بنظرم بخاطر Backward compatibility ویندوز نمیتونسته بیاد و تغییرات اساسی در این زمینه بده و بطور پیشفرض روی فایلها محدودیت های تعیین شده در دسترسی بذاره. بهرحال ویندوز همیشه اینطور شناخته شده و کار کرده و مورد استفاده بوده و هنوزم ازش انتظار میره که از نظر کاربری همونطور راحت (گرچه شاید تاحد قابل توجهی غیراصولی و ناامن) و غیرحرفه ای باشه! البته برای خیلی کاربران و کاربردها اصولا نیازی هم نیست.
پس ویندوز بصورت پیشفرض روی فایلها محدودیت دسترسی نداره، اما وقتی که کوچکترین قواعد دسترسی روی فایل یا دایرکتوری یا هر موجودیت دیگری set بشه، اون فایل تحت کنترل دسترسی بر اساس ACL قرار میگیره.
خب حالا این نیاز و تحقیق و بحث برای من از کجا پیش آمد؟ از اونجا که روی ویندوز برنامه نویسی PHP میکنم و نیاز داشتم تا عملکرد برنامم رو موقعی که یکسری فایلها پرمیشن خواندن یا نوشتن توسط برنامه رو ندارن تست کنم. برای این کار البته میشه از لینوکس یا آپلود و تست برنامه روی یک هاست لینوکس هم استفاده کرد، ولی روی سیستم لوکال که داریم کار میکنیم اگر بشه این شرایط و پرمیشن های کلی ای شبیه شرایطی که روی سرورهای لینوکس ممکنه پیش بیان رو شبیه سازی کرد خب مسلما خیلی خوبه و میتونه در وقت و انرژی خیلی صرفه جویی کنه. بخاطر همین بود که من دنبال این مطلب رفتم و راهش رو کشف کردم و بخاطر همین این مطالب رو الان به این وسیله در اختیار دیگران هم قرار میدم که بقیه هم بتونن درصورت نیاز ازش استفاده کنن.
یک برنامه ای که در ویندوز XP برای دستکاری مجوزهای دسترسی هست اسمش cacls است. این برنامه یک برنامهء خط فرمانه و اینترفیس گرافیکی درکار نیست که البته برای هدف ساده و روشن ما نیاز خاصی هم به رابط گرافیکی نداریم، ولی اگر بخواید میتونید دنبال برنامه های گرافیکی که برای کار با مجوزهای دسترسی روی ویندوز درست شدن جستجو و اونا رو دانلود و استفاده کنید. من اینجا فقط cacls رو توضیح میدم. البته به این نکته اشاره کنم که روی ویندوز ویستا و به بعد ابزاری بنام icacls وجود داره که ظاهرا جایگزینی برای cacls است چون روی ویندوز ویستا سیستم ACL گسترش پیدا کرد و مدل جدیدی (MAC) بهش اضافه شد که نیاز به دستورات و امکانات افزوده داشت. البته چون من فقط ویندوز XP دارم این ابزار رو تست نکردم و اطلاعات بیشتری ندارم متاسفانه و صرفا جهت اطلاع و سرنخ دادم که درصورت نیاز راجع بهش تحقیق و تست و استفاده کنید و سردرگم نشید.
خب یک راست بریم سر اصل مطلب و اینکه چطور برای فایلهایی که میخوایم در برنامه نویسی تست کنیم محدودیت دسترسی تعیین کنیم. درواقع این کار برای نیاز موردی و محدود ما خیلی ساده است!
یک پنجرهء خط فرمان باز کنید و این دستور رو توش اجرا کنید:
cacls error_log.php /p everyone:r
این دستور باعث میشه که به تمام کاربران سیستم (گروه everyone) فقط دسترسی خواندن (r) روی فایل error_log.php داده بشه. البته دایرکتوری جاری خط فرمان من همون دایرکتوری فایل error_log.php بوده که فقط اسم فایل رو وارد کردم، و اگر فایل در دایرکتوری دیگری باشه شما باید آدرس مسیر فایل رو هم بدید (میتونید فایل رو به پنجرهء خط فرمان بکشید و رها کنید تا آدرس کاملش بطور خودکار در محل رها شدن درج بشه).

دستور:
cacls error_log.php /p everyone:w
مجوز نوشتن رو به همه میده، و هیچ مجوز دیگری (مثلا خواندن) وجود نداره.

و اگر میخواید مجوز هیچ دسترسی ای روی اون فایل وجود نداشته باشه، این دستور رو اجرا کنید:
cacls error_log.php /p everyone:n

برای بازگرداندن دسترسی کامل برای همه به فایل هم این دستور رو اجرا کنید:
cacls error_log.php /p everyone:f

البته در هنگام اجرای این دستورات از شما درخواست تایید هم میخواد که با زدن کلید Y تایید میکنید.

برای اطلاع از مجوزهای دسترسی فایل هم این دستور رو اجرا کنید:
cacls error_log.php

راستی یک نکته اینکه ممکنه وقتی مجوز رو تغییر میدید، کدهای PHP برنامهء شما هنوز اون تغییرات رو تشخیص نده که احتمالا بخاطر کش شدن مجوزهای دسترسی برای محیط PHP است. برای رفع این مشکل، هروقت که مجوزها رو تغییر میدید، بعدش باید وب سرور (آپاچی) رو هم ریستارت کنید. البته من قبلش بجای این کار سعی کردم از تابع clearstatcache در PHP هم استفاده کنم اما جواب نداد! فعلا راه مطمئن و سرراست، ریستارت کردنه، ولی شاید بعدا یا کس دیگری راه سریعتر و راحتتری پیدا کنه. البته ریستارت کردن وب سرور اونقدر هم کار سخت و زمانبری نیست و مثلا در EasyPHP با دوتا کلیک و در یکی دو ثانیه انجام میشه که فکر کنم برای کاربرد محدود تست های خاص ما کفایت میکنه.

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

راستی بدیهی است که این دستورات فقط روی درایوهایی که با سیستم فایل NTFS فرمت شدن کار میکنن! سیستم فایل FAT32 از مجوزهای دسترسی پیشرفته پشتیبانی نمیکنه.

البته اینم بگم که درواقع شما با همون File attribute ها یا به فارسی، خصیصه های فایل، کلاسیک که از قدیم الایام روی ویندوز وجود داشتن (سیستم فایل FAT32) هم میتونید محدود کردن مجوز دسترسی نوشتنی فایل رو تست کنید (دقت کنید که با خصیصه های فایل کلاسیک فقط نوشتن رو میشه محدود کرد و نه خواندن). این کار با تعیین صفت Read only برای فایل انجام میشه که در برگهء Properties فایل میتونید براحتی پیداش کنید.

برای اینکه مطلب رو کامل کنم باید بگم که درواقع شما میتونستید مجوزهای دسترسی ACL ویندوز رو در محیط گرافیکی اون هم تغییر بدید، ولی تاجاییکه من بررسی کردم در این مورد خاص کار کردن با خط فرمان درواقع خیلی راحتتر و سریعتره! بهرحال اگر میخواید رابط گرافیکی ویندوز برای این کار رو مشاهده کنید، در ویندوز ایکس پی، در Folder options به تب View رفته و گزینهء Use simple file sharing رو که در انتهای لیست گزینه ها قرار داره غیرفعال کنید (البته اگر از قبل غیرفعال نبود). بعد وقتی Properties یک فایل یا دایرکتوری رو باز میکنید، یک تب Security بهش اضافه شده که در اون قسمت میتونید مجوزهای دسترسی فایل رو مشاهده و دستکاری کنید. البته اطلاعات این قسمت شلوغ و پیچیده است و احتمالا در وهلهء اول کاملا گیج خواهید شد (دکمهء Advanced رو هم بزنید و گزینه های اونجا رو هم ببینید و فکر کنید چه معنا و کاربردی دارن، تا بفهمید چی میگم)، بخاطر همین گفتم که استفاده از دستورات خط فرمان که ارائه دادم خیلی ساده تر و سریعتره! البته اگر قبلا دستورات خط فرمان بالا رو روی فایل مورد نظر اجرا کرده باشید، اطلاعات مجوزهای فایل که مشاهده میکنید مختصرتر و قابل فهم تر خواهد بود.

3 دیدگاه در “تعیین مجوزهای دسترسی فایل در ویندوز مشابه پرمیشن فایلها در لینوکس

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

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>