وقتی تو فایل سیستم لینوکس میچرخیم بیشترین چیزایی که باهاشون برخورد می کنیم فایل ها و دایرکتوری ها هستن . ولی لینوکس فایل تایپ های بیشتری داره که هر کدوم کاربرد خودشونو دارن.در این پست به صورت خیلی خلاصه، ساده و کاربردی با ماکلیت و مجوز ها در لینوکس آشنا می شیم.
چرا به مجوزهای دسترسی نیاز داریم؟
از اونجایی که لینوکس یه سیستم عامل مولتی یوزر هست و چندین یوزر می تونن همزمان از سیستم استفاده کنن پس برای محافظت از فایل ها و جلوگیری از خراب کاری عمدی یا غیر عمدی بهتره با دو سطح امنیتی لینوکس برای فایل ها ، ۱− ownership و ۲− Permission آشنا باشیم . پس تو این پست با انواع فایل ، پرمیشن های فایل و ownership آشنا میشیم .
هر چیزی توی لینوکس ( و سیستم های شبه یونیکس) ۳ تا مجوز (permission) داره : خواندن (read)، نوشتن(write) و اجرا(execute) داره تو بقیه سیستم ها هم باید اینجوری باشه شاید فقط اسمشون فرق کنه.
برای دیدن اینکه فایل ها یا دایرکتوری هامون کدوم پرمیشن ها رو دارن از دستور زیر استفاده می کنیم .
ls -lh
لیستی از فایل ها و دایرکتوری های بهمون نشون میده یه چی مثل این :
drwxrwxr-x 2 amin amin 4.0K Oct 15 08:32 Games
-rw-rw-r-- 1 amin amin 170 Oct 24 22:41 main.cpp
prw-rw-r-- 1 amin amin 0 Nov 11 06:20 pipe_file
crw--w---- 1 root tty 4, 0 Nov 11 06:01 /dev/tty0
srw-rw-rw- 1 root root 0 Nov 11 06:01 /run/systemd/journal/dev-log
اول هر خط با همچنین چیزی شروع شده (-rwxrwxr-x-) که طولش ۱۰ کاراکتره . کاراکتر اول نشون دهنده نوع فایل هست . این تایپ کد ها مشخص می کنه که لینوکس چطور با این فایل برخورد می کنه ، یه دیتای عادی ، یه دایرکتوری یا شورتکات (که تو لینوکس بهشون سافت لینک میگیم ) .
۷ تا تایپ کد داریم تو لینوکس :
- ( – ) regular file : فایل عادی مثل تکست ، یه برنامه ، فایل زیپ و چیزایی از این قبیل
- directory (d ): همون پوشه ها که همه میشناسیم که حاوی اسم فایل ها و اشاره گر هایی به inode های دیسک
- symbolic link (s): یه فایل که حاوی اسم یه فایل یا پوشه دیگه س و وقتی سعی می کنیم اونو باز کنیم فایلی که بهش لینک شده رو باز می کنه.
- Named pipe (p): پایپ وسیله ای برای ارتباط دوتا برنامه لوکال هست . یکیش پایپ رو برای نوشتن باز می کنه و اون یکی برای خوندن .
- Socket (s): مثل پایپه ولی قابلیت ارتباط دوطرفه تو نتورک رو هم داره . معمولا تو سرویس هایی مثل X windows , syslog استفاده می شن.
- Block device (b):این فایل ها با سخت افزار های ذخیره سازی مثل هارد دیسک ، یو اس بی فلش و غیره در ارتباطن
- Character Device(c): این فایل ها با سخت افزار هایی مثل دیوایس های صوتی و پورت های سریال در ارتباطن ۹ تا کاراکتر باقی مونده به ترتیب نشون دهنده پرمیشن های صاحب فایل ، اعضای گروه و دیگران هست .

تغییر مالکیت فایل
هر فایل و دایرکتوی تو لینوکس یه مالکیت داره که معمولا صاحبش ایجاد کننده اون فایل هست . ولی سوپریوزر می تونه حتی صاحب فایل ها و گروهشونو عوض کنه . همونطور که تو عکس بالا مشخصه اگه شما صاحب فایلی نباشید طبیعتا پرمیشن هایی که صاحب خود فایل داره رو ندارین .
chown [newowner]:[newgroup] filename
تغییر مجوز های فایل در لینوکس
با دستور chmod می شه این مجوز هارو تغییر داد البته اگه شما صاحب فایل نباشید باید با دسترسی روت این تغییرات رو ایجاد کنید .
دو جور میشه این تغییر رو ایجاد کرد. تو اولی مشخص میکنیم که پرمیشن های چه کسی رو میخواییم تغییر بدیم بعد با یه ( + یا – ) ، مجوزی بهش اضافه یا ازش کم می کنیم . مثلا:
chmod u+r filename
chmod o-w
chmod a-rwx
کاراکتری که قبل بعلاو یا منها می نویسیم کاربر یا گروه مورد نظر هست که میخواییم پرمیشن هاشونو تغییر بدیم که ۴ تا حالت داره :
- a : همه
- u : یوزر یا صاحب فایل
- g : گروه
- o : دیگران
یه روش باحال تر
هر پرمیشن تو لینوکس یه معادل عددی هم داره :
- execute permission = 1
- write permission = 2
- read permission = 4
- 0 = no permission
مثلا اگه بخواییم مجوز های صاحب فایل رو r-x
تغییر بدیم معادل عددیش میشه ۵ (۵ = ۴ + ۱ ) که طبیعتا ۷ هم یعنی همه پرمیشن ها رو داشته باشه. اگه سه تا از این عددارو بزاریم کنار هم می تونیم به ترتیب پرمیشن های صاحب فایل ، گروه و دیگرانو تغییر بدیم . مثلا:
chmod 510 filename
chmod 751 filename