درمقایسه با سیستم عامل ویندوز و سایر سیستمهای عامل دیگر، سیستمهای یونیکس و خانواده گنو/لینوکس در طراحی قوانین دسترسی به فایل از شکلی مستحکمتر و کاراتر بهره جستهاند.
درمقایسه با سیستم عامل ویندوز و سایر سیستمهای عامل دیگر، سیستمهای یونیکس و خانواده گنو/لینوکس در طراحی قوانین دسترسی به فایل از شکلی مستحکمتر و کاراتر بهره جستهاند. در این مقاله سعی میشود تا بطور خلاصه به بیان تفاوتها و نقاط قوت آن پرداخته شود.
لینوکس: امنیت، امنیت، امنیت
امروزه در دنیایی متکی بر فناوری اطلاعات زندگی میکنیم که هر لحظه به خطر افتادن جریان اطلاعات منجر به بروز خسارتهای تجاری جبران ناپذیری خواهد شد. امروزه همه به دنبال یک سکوی (Platform) امنتر برای اجرای برنامههای کاربردی و سرویسدهندهها هستند. لینوکس حرفهای زیادی برای گفتن در سمت امنیت دارد. بسیاری از قابلیتهای امنیتی که در ویندوز وجود ندارند و یا فقط با اضافه کردن نرمافزارهای اضافی قابل دسترسی میباشند، بطور درونی و پیشگزیده در لینوکس پیادهسازی شدهاند.
لینوکس از ابتدا برای محیطهای شبکهای و چند کاربره طراحی شده است و همین باعث رعایت مسائل امنیتی از ابتدا در آن شده است، درحالی که ویندوز اینگونه نبوده و درحال حاضر نیز از نظر امنیتی دارای نقاط ضعف فراوانی است. مثلاً یک برنامهی مخرب با استفاده از همین ضعفهای امنیتی میتواند کل سیستمعامل را نابود کند، ولی در صورتی که مورد مشابهی در لینوکس وجود داشته باشد، حداکثر به دایرکتوری خانگی کاربر اجرا کننده آسیب خواهد رسید، نه کل سیستمعامل.
اینطور نیست که لینوکس فاقد هرگونه اشکال امنیتی باشد، خیر! ولی باز بودن کد منبع آن باعث میشود تا بسیاری از اشکالات امنیتی پیش از ایجاد خسارت و در مراحل توسعه و برنامهنویسی برنامه برملا شده و رفع شوند. در صورتی که اشکالی نیز در برنامههای منتشر شده یافت شود، بدلیل موجود بودن کد منبع سریعاً برطرف میگردد. در صورتی که در سیستمعامل ویندوز شما باید منتظر مایکروسافت بمانید و بمانید و بمانید. سیستمعامل ویندوز دارای اشکالات امنیتی بسیاری است که به راحتی هم کشف نمیشوند و هنگامی کشف میشوند که خسارات جبران ناپذیری در اثر حمله از طریق آن ضعفهای امنیتی رخ دهد که امثال آنرا شاهد هستیم.
میتوان ادعا کرد که تقریباً هیچ ویروسی برای لینوکس وجود ندارد و این درحالی است که سالیانه بیش از ۱۰۰۰ ویروس و کرم مختلف برای سیستمعامل ویندوز ایجاد میشود. این بخاطر عدم گسترده بودن لینوکس نیست، (حدود ۷۰ درصد از سایتهای وب در جهان بر روی سیستمعامل لینوکس و سرویسدهندهی وب آپاچی درحال اجرا هستند) بلکه بدلیل وجود حفرههای امنیتی متعدد ویندوز و سیاست انحصارگرایی مایکروسافت است. یعنی چه؟ مایکروسافت طوری رفتار و سیاستگذاری کرده است که مشتریان خود را تنها به محصولات خودش عادت دهد. بسیاری از کاربران ویندوز از اینترنت اکسپلورر و آتلوک برای مرور وب و پست الکترونیک استفاده میکنند. من به عنوان یک ویروسنویس، میدانم که اگر ویروسی را برای کاربران ویندوز بنویسم، بر روی کامپیوترهای ۹۰ درصد آنها اثر خواهد کرد. چون اکثراً از IE و Outlook استفاده میکنند. ولی در لینوکس چطور؟ در لینوکس شما طیف وسیعی از انتخاب و عدم اجبار دارید. من از مرورگر موزیلا استفاده میکنم. دوستی دارم که Konqueror را ترجیح میدهد. دیگری از Opera استفاده میکند. من از Kmail استفاده میکنم. دوستم از Evolution، دیگری از Pine و بعدی از Mutt و برادرم هم از Mozilla Mail. من فقط میتوانم برای یکی از اینها ویروس بنویسم چون روی بقیه کار نخواهد کرد و عملاً میزان اثر آن اندک خواهد بود. ضمناً هیچیک از ویروسهایی که برای ویندوز نوشته شدهاند، بر روی لینوکس کار نمیکنند.
اولین و برجستهترین تفاوت در اینجاست که سیستمهای مبتنی بر یونیکس به معنای کاملاً واقعی سیستمهائی چند کاربره هستند و برای هرفایل به تنهائی یا یک دایرکتوری میتوان سطوح دسترسی کاربران و گروههای کاربری تعریف کرد و هر کاربر بصورت پیشفرض دارای یک محدوده امن اطلاعاتی از فایلهای شخصی خانگی است.
چیزی که در اینجا دربارهی کاربران و گروه های کاربری لازم به ذکر است این است که هر کاربر در سیستم یونیکس یک دایرکتوری شخصی به نام home خواهد داشت که کلیه اختیارات دسترسی فایل در آن برای او مجاز بوده و میتواند در آن به ایجاد و حذف فایل یا عملیات دیگر بپردازد و هیچیک از کاربران یا گروههای دیگر بجز کاربر ریشه root در حالت عادی و بدون اجازه او نخواهند توانست به اطلاعات او دسترسی یابند. (نکته مهم امنیتی)
در سیستمهای مبتنی بر یونیکس مثل لینوکس هر کاربری که مالک یا ایجادکنندهی یک فایل یا دایرکتوری باشد خواهد توانست با تعین سطوح دسترسی فایل یا دایرکتوری مربوطه برای دیگر کاربران یا گروههای کاربری آنان را از امکان خواندن و ایجاد تغییر و یا اجرای فایل اجرائی محروم یا بهرهمند سازد.
بدیهی است که مجوزهای تعریف شده برای یک گروه کاربری بر روی تمام اعضای آن گروه اعمال شده و هر کاربر عضو آن گروه از تمام مزایا یا محدودیتهای موصوف بهرهمند خواهدشد.
بطور کلی سه سطح دسترسی برای هر فایل یا دایرکتوری تعریف میشود که عبارتست از:
1 - Read permission (r) یا مجوز خواندن: مجوز خواندن محتوای یک فایل را به یک کاربر میدهد و برای دایرکتوریها امکان لیست کردن محتویات داخل دایرکتوری را برای کاربر فراهم میسازد.
2 - Write permission (w) یا مجوز ایجاد تغییرات: امکان ایجاد تغییرات در محتوای فایلها را به کاربر اهدا میکند. برای دایرکتوریها این گرینه امکان ایجاد فایل جدید در دایرکتوری یا حذف فایلهای موجود در آن را برای کاربر مهیا میسازد حتی اگر این کاربر یا گروه کاربری مالک یا ایجادکنندهی اصلی فایل یا دایرکتوری نباشد.
3 - eXecute permission (x) یا مجوز اجرا: این مجوز در مورد فایلهای اجرائی امکان اجرای فایل را به یک کاربر میدهد و در مورد یک دایرکتوری این گزینه امکان ورود به داخل دایرکتوری را به کاربر یا گروه خاص میدهد. توجه داشته باشید که این گزینه را با گزینه Read اشتباه نگیرید، چون صرفاً با داشتن مجوز execute و بدون داشتن مجوز read کاربر یا گروه میتواند وارد دایرکتوری خاصی شوند ولی امکان خواندن محتویات داخلی آن دایرکتوری بهیچ عنوان برایشان فراهم نخواهد بود.
همیشه ترکیبی از سطوح سهگانه مجوزهای فوقالذکر قابل استفاده است؛ برای مثال شما در صورت مالکیت یک فایل میتوانید دسترسی به آنرا صرفاً برای شخص خود تعریف و سایر کاربران و گروهها را ازدیدن یا اجرا و ایجاد تغییر در آن محدود نمائید.
نکته: یک کاربر حتی میتواند یک فایل یا دایرکتوری را که مالک و ایجاد کنندهی اصلی آن خود اوست برای کاربران دیگر قابل دسترسی و برای خودش غیر قابل دسترسی تعریف کند که به این صورت حتی خودش از کلیه مزایای فایل مربوطه محروم خواهد شد و در آینده هم قادر نخواهد بود تا با ایجاد تغییر مجدداً به آن فایل یا دایرکتوری دسترسی پیدا کند. در اینجاست که مدیر سیستم یا کاربر ریشه root تنها کسی خواهد بود که بصورت پیشگزیده با داشتن کلیهی مجوزهای لازم، شامل خواندن و نوشتن و اجرا، امکان تغییر مالکیت و سطوح دسترسی کاربران و گروهها را داشته و میتواند تغییرات لازم را در سیستم اعمال نماید.
ذکر این نکتهی بسیار مهم خالی از لطف نیست که حفظ و حراست از اطلاعات حیاتی سیستم مثل کلمهی عبور کاربر ریشه یکی از مهمترین جنبههای امنیت سیستمهای مبتنی بر یونیکس میباشد.
بیائید تا باذکر یک مثال در مورد یک فایل و یک دایرکتوری به بررسی موضوع بپردازیم:
در این مثال فرض شده که در مسیر جاری یک فایل به نام a_file و یک دایرکتوری به نام a_directory وجود دارد و با اجرای فرمان ls –l در خط فرمان این اطلاعات بدست آمده است:
$ ls -l
total 1
-rw-r----- 1 mehrdad users 0 Jul 8
drwxr-xr-- 2 mohsen users 1024 Jul 8
نتایج فرمان ls –l را ازچپ به راست بررسی میکنیم:
ستون اول فرمانls –l :
1 - ده کاراکتر اول نشاندهندهی نوع فایل و سطوح دسترسی آن است و اولین کاراکتر که در مورد سطر اول ( - ) و در مورد سطر دوم ( d ) میباشد، نشان میدهد که مورد موجود در سطر اول یک فایل معمولی و مورد موجود در سطر دوم یک دایرکتوری است.
البته انواع دیگری از فایل وجود دارد که با کاراکتری غیر از ( - ) مشخص میگردند و برای مطالعهی بیشتر میتوانید به مراجع موجود مراجعه کنید. نه کاراکتر بعدی نشاندهندهی سطوح دسترسی تعریف شده میباشند و به ترتیب هر سه کاراکتر از چپ به راست شامل سطوح دسترسی متعلق به مالک، owner، و سطوح دسترسی گروهها، groups، و سطوح دسترسی برای سایرین،others، خواهد بود.
به عنوان نمونه سه کاراکتر مربوط به owner و groups و others در مورد یک فایل موجود در مثال بالابصورت زیر تعریف شده است:
برای مالک: r w -) = owner)، یعنی اینکه امکان خواندن r و نوشتن w و اجراکردنx وجود دارد.
برای گروهها: (r - -) = group یعنی اینکه امکان خواندن فایل برای کاربران عضو کلیه گروههای کاربری موجود وجود دارد ولی هیچ کابری در گروههای موجود نمیتواند فایل را تغییر داده (یا حذف کند) و یا در صورت اجرائی بودن فایل آنرا اجرا نماید.
برای دیگران: others = ( - - - ) سه کاراکتر dash به این معناست که سایر کاربران یعنی آنهائی که در هیچ گروه کاربری موجود تعریف نشدهاند هیچیک از امکانات دسترسی موجود را نخواهند داشت. (نکته امنیتی مهم)
ستون دوم در فرمان ls -l:
شامل یک شمارهی لینک میباشد و از این شماره برای تشخیص لینک به یک فایل موجود در چند نقطه سیستم استفاده میشود. در مورد دایرکتوریها این شماره معانی زیاد دیگری دارد که در اینجا مجال پرداختن به همه آنها نخواهد بود.
ستون سوم در فرمان ls -l:
این ستون نمایشدهندهی نام مالک فایل و نام گروه مالک آن میباشد.
ستون چهارم در فرمان ls -l:
این ستون نمایشدهندهی اندازه و حجم فایل یا دایرکتوری و تاریخ و ساعت آخرین تغییرات اعمالشده بر آن و در نهایت ستون پنجم نتایج فرمان ls -l شامل نام فایل یا دایرکتوری میباشد.
نکته: بدیهی است که (rwx ) به معنای تعریف حداکثر سطح دسترسی برای کاربر یا گروههای کاربری است و ( - - - ) به معنای عدم امکان دسترسی به فایل یا دایرکتوری میباشد.
چند نکتهی مهم در مورد یونیکس و لینوکس:
اسامی فایلها در یونیکس و لینوکس میتوانند شامل هر نوع کاراکتری حتی کاراکترهای ascii بجز صفر و / باشند.
همانطوریکه میدانید در سیستمهای مبتنی بر یونیکس بر خلاف ویندوز هر فایل حتماً نیاز به داشتن پسوند سه حرفی مشخص کننده نوع فایل ندارد و قابلیتها و نوع فایلهای بدون پسوند یا extension کاملاً وابسته به محتویات فایل است و نه به پسوند آن. بدیهی است که کاراکتر ( . ) جداکنندهی نام فایل و پسوند آن در ویندوز در محیط یونیکس و گنو/لینوکس یک کاراکتر از کاراکترهای تشکیلدهندهی نام فایل محسوب میگردد. و نکته ظریف اینجاست که در سیستمهای مبتنی بر یونیکس کلیهی فایلها و دایرکتوریهائی که با کاراکتر نقطه یا دات ( . ) آغاز گردند فایلها یا دایرکتوریهای پنهان hidden محسوب میگردند.
توجه داشته باشید که چون برخی برنامههای گرافیکی مثلاً برنامه openoffice کماکان از پسوند نام فایل برای ذخیرهسازی و تشخیص نوع فایل بهره میبرند گاهی لازم است پسوند فایلهای ایجاد شده توسط این برنامههای کاربردی حفظ گردد تا برنامه موصوف در شناسائی نوع فایل دچار مشکل نشود.
نتیجهگیری کلی
شما حتی بایک نگاه گذرا به مقاله حاضر در مورد سیستم تعین سطوح امنیتی فایل در یونیکس و لینوکس و مقایسه آن با سیستمعامل ویندوز در خواهیدیافت که وقتی صحبت از امنیت سیستمهای لینوکس به میان میآید منظور چیست؟ چرا که در یک سیستم مبتنی بر یونیکس حتی برای یک فایل به تنهائی امکان تعیین سطوح دسترسی و امنیتی وجود دارد ولی در سیستمعامل ویندوز حداکثر امکان موجود تعیین این سطوح دسترسی در سیستم فایل ntfs فقط برای دایرکتوریها (و نه برای تکتک فایلها) میباشد.
منبع:
http://kavoshgar.blogsky.com/
http://www.technotux.com/
اگر شما هم خود را در جمع کاربران لینوکس می بینید و میخواهید این سیستم عامل قدرتمند را در کنار ویندوز تجربه نمائید بدلیل مشکلاتی که ممکن است در کارائی ویندوز در حین مراحل کار پیش آید بالاخره روزی برای شما فراخواهد رسید که مجبور به نصب مجدد ویندوز برروی سیستم خود خواهید شد و خواهید دید که بعد از نصب مجدد ویندوز به لحاظ رونویسی شدن قسمت MBR یا مستر بوت رکورد هاد دیسک با اطلاعات سیستم بوت ویندوز برنامه بوت لودر لینوکس (grub یا Lilo)از کار افتاده و سیستم فقط بطور مستقیم برروی ویندوز بوت میشود و بهیج وجه نمی توان به لینوکس دست یافت.
در اینگونه موارد چه باید کرد ؟
آیا باید لینوکس را هم دوباره نصب کنیم و زحمت چند ساعت نصب تعدادی سیستم عامل را در کنارهم بعد از ازکارافتادن یکی از آنها بر خود هموار نمائیم .
مسلما پاسخ به این سئوال منفی است . در اینجا یکی از روشهائی را بیان میکنم که با نصب مجدد برنامه بوت لودر پیش گزیده لینوکس ردهت یعنی GRUB همه چیز به وضعیت عادی بازمیگردد و نیاز به نصب مجدد لینوکس به کلی منتفی میگردد .
برای اینکار پس از نصب مجدد ویندوز کامپیوتر را با دیسکت بوت مخصوص لینوکس یا سی دی اول لینوکس رد هت بوت نمائید .
در پنجره اول بوت دکمه F5 را فشرده و وارد وضعیت rescue mode میشویم .
در پنجره به نمایش در آمده با تایپ linux rescue در خط فرمان به وضعیت rescue یا نجات بوت میکنیم و به سئوالاتی که سیستم در مورد سخت افزار یا درایو محتوی image فایل لینوکس پاسخ داده و به رابط خط فرمان یا همان shell دست پیدا میکنیم .
از اینجا به بعد میبایست دستورات زیررا ابتدا برای مشاهده سیستم فایل ها در لینوکس و سپس برای نصب مجدد بوت لودر گراب به ترتیب تایپ کنیم :
chroot /mnt/sysimage
grub –install /dev/hda
با این فرمان بوت لودر GRUB بر روی نخستین پارتیشن هاد دیسک شما مجددا نصب شده و با خروج از خط فرمان متنی و تایپ دستور exit سیستم مجددا راه اندازی شده و با کمال خوشبختی میبینیم که بوت لودر گراب بطورت کاملا صحیح نصب شده و در ابتدای روند بوت مثل قبل از شما در مورد انتخاب سیستم عامل لینوکس یا ویندوز سئوال میکند و با انتخاب هر یک از سیستمهای عامل براحتی با آن بوت میشود .
لازم به یادآوری است که این توضیحات برای کسانی کاربرد دارد که قبل از نصب مجدد ویندوز برروی سیستم خود لینوکس ردهت را با بوت لودر پیش گزیده گراب در کنار ویندوز نصب کرده و بدون مشکل با آن کار میکرده اند و فقط اطلاعات مربوط به master boot record سیستم آنان نیاز به بازیابی دارد .
البته در سایر توزیعهای لینوکس مثل زوزه suse و ماندریک Mandrake هم که ممکن است از بوت لودر پیش گزیده بنام Lilo یا لینوکس لودر استفاده کرده باشند هنگام بوت با سی دی اول این سیستمها گزینه هائی برای نصب مجدد Lilo در اختیار کاربران قرار دارد که با انتخاب گزینه مناسب میتوان به سادگی و در کمترین زمان ممکن با نصب مجدد بوت لودر مربوطه مشکل سیستم را حل نمود .
تمرکز ما بیشتر بر اجرای لینوکس روی یک ایستگاه کاری شخصی یا یک سرویس دهنده اینترانت کوچک میباشد. لازم به تاکید نیست که برای استفاده از تمامی ویژگیهای لینوکس به یک کامپیوتر شخصی قوی تر نیاز دارید.
لینوکس برای اجرای وظایف بیشتر ، در مقایسه با یک سیستم متوسط ویندوز 98 یا ویندوز 2000 به منابع سختافزاری کمتری نیاز دارد. بعنوان مثال یک ایستگاه کاری عملیاتی میتواند با یک کامپیوتر 486 با 16 مگابایت حافظه راهاندازی شود. این سیستم میتواند X Windows (برای واسط گرافیکی کاربر) را اجرا کرده ، به اینترنت وصل شود ، یک نمایشگر وب گرافیکی را اجرا کند و با تمامی این مزایا یک سرویس دهنده کم هزینه روی شبکه باشد. با وجود این برای ظهور تمامی قابلیتهای لینوکس کاربر به یک کامپیوتر قوی تر با مشخصات زیر نیاز دارد:
• یک پردازنده از گروه پنتیوم : حتی یک پنتیوم 133 مناسب میباشد. بهتراست از پردازندههای مشابه نظیر Cyrix 686 بدلیل بروز مشکلات گزارش شده توسط کاربران استفاده نکنید. اگر میخواهید سیستم جدیدی بخرید با توجه به نیاز خود یک کامپیوتر با پردازندهای از گروه پنتیوم 3 یا 4 و سلرون یا ایتانیوم خریداری کنید.
• 32 مگابایت حافظه : لینوکس بطور استثناء از حافظه اضافی بهترین استفاده را میبرد. 32 مگابایت برای یک ایستگاه کاری متوسط مناسب میباشد ولی اگر 64 مگابایت یا بیشتر حافظه داشته باشید تفاوت قابل ملاحظهای را در کارآیی سیستم کاری مشاهده میکنید.
• 2 گیگابایت هارد دیسک : شما میتوانید با 1 گیگابایت (حتی کمتر) هم لینوکس را نصب کنید ولی هادر دیسک بزرگتر مناسب تر میباشد. هارد دیسکهای بزرگتر کارآیی و سرعت بیشتری دارند. در بعضی موارد اگر فضای کمتر از2 گیگابایت داشته باشید نمیتوانید از بعضی از قابلیتهای لینوکس استفاده کنید.
• یک کارت گرافیکی مناسب که از نظر سختافزاری پشتیبانی شود.
با سیستمی شبیه این شما زمینه مناسبی برای لینوکس فراهم کردهاید و میتوانید از تمامی قابلیتهای آن در کامپیوتر شخصی خود استفاده کنید.
SHELL : برنامه ایست که کار مدیریت را انجام می دهد و مانند یک لایه عمل می کند.
وقتی که کاربر به سیستم login می کند سیستم عامل یک shell را صدا می زند تا با آن با کاربر ارتباط برقرار کند.
هر ماشین دارای shell های متفاوتی است که پر کاربردترین آن bash می باشد. وقتی که کاربر commandی را وارد می کند shell عمل تجزیه و تحلیل را برای آن دستور انجام می دهد. در ضمن shell دستور را به حافظه می برد و خط فرمان آن را آنالیز می کند.
در ضمن وقتی که دو ماشین کاملا یکسان داشته باشیم shell های آنها با هم برابر نیست. چون امکان دارد یکی از کاربرها یک متغیر بیشتر تعریف کرده باشد و چون shell متغیرها را به حافظه می برد و فضائی از آن را اشغال می کند پسshell آنها با هم هماندازه نیست.
Shell همچنین دارای امکانات زیادی از جمله کاراکترهای جانشین (){}؟* می باشد.
یک shell درلینوکس مانند command.com درمحصولات Microsoft می باشد.ولی یک تفاوت ( یا بهتر یک مزیت) را دارد و آن اینکه مثلا وقتی در dos فرمانی صادر می کنیم،وظیفه تحلیل و آنالیز پارامترهای خط فرمان به عهده خود فرمان می باشد. ولی در لینوکس وقتی دستوری را وارد می کنیم shell عمل تجزیه و تحلیل پارامترهای خط فرمان را انجام میدهد، یعنی shell اول آنالیز می کند،سپس به سراغ command می رود
توجه کنید که شل قسمتی از کرنل لینوکس نمی باشد و یکی از راهها برای اجرای دستورات و ایجاد فایلها می باشد. شل برنامه ای است که دستورات کاربر را دریافت و آن را اجرا می کند. برنامه های مختلفی وجود دارند که به عنوان شل استفاده می شوند.