در لینوکس، مجوزها، ویژگی‌ها و مالکیت، سطح دسترسی فرآیندهای سیستم و کاربران را به فایل‌ها کنترل می‌کند. این تضمین می‌نماید که تنها کاربران و فرآیندهای مجاز می‌توانند به فایل‌ها و دایرکتوری‌های خاص دسترسی داشته باشند.

 

 

مجوزهای فایل لینوکس

مدل اولیه مجوزهای لینوکس با مرتبط کردن هر فایل با یک مالک و یک گروه و اختصاص حقوق دسترسی به سه طبقه مختلف از کاربران عمل می‌کند:

  • صاحب فایل
  • اعضای گروه
  • دیگران (همه به جز دو دسته قبل).

با استفاده از دستورات chown و chgrp می‌توان مالکیت فایل را تغییر داد.

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

  • مجوز خواندن
  • مجوز نوشتن
  • مجوز اجرا

این مفهوم به شما اجازه می‌دهد که کاربرانی که می‌توانند فایل را بخوانند، در فایل بنویسند، یا فایل را اجرا کنند، را کنترل نمایید.

 

این مطلب نیز ممکن است برای شما مفید باشد: غیرقابل حذف/تغییر کردن فایل ها در لینوکس با دستور chattr

 

به منظور مشاهده مجوزهای فایل، از دستور ls استفاده کنید:

ls -l file_name
output:
-rw-r--r-- 12 linuxize users 12.0K Apr  28 10:10 file_name
|[-][-][-]-   [------] [---]
| |  |  | |      |       |
| |  |  | |      |       +-----------> 7. Group
| |  |  | |      +-------------------> 6. Owner
| |  |  | +--------------------------> 5. Alternate Access Method
| |  |  +----------------------------> 4. Others Permissions
| |  +-------------------------------> 3. Group Permissions
| +----------------------------------> 2. Owner Permissions
+------------------------------------> 1. File Type

اولین کاراکتر در دستور بالا، نوع فایل را نشان می‌دهد. این کاراکتر می‌تواند یک فایل معمولی (-)، دایرکتوری (d)، یک symbolic link یا پیوند نمادین (l)، یا سایر انواع خاص فایل‌ها باشد. نه کاراکتر نمایش داده شده در ابتدای خروجی، مجوزهای فایل را نشان می‌دهد که شامل سه بخش و هر بخش سه کاراکتر است. سه کاراکتر اول، مجوزهای مالک، سه کاراکتر دوم، مجوزهای گروه و سه کاراکتر سوم، مجوزهای دیگران را نشان می‌دهد.

در مثال بالا، (rw-r-r--) به این معنی است که صاحب فایل، مجوز خواندن و نوشتن (rw-) را دارد و گروه و دیگران تنها مجوز خواندن (r--) را دارند.

بسته به نوع فایل، مجوزهای فایل معنای متفاوتی دارند.

هر یک از سه بخش مجوز می‌تواند از کاراکترهای شرح داده شده در زیر ساخته شده و بسته به اینکه بر روی فایل تنظیم شده باشند یا بر روی دایرکتوری، تأثیر متفاوتی داشته باشند:

 

این مطلب نیز ممکن است برای شما مفید باشد: دستور Ls در لینوکس (لیست کردن فایل ها و دایرکتوری ها)

 

تأثیر مجوزها بر روی فایل‌ها

مجوز Read یا خواندن:

کاراکتر - : فایل قابل خواندن نیست. شما نمی‌توانید محتویات فایل را مشاهده کنید.

کاراکتر r : فایل قابل خواندن است.

مجوز Write یا نوشتن:

کاراکتر - : فایل را نمی‌توان تغییر داد یا ویرایش کرد.

کاراکتر w : فایل را می‌توان تغییر داد یا ویرایش کرد.

مجوز Execute یا اجرا:

کاراکتر- : فایل را نمی‌توان اجرا کرد.

کاراکتر x : فایل قابل اجرا است.

کاراکتر s : اگر در بخش مربوط به کاربر یافت شود، بیت setuid را تنظیم می‌کند. اگر در بخش مربوط به گروه یافت شود، بیت setgid را تنظیم می‌نماید. همچنین به این معنی است که پرچم x تنظیم شده است. وقتی پرچم‌های setuid یا setgid روی یک فایل اجرایی تنظیم می‌شوند، فایل با امتیازات مالک و/یا گروه اجرا می‌شود.

کاراکتر S : همانند s است، اما پرچم x تنظیم نشده است. این پرچم به ندرت در فایل‌ها استفاده می‌شود.

کاراکتر t : اگر در بخش مربوط به دیگران یافت شود، بیت sticky را تنظیم می‌کند. همچنین به این معنی است که پرچم x تنظیم شده است. این پرچم برروی فایل‌ها بی استفاده است.

کاراکتر T : همانند t عمل می‌کند؛ اما پرچم x تنظیم نشده است. این پرچم برروی فایل‌ها بی استفاده است.

 

این مطلب نیز ممکن است برای شما مفید باشد: برچسب زمان در فایل‌های لینوکس

 

