مدیریت مجوز دسترسی فایل‌ها با دستور chmod

Print Friendly

chmod مخفف عبارت Change Mode به معنای تغییر در سطح دسترسی فایل‌ها و دایرکتوری  می‌باشد.

همان‌طور که می‌دانیم لینوکس یک سیستم عامل چند کاربره است. در لینوکس، هر فایل یا دایرکتوری  دارای یک سطح دسترسی مشخص برای هر کاربر است. یکی از علل امنیت بالای لینوکس مشخص بودن سطح دسترسی برای هر کاربر است. در زیر مفاهیم کاربر (user)، اجازه ها (permissions)، صاحب (owner) و گروه (group) را مشخص می‌کنیم و بعد دستور chmod را توضیح می‌دهیم.

کاربر: هر کسی که از کامپیوتر استفاده می‌کند یک کاربر نامیده می‌شود و دارای یک نام کاربری است که معمولا در ابتدای نصب سیستم عامل، این نام مشخص می‌شود و فرد، موقع ورود به سیستم با این نام وارد می‌شود. با استفاده از دستور whoami می‌توان نام کاربری را به دست آورد.

و دستور who یا w برای دیدن کابرانی که به سیستم متصل هستند :

who

w

اجازه‌ها Permissions(سطح دسترسی): هر کاربر برای هر فایل یا فولدر دارای سه نوع سطح دسترسی خواندن (read)، نوشتن (write) و اجرا کردن (execute) و – (Dash )  به معنای نداشتن دسترسی ( no Permission )  است. این سطوح دسترسی برای فایل و دایرکتوری کمی متفاوت است. برای فایل‌ها، خواندن به معنای باز کردن فایل و دیدن محتویات آن است، نوشتن به معنای تغییر در محتویات فایل است و اجرا کردن هم که فقط برای فایل‌های اجرایی و یا اسکریپت است، به معنای اجرا شدن آن برنامه است. برای دارکتوری ها، خواندن به معنای لیست کردن فایل‌های درون آن دایرکتوری است، نوشتن به معنای ساختن یا پاک کردن فایل‌ها درون دایرکتوری است و اجرا کردن به معنای اجازه ورود به دایرکتوری و زیر دایرکتوری  است.

صاحب Owner  : در حالت کلی به کاربری که فایل یا دایرکتوری را ایجاد میکند صاحب آن فایل‌ها و دایرکتوری گفته می‌شود.

گروه Group: هر کاربر ممکن است به یک یا چند گروه تعلق داشته باشد. مثلا ممکن است نام کاربری majid هم به گروه majid و هم به گروه root و هم به گروه sambashare تعلق داشته باشد. در این صورت، اگر اجازه‌هایی را برای گروه sambashare در نظر بگیریم، برای آن کاربر هم منظور می‌شود. همانطور که متوجه شدید، می‌توان نام کاربری و نام گروه یکسانی داشت و گروه بندی برای ساده کردن اعمال دسترسی ها است که اگر بر روی یک گروه  تغییری ایجاد کنیم این تغییر بر روی تمامی کاربرانی که عضو آن گروه هستند هم اعمال می شود .

نکته: هر کاربری که در هیچکدام از دو دسته ی گروه و کاربر قرار نداشته باشد، به آن دیگران (others) گفته می‌شود.

دستور chmod

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

$ chmod option … mode … file
$ chmod option … octal-mode … file

مثال :

mkdir test

chmod 777 test

در مثال بالا با دستور mkdir یک دایرکتوری جدید به نام test ایجاد کردیم و با دستور chmod نوع دسترسی فایل رو به دسترسی کامل تغییر دادیم ( در ادامه بیشتر با اعداد به کار رفته آشنا می شوید )

option: پارامترهایی که برای تغییر سطح دسترسی به دستور می‌دهیم.

mode: نوع سطح دسترسی

octal-mode: عددی در مبنای ۸ که نوع سطح دسترسی را مشخص می‌کند (حالت جایگزین برای mode).

file: فایلی که می‌خواهیم تغییرات را روی آن انجام دهیم.

