یکی ازموارد امنیت، در سیستم عامل لینوکس، تعریف سطوح دسترسی کاربران، به فایل ها میباشد. برای دسترسی به هر فایل، سه گروه از کاربران، با سطوح دسترسی مجزا، وجود دارند: گروه اول، ایجاد کننده یا Owner، گروه دوم گروهی(Group) است که که، آن فایل متعلق به آن گروه میباشد. و گروه سوم، سایر کاربران میباشند. برای هر کدام از این سه گروه، سه سطح دسترسی خواندن، نوشتن و اجرا وجود دارد. به این مجوزها، سطوح دسترسی permission، یا پرمیشن نیز میگویند. برای بررسی سطوح دسترسی فایل ها در لینوکس با ما همرا باشید.
انواع فایل ها در لینوکس
در سیستم عامل لینوکس، همه چیز، حتی تجهیزات سختافزاری، به صورت فایل در نظر گرفته میشود و کار کردن با سخت افزار شبیه کار کردن با یک فایل است. وقتی اطلاعاتی را در یک فایل سختافزاری مینویسیم، در اصل آن را، به ورودی دستگاه میدهیم. وقتی اطلاعاتی را از یک دستگاه میخوانیم، یعنی اطلاعات خروجی، توسط دستگاه را میخوانیم. در فایل سیستم لینوکس، دایرکتوریها نیز، مانند فایل هستند، که لیست فایلها را در خود ذخیره ساختهاند.
رایجترین فایلها در لینوکس، همان فایلهای عادی است که به آنها Regular Files میگویند. فایلهای عادی ازقبیل فایلهای متنی، تصویر، فیلم و فایلهای اجرایی میباشند. انواع دیگر فایلها در لینوکس به شرح زیر میباشند.
- دایرکتوریها: دایرکتوری یا فولدر در لینوکس، مانند یک فایل در نظر گرفته میشود که لیستی از فایلهای دیگر را در خود ذخیره می سازد.
- فایلهای ویژه: این نوع فایلها برای تجهیزات سختافزاری که دارای ورودی و خروجی میباشند، به کار میرود. بیشتر فایلهای ویژه در dev/ قرار دارند.
- لینکها : مکانیزمی است که میتوان یک فایل را در مسیرهای مختلف مشاهده نمود، بدون اینکه آن فایل را به آن مسیرها کپی کرد.
مشاهدی سطوح دسترسی فایل ها در لینوکس
با دستور ls -l میتوانید لیست فایلها بههمراه پرمیشنهای آنها ملاحظه نمایید. در شکل زیر از دایرکتوری Home یک کار بر با دستور ls -l لیست گرفته شده است:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
kazemian@upgradeit:~$ ls -l total 40 drwxr-xr-x 2 kazemian kazemian 4096 Aug 23 17:02 Desktop -rw-rw-r-- 1 kazemian kazemian 1724 Aug 31 21:51 Diagram1.dia.autosave -rw-rw-r-- 1 kazemian kazemian 928 Sep 7 08:42 Diagram2.dia.autosave drwxr-xr-x 2 kazemian kazemian 4096 Aug 31 22:08 Documents drwxr-xr-x 3 kazemian kazemian 4096 Aug 26 12:05 Downloads drwxr-xr-x 2 kazemian kazemian 4096 Aug 23 17:02 Music drwxr-xr-x 2 kazemian kazemian 4096 Aug 23 17:49 Pictures drwxr-xr-x 2 kazemian kazemian 4096 Aug 23 17:02 Public drwxr-xr-x 2 kazemian kazemian 4096 Aug 23 17:02 Templates -rw-rw---- 1 kazemian kazemian 0 Oct 4 19:15 test drwxr-xr-x 2 kazemian kazemian 4096 Aug 23 17:02 Videos kazemian@upgradeit:~$ |
همانطور که مشاهده مینمایید، در لینوکس برای هر فایل یا دایرکتوری، سه سطح دسترسی برای امنیت وجود دارد. r برای اجازهی خواندن، w اجازه نوشتن و x مجوز اجرا برای هر فایل میباشد. این سه مجوز برای مالک فایل، گروه و کاربران دیگر قابل تعریف میباشد.
در شکل بالا 9 مجوز را برای هر فایل و یا دایرکتوری مشاهده میکنید. که از سمت چپ، سه پرمیشن اول برای مالک با ایجادکنندهی فایل، سه پرمیشن دوم، برای گروهی از کاربران که به فایل ارتباط داده شده و سه پرمیشن سوم مربوط به کاربران دیگر است.
در ابتدای مشخصات فایل، نوع فایل را میبینیم. در صورتی که در ابتدای مشخصات هر فایل، خط تیره، یا – ، را دیدیم، یعنی این فایل، یک فایل عادی است. در صورتیکه حرف d را مشاهده کردید، یعنی این یک دایرکتوری است و حرف l یعنی ای فایل از نوع لینک میباشد. فایلهای لینک شبیه Shortcutها در سیستم عامل ویندوز هستند.
کدهای سطح دسترسی
مجوزها یا پرمیشنهای دسترسی به فایل را، به صورت کد نیز، نمایش میدهند. این کدها بشرح زیر میباشند.
0 یا – | در این حالت دارای هیچ مجوز دسترسی نمیباشد. |
4 یا r | مجوز خواندن فایل |
2 یا w | مجوز نوشتن و تغییر فایل |
x یا 1 | مجوز اجرای فایل یا مرور دایرکتوری |
مثلا اگر کاربری دارای مجوز با کد 4 باشد، به معنی این است که، دارای مجوز خواندن فایل است. و اگر دارای مجوز با کد 2 باشد به معنی، مجوز نوشتن و تغییر فایل میباشد. حال اگر دارای مجوز 6، باشد، به معنی این است که دارای مجوز 2+4 یعنی مجوز خواندن و نوشتن است. مجوز با کد 7 به معنی دسترسی کامل با پرمیشن خواندن و نوشتن و اجرای یک فایل میباشد.
کدهای کاربران نیز به صورت زیر میباشد.
u | دسترسی برای کاربر |
g | دسترسی برای گروه |
o | دسترسی برای دیگر کاربران |
دستور id
هر کاربریا گروهی که در سیستم عامل لینوکس، ایجاد میشود، دارای یک شمارهی id منحصر به فرد میباشد. با دستور id، شماره و گروههای مربوط به کاربر نمایش داده میشود.
1 2 3 4 5 |
kazemian@upgradeit:~$ id uid=1000(kazemian) gid=1000(kazemian) groups=1000(kazemian),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),120(lpadmin),131(lxd),132(sambashare) kazemian@upgradeit:~$ |
echo $USER
USER، یکی از متغیرهای محیطی پوستهی لینوکس میباشد. با دستور زیر کاربر جاری، نمایش داده میشود.
1 2 3 4 5 |
kazemian@upgradeit:~$ echo $USER kazemian kazemian@upgradeit:~$ |
تغییر سطح دسترسی به فایل با chmod
برای تغییر سطوح دسترسی، از دستور chmod استفاده میگردد. برای استفاده از این دستور، با روش کد دسترسی به یک عدد سه رقمی، نیاز داریم. هر عدد نمایش یکی از کاربران است که از سمت چپ، مالک ، گروه و کاربران دیگر است. مثلا مجوز 700 به معنی این است که مالک یا ایجاد کنندهی فایل دسترسی کامل دارد و کاربران دیگر هیچ دسترسی ندارند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
kazemian@upgradeit:~$ echo $USER kazemian kazemian@upgradeit:~$ touch test kazemian@upgradeit:~$ ls -l test -rw-rw---- 1 kazemian kazemian 0 Nov 17 11:30 test kazemian@upgradeit:~$ chmod 700 test kazemian@upgradeit:~$ ls -l test -rwx------ 1 kazemian kazemian 0 Nov 17 11:30 test kazemian@upgradeit:~$ chmod 660 test kazemian@upgradeit:~$ ls -l test -rw-rw---- 1 kazemian kazemian 0 Nov 17 11:30 test kazemian@upgradeit:~$ |
در تصویر بالا مشاهده میکنید که، در ابتدا فایلی با سایز صفر، با دستور touch، ایجاد میکنیم. سپس با دستور ls پرمیشن فایل را مشاهده میکنیم. فایل test برای کاربر مالک و گروه دسترسی خواندن و نوشتن و برای کاربران دیگر دسترسی فقط خواندن ایجاد شده است. حال با دستور chmod سطح دسترسی را تغییر میدهیم. دستور chmod 700 test دسترسی کامل را برای ایجاد کننده و دسترسی صفر را به کار بران دیگر ایجاد مینماید.
روش دیگر برای تغییر سطوح دسترسی، استفاده از کدهای کار بر و گروه است. مثلا برای اضافه کردن قابلیت اجرای فایل به کاربر مالک از دستور chmod +ux test استفاده میشود.
دستور umask
این دستور برای حالت پیشفرض ایجاد فایلها استفاده میگردد.
1 2 3 4 5 |
kazemian@upgradeit:~$ umask 0002 kazemian@upgradeit:~$ |
برای اینکه مجبور نباشیم برای ایجاد هر فایل، پرمیشنهای آن را تعیین کنیم، بطور پیشفرض پرمیشنهای فایلهای ایجاد شده تعیین میگردد. دستور umask پرمیشن پیشفرض را نشان میدهد. پرمیشن پیشفرض شامل یک عدد چهار رقمی است. رقم اول از سمت چپ،برای فایلهای خاص میباشد. سه رقم بعدی همان سه گروه دسترسی به فایل است 002 به معنی این است که پرمیشن کامل که عدد 777 میباشد از آن کم شود. با این حساب پرمیشن پیشفرض برای شکل بالا، برای فایلها 664 و برای دایرکتوریها 777 میباشد. پرمیشن پیشفرض قابل تغییر میباشد.