تأثیر مجوزها بر روی دایرکتوری‌ها (پوشه‌ها)

دایرکتوری‌ها، انواع خاصی از فایل‌ها هستند که می‌توانند شامل فایل‌ها و دایرکتوری‌های دیگری باشند.

مجوز Read یا خواندن:

کاراکتر - : محتویات دایرکتوری نمایش داده نمی‌شود.

کاراکتر r : محتویات دایرکتوری قابل نمایش است. به عنوان مثال، شما می‌توانید فایل‌های داخل دایرکتوری را با ls لیست کنید.

مجوز Write یا نوشتن:

کاراکتر - : محتویات دایرکتوری نمی‌تواند تغییر کند.

کاراکتر w : محتویات دایرکتوری می‌تواند تغییر کند. به عنوان مثال، شما می‌توانید فایل‌های جدید ایجاد نمایید، فایل‌ها را حذف کنید و غیره.

مجوز Execute یا اجرا:

کاراکتر - : دایرکتوری فعلی را نمی‌توانید تغییر دهید.

کاراکتر x : دایرکتوری فعلی را می‌توانید با استفاده از دستور cd تغییر دهید.

کاراکتر s : اگر در بخش مربوط به کاربر یافت شود، بیت setuid را تنظیم می‌کند. اگر در بخش مربوط به گروه یافت شود، بیت setgid را تنظیم می‌نماید. همچنین به این معنی است که پرچم x تنظیم شده است. هنگامی‌که پرچم setgid روی یک دایرکتوری تنظیم می‌شود، فایل‌های جدید ایجاد شده در آن، به جای شناسه گروه اصلی کاربر ایجاد کننده فایل، شناسه گروه دایرکتوری (GID) را به ارث می‌برد. setuid هیچ تاثیری بر روی دایرکتوری‌ها ندارد.

کاراکتر S : همانند s است، اما پرچم x تنظیم نشده است. این پرچم در دایرکتوری‌ها بی استفاده است.

کاراکتر t : اگر در بخش مربوط به دیگران یافت شود، بیت sticky را تنظیم می‌کند. همچنین به این معنی است که پرچم x تنظیم شده است. هنگامی‌که بیت sticky روی یک دایرکتوری تنظیم می‌شود، تنها صاحب فایل، مالک دایرکتوری یا کاربر ادمین می‌توانند فایل‌های موجود در آن دایرکتوری را حذف نماید یا تغییر نام دهند.

کاراکتر T : همان t است، اما پرچم x تنظیم نشده است. این پرچم در دایرکتوری‌ها بی استفاده است.

 

این مطلب نیز ممکن است برای شما مفید باشد: مقایسه دو فایل در لینوکس با استفاده از diff ،vimdiff و colordiff

 

تغییر مجوزهای فایل

با استفاده از دستور chmod می‌توانید مجوزهای فایل را تغییر دهید. تنها  root، مالک فایل، یا کاربر دارای امتیازات sudo می‌توانند، مجوزهای یک فایل را تغییر دهند. هنگام استفاده از chmod، مخصوصاً هنگام تغییر سلسله مراتبی مجوزها، بسیار مراقب باشید.

این دستور می‌تواند یک یا چند فایل (و/یا دایرکتوری‌های) جدا شده با فاصله را به عنوان ورودی بپذیرد.

مجوزها را می‌توان با استفاده از حالت نمادین (symbolic)، حالت عددی یا یک فایل مرجع مشخص کرد.

 

روش نمادین (Symbolic) یا متن (Text)

ساختار دستور chmod هنگام استفاده از حالت نمادین دارای فرمت زیر است:

chmod [OPTIONS] [ugoa…][-+=]perms…[,…] FILE...

اولین مجموعه از پرچم‌ها ([ugoa…])، پرچم‌های کاربران و کلاس‌های کاربرانی را تعریف می‌کند که مجوزهای فایل برای آن‌ها تغییر می‌کند.

u: مالک فایل.

g: کاربرانی که عضو گروه هستند.

o: همه دیگر کاربران.

a: همه کاربران، مشابه ugo

هنگامی‌که پرچم کاربران حذف می‌شود، به طور پیش فرض روی a قرار می‌گیرد.

 

مجموعه دوم پرچم‌ها ([-+=])، پرچم‌های عملیات، مشخص می‌کند که آیا مجوزها باید حذف شوند، اضافه و یا تنظیم شوند:

- : مجوزهای مشخص شده را حذف می‌کند.

+ : مجوزهای مشخص شده را اضافه می‌نماید.

= : مجوزهای فعلی را به مجوزهای مشخص شده تغییر می‌دهد. اگر بعد از نماد = هیچ مجوزی داده نشود، همه مجوزها از کلاس کاربر مشخص شده حذف می‌شوند.

مجوزها (perms ...) به صراحت با استفاده از صفر یا یک یا چند حروف روبه‌رو تنظیم می‌شوند: r ،w ،x ،X ،s و t. هنگام کپی کردن مجوزها از کلاس دیگر کاربران، از یک حرف واحد از مجموعه u ،g و o استفاده نمایید.