فرض کنید در پوشه home/majid/ دایرکتوری داریم به نام myFolder که حاوی محتویات زیر است:

File1.txt
File2.txt
File3.txt
File4.txt

حال با دستور cd وارد آن دایرکتوری می‌شویم و با دستور ls و پارامتر l- لیستی از فایل‌های درون آن بدست می‌آوریم. (در صورت نیاز، دستورهای ls و cd مشاهده شود)

cd ~/myFolder

ls -l

-rw-rw-r– 1 majid majid 6 Jan 27 07:52 File1.txt
-rw-rw-r– 1 majid majid 20 Jan 27 07:53 File2.txt
-rw-rw-r– 1 majid majid 260 Jan 27 07:53 File3.txt
-rw-rw-r– 1 majid majid 18 Jan 27 07:54 File4.txt

در ستون اول رشته‌ای ده کاراکتری دیده می‌شود که در زیر آن را توضیح می‌دهیم.

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

نوع فایل کاراکتر ابتدای رشته
فایل معمولی
دایرکتوری d
symbolic link l
character special device c
block special device b
FIFO p
socket s

حال فرض کنید دایرکتوری به نام myFolder1 در myFolder داشته باشیم. خط زیر به خروجی ls -l اضافه می‌شود:

drwxrwxr-x 2 majid majid 4096 Jan 27 08:07 myFolder1

همانطور که می‌بینید، اولین کاراکتر آن به  d یعنی دایرکتوری تغییر کرد.

نماد و معانی حروفی که در اول یک خط بعد از وارد کردن دستور ls -la می بینیم به قرار زیر است :

d = دایرکتوری , Directory

– = فایل معمولی , regular file

l = نماد لینک , symbolic link

s = جا و مکان دامین یونیکس,  Unix domain socket

p = نامگذاری شده توسط پایپ , named pipe

c = کاراکتر های فایل سیستم , character device file

b = مسدود  شده توسط سیستم , block device file

۹ کارکتر بعدی به ترتیب اجازه خواندن (read)، نوشتن (write) و اجرا کردن (execute) برای به ترتیب صاحب (owner)، گروه (group) و دیگران (others) است. مثلا در خروجی بالا، برای فولدر myFolder1، صاحب دارای دسترسی rwx، گروه دارای دسترسی rwx و دیگران دارای دسترسی x– هستند( در مورد دستور های  Chown برای تغییر صاحب و Chgrp برای تغییر دادن گروه کاربری بعدا بحث خواهد شد )

تغییر دادن سطح دسترسی به یک فایل:

نمای کلی برای دستور chmod به صورت زیر است:

$ chmod [ugoa][+-=][rwx] FILE_NAME

کاراکترهای موجود در کروشه های اول، به ترتیب نشاندهنده کاربر (User)، گروه (Group)، دیگران (Others) و همه (All) می‌باشند. می‌توان یک یا چند کاراکتر از کروشه اول را در کنار هم و بدون در نظر گرفتن ترتیب استفاده کرد (توضیح در مثال پایین). از کاراکترهای + , – و =  موجود در کروشه دوم تنها میتوان یکی را استفاده کرد که نشاندهنده افزودن یا کاستن سطح دسترسی مورد نظر است. از کاراکترهای r و w و x موجود در کروشه سوم هم میتوان یک یا چند عدد را بکار برد که نشان دهنده نوع دسترسی است.

+ به معنای اضافه کردن دسترسی , add this permission

به معنای پاک کردن دسترسی , remove this permission

= به معنای اختصاص دادن دسترسی ذکر شده , set exactly this permission

مثال:

ls -l

drwxrwxr-x 2 majid majid 4096 Jan 27 08:07 myFolder1

chmod ug-w myFolder1

ls -l

dr-xr-xr-x 2 majid majid 4096 Jan 27 08:07 myFolder1

 در این مثال، دسترسی نوشتن در فولدر myFolder1 را از کاربر و گروه گرفتیم. (دقت کنید که بین ug و w و – فاصله ای وجود ندارد)

