لطفا صبر کنید ...

تعیین مجوزهای دسترسی فایل در لینوکس

مریم مهربان

توسط مریم مهربان

دیدگاه ها: 0
بازدید ها : 77
رایگان
هدف ما این است که شما، در بالاترین سطح طراحی و توسعه وب باشید.

ثبت نام کنید

آیا تا به حال رشته‌هایی همچون "drwxr-xr-x" را در ترمینال لینوکس مشاهده کردید. این رشته، در واقع مجوزهای دسترسی یک دایرکتوری را مشخص می‌کند. 


دانستن سطح دسترسی‌ها برای اجرا، خواندن یا نوشتن فایل الزامی است. برای نمونه، در مواردی ممکن است شما قصد اجرای یک فایل را در لینوکس داشتید، اما مجوز آن را نداشتید و در نتیجه با پیغامی مانند “Operation not permitted“ مواجه شدید. در این آموزش، ما قصد داریم مروری بر مجوزهای فایل در لینوکس داشته باشیم و از شما دعوت می‌کنیم تا پایان این مطلب با ما در لیداوب همراه باشید.

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

مالکیت در لینوکس

ابتدا مالکیت فایل‌ها را بررسی می‌کنیم. برای مثال، خروجی دستور ls –l را به صورت زیر در نظر بگیرید. این دستور، فایل‌های درون دایرکتوری فعلی را با جزئیات مربوط به آن‌ها نمایش می‌دهد. از جمله اطلاعاتی که در خروجی این دستور مشاهده می‌کنید، نام کاربر و نام گروهی است که مالک این فایل هستند که به ترتیب در ستون سوم و چهارم (از سمت چپ) قرار دارند.

vagrant@homestead:~$ ls -l
total 8	 	 	 	 	 	 
drwxr-xr-x	2	root	root	4096	Feb 18 18:23	Code
-rw-rw-r–	1	vagrant	vagrant	0	Feb 19 15:53	ninja
-rw-rw-r–	1	vagrant	vagrant	0	Feb 19 15:28	secret
lrwxrwxrwx	1	vagrant	vagrant	5	Feb 19 16:29	swift -> ninja
-rw-rw-r–	1	vagrant	vagrant	62	Feb 19 16:13	ubuntu.txt

دستور Chown و Chmod

برای اینکه کاربر و گروه مالک یک فایل را مشخص کنیم، می‌توانیم از دو دستور chown و chgrp استفاده کنیم. برای مثال، برای فایل Ubuntu.txt، کاربر و گروه مالک این فایل، “vagrant” است. با دستورات زیر، مالک آن را به “root” تغییر می‌دهیم و گروه “admin” را به عنوان گروه مالک فایل تنظیم می‌کنیم.

vagrant@homestead:~$ sudo chown root ubuntu.txt
vagrant@homestead:~$ ls -l
total 8	 	 	 	 	 	 
drwxr-xr-x	2	root	root	4096	Feb 18 18:23	Code
-rw-rw-r–	1	vagrant	vagrant	0	Feb 19 15:53	ninja
-rw-rw-r–	1	vagrant	vagrant	0	Feb 19 15:28	secret
lrwxrwxrwx	1	vagrant	vagrant	5	Feb 19 16:29	swift -> ninja
-rw-rw-r–	1	root	vagrant	62	Feb 19 16:13	ubuntu.txt
vagrant@homestead:~$ sudo chgrp admin ubuntu.txt
vagrant@homestead:~$ ls -l
total 8	 	 	 	 	 	 
drwxr-xr-x	2	root	root	4096	Feb 18 18:23	Code
-rw-rw-r–	1	vagrant	vagrant	0	Feb 19 15:53	ninja
-rw-rw-r–	1	vagrant	vagrant	0	Feb 19 15:28	secret
lrwxrwxrwx	1	vagrant	vagrant	5	Feb 19 16:29	swift -> ninja
-rw-rw-r–	1	root	admin	62	Feb 19 16:13	ubuntu.txt

استفاده از پرچم R- در دستور  chown

به همراه دستور chown می‌توانید از پرچم -R استفاده کنید. با این پرچم، تغییرات درخواست شده شما روی همه فولدرها و فایل‌هایی که در دایرکتوری ذکر شده قرار دارند، اعمال می‌شود. برای مثال، فرض کنید یک فولدر به نام directory دارید که درون آن چهار فایل قرار دارد. اگر بخواهید نام کاربر مالک همه فایل‌ها را به صورت همزمان و یکسان تغییر دهید، کافی است در دستور chown، مسیر دایرکتوری موردنظر را به عنوان نام فایل وارد کنید و همچنین از پرچم -R استفاده کنید.

