تغییر permission در لینوکس + مجوز سطح دسترسی و دستور Chmod
مجوز سطح دسترسی ها در لینوکس
مجوزهای فایل (File permissions) کنترل می کنند که کدام عملکرد خواندن، نوشتن، و اجرا بتواند توسط کدام کاربر انجام شود. خواندن، نوشتن، و اجرا سه اقدامی هستند که برای هر فایل انجام میشود، یعنی اگر میخواهید فایلی را باز کنید، داخلش محتویاتی اضافه کنید یا آنرا اجرا کنین نیاز به تنظیمات File permissions شاید خواهید داشت. کاربران در سه دسته کلی دسته بندی می شوند: کاربران عادی، گروه ها و دیگران. لینوکس به کاربران اجازه می دهد تا مجوزها را در یک سطح بسیار دقیق تنظیم کنند.
سه دستور مهم وجود دارد که هنگام مدیریت مجوزهای فایل از آنها استفاده خواهید کرد، chmod یکی از مهمترین دستورات است. ما در این آموزش در مورد دستور chmod بحث خواهیم کرد
- chmod (Change mode)
- chown (Change ownership)
- chgrp (Change group)
دستور chmod در لینوکس
chmod دستوری است که به شما امکان می دهد مجوزهای یک فایل یا دایرکتوری را برای دسترسی کاربر تغییر دهید.
chmod <options> <permissions> <file name>
User Level permissions (مجوز های دسترسی کاربر)
این عملیات مجوزها را در سطح کاربر کنترل می کند
u – Grant permission to a user
g – Grant permission to a group (A Group of users)
o – Grant permission to others (who do not come under either of the above).
File Level permissions (مجوز های دسترسی فایل ها)
r – Grants read permission
w – Grant write permission
x – Grant execute permission
دستور r برای مجوز خواندن اطلاعات، w برای نوشتن و x برای اجرا است. این عملیات باید با یک عملگر ‘+’ یا ‘-‘ انجام شود. ‘+’ نشان دهنده اضافه کردن یک مجوز جدید و ‘-‘ نشان دهنده حذف مجوز موجود است.
مثلا دستور زیر مجوز خواندن را برای فایل sample.txt اضافه می کند.
chmod +r sample.txt
دستور زیر فایل را قابل اجرا میکند
chmod +x sample.sh
دستور زیر مجوز خواندن فایل را حذف میکند
chmod -r sample.sh
دستور زیر مجوز نوشتن فایل را حذف میکند
chmod -w sample.sh
دستور زیر مجوز نوشتن، خواندن و اجرای فایل sample را حذف میکند.
chmod -rwx sample.sh
سطح دسترسی در لینوکس
نحوه اضافه کردن یا حذف کردن دسترسی به پوشه ها (Directories) در لینوکس
با فرض اینکه داخل پوشه /home هستید، با استفاده از chmod امکان تغییر پرمیژن پوشه هایی که داخل این پوشه /home هستند را داریم. یک دایرکتوری به نام locked_directory ایجاد میکنیم و مجوز خواندن را ازش حذف میکنیم. یعنی اگر بخواهم محتویات پوشه را با استفاده از دستور ls بخوانیم، در نهایت با پیغام خطای “Permission Denied” مواجه می شیم.
chmod -r locked_directory/
اما ! باتوجه به کد بالا میتوانیم دایرکتوری دیگری در داخل locked_directory به نام dir1 ایجاد کنیم و فایلها و پوشهها را در dir1 باتوجه به اینکه دایرکتوری locked_directory را از حالت read خارج کردیم، محتویات پوشه داخلش را بخوانیم، یعنی /home/locked_directory/dir1
لینوکس سطح بسیار دقیقی از مجوزهای فایل را مدیریت می کند. اگر میخواهید مجوزها را روی دایرکتوری والد و همه دایرکتوریهای فرزند آن اعمال کنید، باید یک flag انحصاری با دستور chmod ارسال کنید، یعنی -R. پارامتر R به معنای اعمال همان مجوزها به صورت بازگشتی برای همه زیرشاخه ها (دایرکتوری های فرزند) است. بنابراین این مجوز برای فرزند نهایی یک فایل/دایرکتوری اعمال خواهد شد.
sudo chmod -R <permission> <filename>
دستور زیر پوشه و زیر پوشه های locked_directory را از حالت خواندن خارج میکند.
sudo chmod -R -r locked_directory
راه دیگر برای تنظیم permissions با استفاده از Octal Mode
میتوانید از Octal برای کنترل مجوزهای فایل استفاده کنید. میتوانیم از اعداد برای نمایش مجوزهای فایل استفاده کنیم. هنگامی که مجوزها را با استفاده از حالت Octal تغییر می دهید، مجوزهای سه گانه را با استفاده از عدد (4، 2، 1 یا ترکیبی از 4، 2، و 1) میتوان نشان داد.
با عدد 777 همه دسترسی ها به این فایل داده شده.
chmod 777 install.sh
یا با عدد 000 همه دسترسی ها از این فایل گرفته شده
chmod 000 install.sh
Read r 4
Write w 2
Execute x 1
chmod 777 install.sh
اولین عدد (7) نشان دهنده مجوز برای یک کاربر است: 7 = ( 4 (خواندن – read) +2 (نوشتن – write) +1 (اجرا – execute))
عدد دوم (4) نشان دهنده مجوزهای یک گروه است: 4 (خواندن – read)
عدد سوم (4) نشان دهنده مجوز برای دیگران است: 4 (خواندن – read)
نحوه یافتن مجوزهای یک فایل
میتوانیم مجوزهای موجود یک فایل را با استفاده از دستور ls پیدا کنیم. افزودن پارامتر -l و نام فایل با دستور ls اطلاعات بیشتری در مورد فایل از جمله مجوزها نشان می دهد. (به جای install.sh اسم فایل خودتون قرار بدید)
ls -l install.sh