ls -l

-rw-rw-r– 1 majid majid 20 Jan 27 07:53 File2.txt

chmod o+wx File2.txt

ls -l

-rw-rw-rwx 1 majid majid 20 Jan 27 07:53 File2.txt

در این مثال به دیگر کاربران دسترسی اجرا کردن و تغییر محتویات فایل را دادیم.

تغییر دادن سطح دسترسی به یک فایل در حالت Octal (مبنای ۸):

می‌توان به ۹ کاراکتری که نشان دهنده سطح دسترسی به فایل هستند آرایه ای از اعداد ۰ و ۱ نسبت داد که صفر بودن به معنای عدم فعال بودن دسترسی آن عضو و یک بودن به معنای فعال بودن دسترسی می‌باشد.

rw-rw-r–
۱۱۰۱۱۰۱۰۰

حال اگر اعداد را سه رقم سه رقم جدا کنیم و به مبنای ۸ ببریم.

rw- rw- r–
۱۱۰ ۱۱۰ ۱۰۰
۶ ۶ ۴

حال این سه عدد را در کنار هم قرار می‌دهیم و از آن به جای کل عبارت قبل از اسم فایل استفاده می‌کنیم.

ls -l

-rw-rw-r– 1 majid majid 20 Jan 27 07:53 File2.txt

( ۶ ۶ ۴ )

chmod 667 File2.txt

ls -l

-rw-rw-rwx 1 majid majid 20 Jan 27 07:53 File2.txt
( ۶ ۶ ۷ )

راه راحتتر، استفاده از جدول زیر است

نوع دسترسی عدد اختصاص داده شده
x ۱
w ۲
r ۴

 

حال کافیست مثلا برای تعیین سطح دسترسی rwx بنویسیم ۱+۲+۴ = ۷

 پارامترهای پر استفاده ی دستور Chmod :

c- یا changes– : مثل پارامتر v- ولی تنها وقتی اعلام می‌کند که تغییرات حتما انجام شده باشد.

ls -l

-rw-rw-r– 1 majid majid 260 Jan 27 07:54 File3.txt

chmod -c 777 File3.txt

ls -l

mode of ‘File3.txt’ changed from 0664 (rw-rw-r–) to 0777 (rwxrwxrwx)

v- یا verbose– : کارهایی که انجام میدهد را اعلام می‌کند.

reference=RFILE– : از سطوح دسترسی فایل RFILE به عنوان سطوح اعمالی برای دستور استفاده می‌کند.

ls -l

-rw-rw-r– 1 majid majid 20 Jan 27 07:54 File2.txt
-rwxrwxrwx 1 majid majid 260 Jan 27 07:54 File3.txt

chmod –reference=File2.txt File3.txt

-rw-rw-r– 1 majid majid 20 Jan 27 07:54 File3.txt

R- یا recursive– : همه ی فایل‌ها و دایرکتوری های  داخل آن را با سطوح دسترسی داده شده تغییر می‌دهد.

ls -la

total 96
drwxrwxr-x 3 majid majid 4096 Jan 27 19:35 .
drwx—— 64 majid majid 36864 Jan 27 18:44 ..
-rw-rw-r– 1 majid majid 4 Jan 27 19:35 File1.txt
-rw-rw-r– 1 majid majid 20 Jan 27 07:54 File2.txt
-rw-rw-r– 1 majid majid 260 Jan 27 07:54 File3.txt
-rw-rw-r– 1 majid majid 18 Jan 27 07:54 File4.txt

drwxrwx–x 2 majid majid 4096 Jan 27 08:07 myFolder1

chmod -R 777 .
ls -l myFolder/

ls -l

-rwxrwxrwx 1 majid majid 4 Jan 27 19:35 File1.txt
-rwxrwxrwx 1 majid majid 20 Jan 27 07:54 File2.txt
-rwxrwxrwx 1 majid majid 260 Jan 27 07:54 File3.txt
-rwxrwxrwx 1 majid majid 18 Jan 27 07:54 File4.txt
drwxrwxrwx 2 majid majid 4096 Jan 27 08:07 myFolder1

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