vagrant@homestead:~$ ls -l directory
total 0						
-rw-rw-r–	1	vagrant	vagrant	0 	Feb 19 16:52	anotherfile
-rw-rw-r–	1	vagrant	vagrant 	0 	Feb 19 16:52 	filefour
-rw-rw-r–	1	vagrant	vagrant 	0 	Feb 19 16:52 	filethree
-rw-rw-r–	1 	vagrant 	vagrant 	0	Feb 19 16:52 	onefile

همچنین، می‌توانید از دستور chown برای تغییر گروه مالک فایل هم استفاده کنیم. به این منظور بعد از دستور chown و پرچم  -R (یا هر پرچم دیگر) نام کاربر و گروه مالک را به صورت “user-name:group-name” وارد کنید.

vagrant@homestead:~$ sudo chown -R root:admin directory
vagrant@homestead:~$ ls -l directory
total 0						
-rw-rw-r–	1	root	admin	0 	Feb 19 16:52	anotherfile
-rw-rw-r–	1	root	admin 	0 	Feb 19 16:52 	Filefour
-rw-rw-r–	1	root	admin 	0 	Feb 19 16:52 	Filethree
-rw-rw-r–	1 	root 	admin 	0	Feb 19 16:52 	Onefile

علاوه بر این، می‌توانید از chown تنها برای تغییر نام گروه مالک فایل استفاده کنید. به این منظور، در الگوی “user-name:group-name” نام کاربر مالک را خالی بگذارید.

vagrant@homestead:~$ sudo chown :vagrant ubuntu.txt
-rw-rw-r–	1	root	vagrant	62	Feb 19 16:13	ubuntu.txt

سطح دسترسی فایل ها و فولدرها

مطالعه مقالات بیشتر در لیداوب:

اکنون، نوبت به مجوز دسترسی فایل‌ها و فولدرها می‌رسد. این اطلاعات را در ستون اول خروجی دستور ls –l می‌توانید مشاهده کنید. هر یک از سلول‌های این ستون، شامل یک رشته 10 کاراکتری هستند که هر یک معنای خاصی دارند.  

اولین کاراکتر

اولین کاراکتر، نوع فایلی را که با آن سروکار داریم (فایل، فولدر یا لینک)، مشخص می‌کند. "d" به معنی دایرکتوری، "l" به معنی لینک و "–"  به معنی فایل است. 9 کاراکتر بعدی، مجوز دسترسی منابع را مشخص می‌کنند که خود به سه بخش تقسیم می‌شوند. کاراکتر دوم تا چهارم، سطح دسترسی کاربر را تعیین می‌کند، کاراکتر پنجم تا هفتم مربوط به سطح دسترسی گروه مالک فایل و سه کاراکتر باقیمانده، مجوز دسترسی سایر افراد را مشخص می‌کند. سه کاراکتر موجود در هر یک از این سه دسته، به ترتیب معادل با خواندن، نوشتن و اجرا است. برای مثال، رشته زیر بیان می‌کند که فایل موردنظر یک دایرکتوری است که همه افراد اعم از کاربر مالک فایل، گروه مالک فایل و سایر افراد اجازه خواندن (r)، نوشتن (w) و اجرا (x) را دارند.

drwxrwxrwx

اگر بخواهیم یک یا چند مجوز را به گروهی ندهیم، می‌توانیم به جای مجوز موردنظر از کاراکتر “-“ استفاده کنیم. برای مثال، در رشته زیر، گروه مالک فایل و سایر افراد اجازه نوشتن در دایرکتوری موردنظر را ندارند.

drwxr-xr-x

نمایش سطوح دسترسی با یک عدد در مبنای 8

9 کاراکتری که برای تعیین سطح دسترسی منابع استفاده می‌شوند، می‌توانند در قالب یک عدد در مبنای 8 نمایش داده شوند. برای مثال، به راحتی می‌توان به جای رشته rwxrwxrwx از عدد 777 استفاده کرد.

برای محاسبه سطح دسترسی هر منبع، باید قواعد زیر را به ذهن بسپارید. عدد 4 معادل با خواندن، عدد 2 معادل با نوشتن و عدد 1 متناظر با اجرای منبع است.

  • r = 4
  • w = 2
  • x = 1

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

type	user	group	Other
d	    rwx	    r-x	    r-x
d	     7	     5	     5

–	    rw-	    rw-	    r- –
–	     6	     6	     4

در کد زیر نیز، مجوز متناظر با هر یک از اعداد 0 تا 7 را مشاهده می‌کنید.

octal	permission
0	- - -
1	- - x
2	- w -
3	- w x
4	r - -
5	r - x
6	r w -
7	r w x

تغییر مجوز دسترسی