هنگام تنظیم مجوزها برای بیش از یک کلاس کاربر ([,…])، از کاما (بدون فاصله) به منظور جدا کردن حالت‌های نمادین استفاده کنید.

 

در اینجا، چند مثال از نحوه استفاده از دستور chmod در حالت نمادین آورده شده است:

با دستور زیر می‌توانید، به اعضای گروه اجازه دهید فایل را اجرا کنند، اما نه بخوانند و نه برروی آن بنویسند:

chmod g=x filename

با دستور زیر می‌توانید، مجوز نوشتن را برای همه کاربران حذف نمایید:

chmod a-w filename

با دستور زیر می‌توانید، مجوز اجرا را برای سایر کاربران به صورت سلسله مراتبی حذف کنید:

chmod -R o-x dirname

با دستور زیر می‌توانید، مجوز خواندن، نوشتن و اجرا را برای همه کاربران به جز مالک فایل حذف نمایید:

chmod og-rwx filename

همین کار را می‌توان با استفاده از فرم زیر انجام داد:

chmod og= filename

با دستور زیر می‌توانید، به مالک فایل مجوز خواندن، نوشتن و اجرای فایل را بدهید، به گروه فایل مجوز خواندن را بدهید و به همه کاربران دیگر هیچ مجوزی ندهید:

chmod u=rwx,g=r,o= filename

 

این مطلب نیز ممکن است برای شما مفید باشد: نوشتن در فایل با استفاده از Bash

 

روش عددی (Numeric)

ساختار دستور chmod هنگام استفاده از حالت نمادین دارای قالب زیر است:

chmod [OPTIONS] NUMBER FILE...

هنگام استفاده از حالت عددی، شما می‌توانید مجوزهای هر سه کلاس کاربر (مالک، گروه و دیگران) را به طور همزمان تنظیم نمایید.

شماره مجوز می‌تواند یک عدد 3 یا 4 رقمی باشد. هنگامی‌که از 3 رقم استفاده می‌شود، رقم اول نشان دهنده مجوزهای مالک فایل، رقم دوم نشان دهنده گروه فایل، و آخرین رقم نشان دهنده دیگر کاربران است.

 

هر مجوز نوشتن، خواندن و اجرا دارای ارزش عددی زیر است:

r (read) = 4

w (write) = 2

x (execute) = 1

بدون مجوز = 0

تعداد مجوزهای یک کلاس کاربر خاص با مجموع مقادیر مجوزهای مربوط به آن گروه نشان داده می‌شود.

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

مالک: rwx = 4+2+1 = 7

گروه: r-x = 4+0+1 = 5

دیگران: r-x = 4+0+0 = 4

با استفاده از روش بالا، به عدد 754 می‌رسیم که نشان دهنده مجوزهای مورد نظر است.

به منظور تنظیم پرچم‌های setuid ،setgid و sticky bit، از چهار رقم استفاده کنید.

 

هنگامی‌که از شماره 4 رقمی استفاده می‌شود، اولین رقم دارای معنی زیر است:

setuid = 4

setgid = 2

sticky = 1

بدون تغییر = 0

و سه رقم بعدی به همان معنایی است که از شماره 3 رقمی استفاده می‌نمایید.

اگر رقم اول 0 باشد، می‌توان آن را حذف کرد و حالت را می‌توان با 3 رقم نشان داد. به عنوان مثال، حالت عددی 0755 همان 755 است.

برای محاسبه حالت عددی، شما می‌توانید از روش دیگری (روش دودویی) نیز استفاده کنید؛ اما کمی پیچیده‌تر است. دانستن نحوه محاسبه حالت عددی با استفاده از 4، 2 و 1 برای اکثر کاربران کافی است.

با استفاده از دستور stat می‌توانید، مجوزهای فایل را در نماد عددی بررسی نمایید:

stat -c "%a" file_name

 

این مطلب نیز ممکن است برای شما مفید باشد: آموزش مجوزهای فایل ها در لینوکس (chmod)

 

در اینجا چند مثال از نحوه استفاده از دستور chmod در حالت عددی آورده شده است:

با دستور زیر می‌توانید، به صاحب فایل مجوز خواندن و نوشتن بدهید و تنها مجوز خواندن را برای اعضای گروه و سایر کاربران اعطا کنید:

chmod 644 dirname

با دستور زیر می‌توانید، به مالک فایل مجوزهای خواندن، نوشتن و اجرا را اعطا نمایید، به اعضای گروه مجوزهای خواندن و اجرا را بدهید و به دیگر کاربران هیچ مجوزی اعطا نکنید:

chmod 750 dirname

با دستور زیر می‌توانید، مجوزهای خواندن، نوشتن، و اجرا و یک بیت sticky را به یک دایرکتوری مشخص بدهید:

chmod 1777 dirname

با دستور زیر می‌توانید، مجوزهای خواندن، نوشتن و اجرا را به صورت سلسله مراتبی به مالک فایل بدهید و هیچ مجوزی به دیگر کاربران برای یک دایرکتوری مشخص ندهید:

chmod -R 700 dirname

 

 

 

 

منبع:

linuxize