۱. suid
فقط بر روی فایل‌های با قابلیت اجرایی تاثیر دارند. اگر بر روی یک فایل با قابلیت اجرایی تنظیم شود، وقتی آن فایل اجرا شود، آن فایل با دسترسی صاحب فایل اجرا می‌شود و نه با دسترسی فردی که فایل را اجرا کرده. مثلا وقتی شما با دستور passwd پسوردتان را تغییر می‌دهید تغییراتی را داخل فایل shaddow ایجاد می‌کنید و از آن‌جایی که ایجاد تغییر در فایل shaddow فقط برای کاربر ریشه میسر است، پس باید دستور passwd با دسترسی ریشه اجرا شود، برای همین بر روی این دستور به طور پیش فرض suid تنظیم شده.
نکته: اگر suid بر روی دستوراتی مثل vi تنظیم شود، تمام کاربران به تمام فایل‌های داخل سیستم دسترسی روت خواهند داشت و یک مشکل امنیتی بزرگ به وجود می‌آید.

۲. sgid
اگر بر روی یک فایل با قابلیت اجرایی تنظیم شود وقتی آن فایل اجرا شود، با دسترسی گروه فایل اجرا می‌شود و نه با دسترسی گروه فردی که فایل را اجرا می‌کند. اگر بر روی دایرکتوری ها تنظیم شود هر فایل یا دایرکتوری که داخل اون فایل ساخته شود، گروه همان فایل را به خود اختصاص می‌دهد و گروه فردی که فایل را ساخته، نمی‌گیرد.

۳. sticky
فقط بر روی دایرکتوری ها قابل تنظیم کردن است. اگر بر روی یک دایرکتوری تنظیم شود، فایل‌های داخل دایرکتوری را فقط صاحب دایرکتوری و صاحب فایل و کاربر روت می‌تواند تغییر اسم دهند و یا پاک کنند. این اجازه‌نامه به طور پیش فرض بر روی tmp/ وجود دارد. روی بعضی از سیستم‌های قدیمی این اجازه‌نامه را می‌شود روی فایل‌های معمولی هم تنظیم کرد.

برای تنظیم کردن suid ، sgid و sticky bit از جدول زیر استفاده می‌کنیم.

نوع دسترسی عدد اختصاص داده شده
suid ۴۰۰۰
sgid ۲۰۰۰
sticky bit ۱۰۰۰

اگر suid تنظیم شود، در قسمت صاحب (۳ کاراکتر اول از رشته ۹ کاراکتری)، به جای کاراکتر s ، x قرار می‌گیرد.

chmod 4777 suid
ls -l suid

-rwsrwxrwx 1 alieblice alieblice 7 2013-01-29 12:50 suid

اگر sgid تنظیم شود، در قسمت گروه (۳ کاراکتر دوم از رشته ۹ کاراکتری)، به جای s ، x قرار می‌گیرد.

chmod 2777 sgid
ls -l sgid

-rwxrwsrwx 1 alieblice alieblice 4 2013-01-29 12:55 sgid

اگر stiky تنظیم شود، در قسمت دیگران (۳ کاراکتر سوم از رشته ۹ کاراکتری)، به جای t ، x قرار می‌گیرد.

chmod 1777 test-directory
ls -l test-directory

drwxrwxrwt 2 alieblice alieblice 4096 2013-01-29 12:58 test-directory

نوشته شده توسط «مجید کمالی»

منبع

http://30li.ir

محمد صادق قاسمیان

یک دوست‌دار نرم‌افزار آزاد و کاربر اوبونتو ۱۳.۰۴ ، طراح حرفه‌ای صفحات وب و مسلط به HTML5, CSS3, JavaScript و PHP :)

شما احتمالا این مطالب را نیز دوست دارید...

۳ بازخورد

  1. منصور می‌گه:

    کامل و جامع بود. ممنون

  2. آیدین می‌گه:

    هرجا به مشکلی برخوردید از این دستور استفاده کنید:
    sudo !!

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *