بیژن حجازی
بیژن حجازی
خواندن ۵ دقیقه·۲ سال پیش

دسترسی ها در Unix‌

در سیستم عامل های بر اساس Unix می تونیم دسترسی فایل ها و پوشه ها رو مشخص کنیم.
در سیستم عامل های بر اساس Unix می تونیم دسترسی فایل ها و پوشه ها رو مشخص کنیم.

مقدمه

تعیین سطوح دسترسی فایل ها و پوشه ها در هر سیستم عاملی اهمیت داره. در سیستم عامل های بر اساس Unix مثل Linux می تونیم با دستور chmod سطوح دسترسی قشر های مختلف کاربری رو برای فایل ها و پوشه ها تعیین کنیم. این طوری می تونیم مطمئن بشیم که فایل های (یا پوشه ها) حساس فقط توسط کاربران دارای صلاحیت قابل دسترسی هستند. در این مقاله به بررسی مفصل دسترسی ها در Unix می پردازیم.

مشاهده دسترسی ها

در یونیکس، هر فایل یا پوشه یک رشته از دسترسی ها داره که برای راحت تر شدن کار تو این مقاله بهش «رشته دسترسی» میگیم. برای مشاهده رشته های دسترسی همه فایل ها یا پوشه های مسیر جاری می تونیم از دستور ls با آپشن l- استفاده کنیم.

ls -l

اگه بخایم رشته دسترسی یک فایل یا پوشه خاص رو مشاهده کنیم کافیه به دستور بالا اسم اون فایل یا پوشه رو اضافه کنیم. مثلا کد زیر رشته دسترسی فایل names.txt رو نشون میده:

ls -l names.txt

رشته دسترسی

رشته های دسترسی یا با - شروع میشن یا با d. - (اسم این کاراکتر hyphen عه) نشون دهنده اینه که اون رشته دسترسی متعلق یه یک فایل عه و اگه با d شروع بشه یعنی اون رشته دسترسی متعلق به یک پوشه (directory) هست. برای درک رشته های دسترسی باید سطوح دسترسی در Unix رو بلد باشیم.

drwxrwxr-x # directory -rwxrwxrwx # File

سطوح دسترسی

۳ تا سطح دسترسی در Unix داریم که برای هر کدوم یک حرف از الفبای انگلیسی به اختصار در نظر گرفته میشه (رمز rwx رو یادت باشه):

  • read (r)
  • write (w)
  • execute (x)

همون طوری که از اسم این ۳ سطح دسترسی مشخصه read به معنای داشتن اجازه برای خوندن محتویات فایل یا پوشه، write برای دستکاری کردن و execute برای اجرا کردنه. پس برای مثال در رشته های دسترسی بالا حرف r نشان دهنده اینه که اجازه read داده شده. ولی به کی؟!

دسترسی های بالا می تونن به مالک فایل (owner) که یک کاربره (user)، یا گروه فایل (group) یا بقیه (other) اختصاص داده بشن. به بقیه world هم میگن. برای هر کدوم از این ۳ تا یک حرف اختصاری وجود داره (رمز ugo رو یادت باشه):

  • owner (u)
  • group (g)
  • other (o)

حالا با توجه به ۳ سطح دسترسی و ۳ قشری که میشه بهشون دسترسی ها رو داد می تونیم رشته دسترسی رو تفسیر کنیم. مثلا رشته دسترسی زیر رو در نظر بگیر:

-rw-r--r--

اول از همه با توجه به این که رشته دسترسی با hyphen شروع شده متوجه میشیم که این رشته دسترسی به یک فایل تعلق داره. بعد از اون سطح دسترسی رو داریم که به ترتیب دسترسی های مالک فایل (user)، گروه فایل (group) و بقیه (other) است. پس رشته دسترسی بالا این طوری تفسیر میشه:

  • user: read + write
  • group: read
  • other (world): read

به عبارت دیگه، رشته دسترسی بالا اجازه خواندن و نوشتن رو به کاربر مالک فایل میده، اجازه خواندن رو به گروهی که فایل بهش تعلق داره میده و اجازه خواندن رو به بقیه اقشار (همون world) میده.

تغییر دسترسی ها

حالا که تونستیم رشته های دسترسی رو درک کنیم به این جا میرسیم که چطوری سطوح دسترسی قشر های مختلف رو عوض کنیم. این کار با دستور chmod انجام میشه که فرمول کلیش این طوریه:

chmod [changes] [filename]

