اطلاعیه

بستن
No announcement yet.

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

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

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

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

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

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

    کد PHP:
    who 
    کد PHP:

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

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

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

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

    دستور chmod :

    نمای کلی دستور:
    کد PHP:
    chmod option … mode … file
    chmod option … octal-mode … file 
    مثال :

    کد PHP:
    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 مشاهده شود)

    کد PHP:
    cd ~/myFolder 
    کد PHP:
    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 به صورت زیر است :

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

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

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

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

    مثال:

    کد PHP:
    ls -
    drwxrwxr-x 2 majid majid 4096 Jan 27 08:07 myFolder1


    کد PHP:
    chmod ug-w myFolder1
    ls 
    -
    dr-xr-xr-x 2 majid majid 4096 Jan 27 08:07 myFolder1


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

    کد PHP:
    ls -
    -rw-rw-r– 1 majid majid 20 Jan 27 07:53 File2.txt

    کد PHP:
    chmod o+wx File2.txt

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


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

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

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

    rw-rw-r–
    110110100


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

    rw- rw- r–
    110 110 100
    6 6 4


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

    کد PHP:
    ls -
    -rw-rw-r– 1 majid majid 20 Jan 27 07:53 File2.txt
    ( 6 6 4 )


    کد PHP:
    chmod 667 File2.txt

    ls 
    -
    -rw-rw-rwx 1 majid majid 20 Jan 27 07:53 File2.txt
    ( 6 6 7 )


    راه راحتتر، استفاده از جدول زیر است :
    نوع دسترسی عدد اختصاص داده شده
    X 1
    W 2
    R 4
    حال کافیست مثلا برای تعیین سطح دسترسی rwx بنویسیم : 1+2+4 = 7

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

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

    کد PHP:
    ls -
    -rw-rw-r– 1 majid majid 260 Jan 27 07:54 File3.txt

    کد PHP:
    chmod -c 777 File3.txt

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


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

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

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


    کد PHP:
    chmod –reference=File2.txt File3.txt 
    -rw-rw-r– 1 majid majid 20 Jan 27 07:54 File3.txt


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

    کد PHP:
    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

    کد PHP:
    chmod -R 777 .
    ls -l myFolder/

    ls -
    -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

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

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

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

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

    برای تنظیم کردن suid ، sgid و sticky bit از جدول زیر استفاده میکنیم :
    نوع دسترسی عدد اختصاص داده شده
    suid 4000
    sgid 2000
    sticky bit 1000
    اگر suid تنظیم شود، در قسمت صاحب (۳ کاراکتر اول از رشته ۹ کاراکتری)، به جای کاراکتر s ، x قرار میگیرد.
    کد PHP:
    chmod 4777 suid
    ls 
    -l suid 
    -rwsrwxrwx 1 alieblice alieblice 7 2013-01-29 12:50 suid


    اگر sgid تنظیم شود، در قسمت گروه (۳ کاراکتر دوم از رشته ۹ کاراکتری)، به جای s ، x قرار میگیرد.
    کد PHP:
    chmod 2777 sgid
    ls 
    -l sgid 
    -rwxrwsrwx 1 alieblice alieblice 4 2013-01-29 12:55 sgid


    اگر stiky تنظیم شود، در قسمت دیگران (۳ کاراکتر سوم از رشته ۹ کاراکتری)، به جای t ، x قرار میگیرد.
    کد PHP:
    chmod 1777 test-directory
    ls 
    -l test-directory 
    drwxrwxrwt 2 alieblice alieblice 4096 2013-01-29 12:58 test-directory
    برای پرمیژن دادن به همه فایل های موجود در یک دایرکتوری از دستور زیر استفاده میکنیم

    کد PHP:
    chmod -R 755 
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 01-13-2020, 06:43 AM.

درباره انجمن منطقه لینوکسی ها

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

شبکه های اجتماعی

ایمیل مدیریت

Habili@linux-zone.org

در حال انجام ...
X