برای تغییر سطح دسترسی یک منبع، می‌توانید از دستور chmod استفاده کنید، البته برای استفاده از این دستور حتما باید مالک فایل باشید یا سطح دسترسی مدیریت داشته باشید. برای مثال، در دستور زیر، ابتدا تلاش کردیم که سطح دسترسی فایل Ubuntu.txt را به 777 (کاربر مالک، گروه مالک و سایر افراد اجازه خواندن، نوشتن و اجرای فایل را دارند) تغییر دهیم. اما به دلیل اینکه ما مالک فایل نیستیم، این دستور را مجددا با اضافه کردن واژه sudo (کاربر با سطح دسترسی root) تکرار کردیم.

vagrant@homestead:~$ chmod 777 ubuntu.txt
chmod: changing permissions of ‘ubuntu.txt’: Operation not permitted
vagrant@homestead:~$ sudo chmod 777 ubuntu.txt
vagrant@homestead:~$ ls -l
-rwxrwxrwx 1 root vagrant 62 Feb 19 15:38 ubuntu.txt

در استفاده از chmod ، می‌توانید از نمایش نمادین هم استفاده کنید. در این روش، از کاراکترهای u به معنی کاربر (user)، از کاراکتر g به معنی گروه (group) و o به معنی سایر افراد (others) و سپس از نماد + (جمع) و – (منها) برای اضافه یا کم کردن یک یا چند مجوز خواندن (r)، نوشتن (w) و اجرا (x) استفاده می‌شود.

در مثال زیر، مجوز اجرای فایل از کاربر مالک، گروه مالک و سایر افراد گرفته شده است.

vagrant@homestead:~$ chmod ugo-x ubuntu.txt
vagrant@homestead:~$ ls -l
-rw-rw-rw- 1 vagrant vagrant 62 Feb 19 15:38 ubuntu.txt
vagrant@homestead:~$

در جدول زیر نیز، نمونه مثال‌های دیگری از نمایش نمادین را مشاهده می‌کنید.

نمایش نمادین                                    

نتیجه اعمال مجوزها
u+w

مجوز نوشتن به کاربر مالک اعطا شده است.

u-x

مجوز اجرا از مالک فایل گرفته شده است.

+r

مجوز نوشتن به کاربر و گروه مالک و سایر اعضا داده شده است.

o-rw

مجوزهای خواندن و نوشتن از سایر افراد گرفته می‌شود.

uo-rwx

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

ugo+rwx کاربر و گروه مالک و سایر اعضا همه مجوزها را دارند.

 تفاوت مجوزها در فایل ها، فولدرها و لینک های لینوکس

همانطور که مشاهده کردید، در سیستم عامل لینوکس مجوز دسترسی اجرا، غالبا برای فولدرها نیز تنظیم می‌شود. مجوز اجرا برای دایرکتوری به منزله رفتن به آن دایرکتوری است که در لینوکس، این کار با دستور cd انجام می‌شود. برای فهرست کردن محتویات یک دایرکتوری با دستور ls، باید مجوز خواندن آن را داشته باشید. اما در مورد فایل‌ها، به دلایل امنیتی مجوز اجرای یک فایل به صورت پیش‌فرض تنظیم نمی‌شود. زیرا در این صورت، هر فایل بدخواه و آلوده‌ای که به صورت ناخودآگاه وارد سیستم شده، به راحتی می‌تواند روی سیستم اجرا شود. در مورد لینک‌ها هم معمولا همه مجوزها داده می‌شود و علت آن هم این است که لینک‌ها معمولا به سادگی از مجوز منابعی استفاده می‌کنند که به آن اشاره می‌کنند.

برای مثال، swift یک لینک است که به ninja اشاره می‌کند و اگرچه تمام مجوزها را دارد اما در واقع تنها مجوز  -rw-rw-r-- (مجوزهای ninja) را دارد.

vagrant@homestead:~$ file swift
swift: symbolic link to ‘ninja’
vagrant@homestead:~$ ls -l
-rw-rw-r– 1 vagrant vagrant 0 Feb 19 15:36 ninja
lrwxrwxrwx 1 vagrant vagrant 5 Feb 19 15:38 swift -> ninja
vagrant@homestead

 مجوزهای یک فایل برای اولین بار، چگونه تنظیم می شوند؟

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

vagrant@homestead:~/directory$ touch newfile
vagrant@homestead:~/directory$ ls -l
total 0
-rw-rw-r– 1 vagrant vagrant 0 Feb 20 17:43 newfile
vagrant@homestead:~/directory$

برای محاسبه مجوزهای پیش‌فرض فایل و فولدرها در زمان ایجاد آن‌ها، معمولا از مقداری تحت عنوان umask استفاده می‌شود که مقدار آن به کاربر و همچنین توزیع لینوکس مورد استفاده دارد. این متغیر غالبا مقدار 022 را دارد. با این فرض، مجوز دسترسی فولدرها به صورت پیشفرض برابر با 777 – 022 = 755 است. برای فایل‌ها نیز به دلایل امنیتی مجوز اجرا از سه گروه گرفته می‌شود که حاصل برابر با 644 خواهد بود.  

 متغیر SUID

متغیر SUID که در واقع مخفف عبارت set user id است و برای فایل‌های اجرایی استفاده می‌شود، به این معنی  است که فایل با مجوزهای مالک فایل اجرا می‌شود. برای مثال، اگر یک فایل متعلق به کاربر root باشد و SUID برای آن برابر با یک باشد، هر کاربری این فایل مانند حالتی اجرا می‌شود که کاربر root آن را اجرا کرده است. تنظیم SUID برای فایل‌های مختلف باید با دقت انجام شود.

 متغیر GUID

هم برای فایل‌های اجرایی و هم برای فولدرها استفاده می‌شود. GUID که مخفف Group user id است، مشابه با suid  است، با این تفاوت که اگر در مورد یک فایل اجرایی تنظیم شده باشد، آن فایل با مجوز گروه مالک فایل اجرا می‌شود. اگر در مورد فولدری تنظیم شود، به این معنی است همه فایل‌ها و فولدرهای درون فولدر موردنظر، متعلق به گروه خواهد بود. به عبارت دیگر، همه فایل‌ها و فولدرهایی که در آینده در این فولدر ساخته می‌شوند، نیز مالکیت گروه را خواهند داشت.

متغیر Sticky Bit

این متغیر برای فولدر استفاده می‌شود و به این معنی است که تنها صاحب فایل یا فولدر اجازه حذف آن را دارد. این متغیر غالبا برای فولدرهایی استفاده می‌شود که چندین پردازش یا کاربر از آن استفاده می‌کنند، مانند دایرکتوری tmp در لینوکس.

تنظیم متغیرهای SUID، GUID و Sticky Bit

  • r = 4
  • w = 2
  • x = 1

مشابه با مجوزهای خواندن، نوشتن و اجرا، می‌توان سه متغیر زیر را با اعداد در مبنای هشت نمایش داد. برای نمایش این متغیر در کنار مجوزها نیز می‌توان آن‌ها را به صورت یک عدد چهار رقمی در آورد که رقم اول آن‌ها مشخص کننده مقدار SUID ،GUID و Sticky Bit است. برای مثال، در مجوز دسترسی 4775 رقم چهار اول نشان می‌دهد که از سه متغیر مذکور، تنها SUID برای آن ذکر شده است.

  • SUID = 4
  • GUID = 2
  • Sticky Bit = 1

نمونه هایی از کاربرد SUID

برای نمونه، برنامه ping توسط کاربر "vagrant" اجرا شده است. همینطور که مجوز دسترسی آن را مشاهده می‌کنید، در بیت اجرا بخش کاربر مالک، حرف "S" نوشته شده است. این کاراکتر به این معنی است که "ping" صرف نظر از اینکه توسط چه کاربری اجرا شود، به عنوان کاربر ریشه اجرا می‌شود.

vagrant@homestead:~/directory$ ll /bin/ping
-rwsr-xr-x 1 root root 44168 May 7 2014 /bin/ping*
vagrant@homestead:~/directory

به عنوان یک مثال دیگر، فرض کنید که روی سیستم خود یک فایل اسکریپت دارید که می‌خواهید با مجوز گروه اجرا شود. همین‌طور که مشاهده می‌کنید، در مجوز دسترسی مربوط به این فایل، کاراکتر "s" در بیت اجرا مربوط به گروه نوشته شده است. در این حالت، فایل با مجوز گروه “admin” اجرا خواهد شد.

vagrant@homestead:~/directory$ sudo chmod g+s pretendscript
vagrant@homestead:~/directory$ ll
-rwxrwsr-x 1 vagrant admin 30 Feb 20 18:35 pretendscript*
vagrant@homestead:~/directory$

بحث مجوزها در لینوکس، عموما موضوع گسترده‌ای است. در این آموزش، مجوزهایی را که برای کاربر، گروه و سایر افراد تعریف می‌شود، معرفی کردیم. همچنین، درباره متغیرهایی همچون umask، suid،guid،sticky Bit و غیره صحبت کردیم.

امیدوارم این آموزش برای شما مفید بوده باشد. منتظر دیگر آموزش‌های ما در لیداوب باشید.

منبع :

0 از 0 رای

 مطالب مرتبط  

در قسمت زیر مطالبی وجود دارند که با مقاله فعلی مرتبط هستند



متاسفانه فقط اعضای سایت قادر به ثبت دیدگاه هستند

برترین مطالب

آموزش در لیداوب

از مقالات و ویدیو های آموزشی خودتان کسب درآمد کنید!

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