برای کار کردن با دستور chmod باید تغییراتی که مد نظرمون هست و اسم فایل (یا پوشه) ای که میخایم تغییرات روش اعمال بشه رو داشته باشیم. تغییرات مد نظرمون باید با فرمت خاصی نگارش بشن. به این طریق که اول اسم قشری که میخایم دسترسی اش رو عوض کنیم (یکی از ۳ حالت u, g, o)، سپس عملگر نوع تغییر (+ برای افزودن دسترسی، - برای حذف دسترسی و = برای مشخص کردن دسترسی) و در نهایت سطح دسترسی. بذار با مثال بریم جلو.

مثال ۱: افزودن دسترسی x به مالک (u) فایل برای فایل calc.sh

chmod u+x calc.sh

مثال ۲: کم کردن دسترسی w از گروه فایل برای فایل calc.sh

chmod g-w calc.sh

مثال ۳: مشخص کردن دسترسی world برای فایل calc.sh

chmod o=r calc.sh

مثال ۴: مشخص کردن یک جای سطوح دسترسی هر ۳ قشر برای فایل calc.sh

chmod u=rwx,g=rw,o=r calc.sh

عدد دسترسی

موقع کار کردن با دستور chmod علاوه بر علائم دسترسی (rwx) میشه از اعداد دسترسی هم استفاده کرد. این طوری هم سریع تر و هم راحت تر به هدف مون میرسیم. هر سطح دسترسی یک عدد داره:

  • read (4)
  • write (2)
  • execute (1)
  • no permission (0)

با جمع کردن مقادیر این اعداد می تونیم دسترسی های یک قشر رو مشخص کنیم. مثلا عدد ۷ که حاصل جمع ۴ و ۲ و ۱ عه یعنی همه دسترسی ها. از اون جایی که ما با ۳ قشر مختلف سر و کار داریم (ugo) پس باید یک عدد ۳ رقمی درست کنیم که صدگان اش نشان دهنده دسترسی های مالک فایل، دهگانش نشان دهنده دسترسی های گروه فایل و یکانش نشان دهنده دسترسی های world عه. بذار با مثال بریم جلو.

مثال ۱: دادن همه دسترسی ها به همه قشر ها برای فایل calc.sh

chmod 777 calc.sh

مثال ۲: دادن هر ۳ نوع دسترسی به مالک فایل و فقط read به دو قشر دیگر برای فایل calc.sh:

chmod 744 clalc.sh

مثال ۳: دادن هر ۳ نوع دسترسی به مالک فایل و هیچ نوع دسترسی به ۲ قشر دیگر برای فایل calc.sh:

chmod 700 calc.sh

تغییر مالک فایل

جدا از تغییر سطح دسترسی فایل ها گاهی اوقات ممکنه لازم باشه که مالک فایل ها رو عوض کنیم. برای عوض کردن مالک یک فایل باید وارد محیط super user بشیم که با دستور su انجام میشه. بعدش از دستور chown استفاده میکنیم تا مالک فایل رو عوض کنیم که فرمول کلیش این طوریه:

chown username filename

به جای username باید اسم کاربری رو بذاریم که قراره مالک جدید فایل بشه.

تغییر گروه فایل

اگه یادت باشه تو قشر هایی که می تونستن به فایل دسترسی داشته باشن یک group هم بود که با g نشونش میدادیم. برای عوض کردن مالک یک فایل باید وارد محیط super user بشیم که با دستور su انجام میشه. بعدش برای عوض کردن گروهی که فایل بهش تعلق داره از دستور chgrp استفاده میکنیم که فرمول کلیش این طوریه:

chgrp groupname filename

به جای groupname باید اسم گروهی که قراره گروه جدید فایل باشه رو بذاریم.

نتیجه گیری

وقتی که به صورت شخصی داریم از سیستم عامل های بر اساس Unix (مثل لینوکس) استفاده میکنیم ممکنه اهمیت سطوح دسترسی درک نشه ولی زمانی که بحث server میاد وسط و یا رایانه هایی در یک سازمان که چندین کاربر دارن ازش استفاده میکنن خیلی مهم میشه که مالک هر فایل مشخص باشه و یا این که سطح دسترسی برای هر قشر رو مشخص کنیم. در نهایت خیلی خوشحال میشم که نظرت رو درمورد مقاله به صورت یک کامنت بگی.

لینوکسبرنامه نویسیunixlinuxدسترسی ها در لینوکس
سلام! نوشتن به منزله مطالعه «خود» هست. من بیشتر تو زمینه برنامه نویسی و روان شناسی مطلب میذارم. خوشحال میشم نظرات تون رو باهام در میون بذارین.
شاید از این پست‌ها خوشتان بیاید