حق دسترسی فایلها در لینوکس به زبان ساده
بارها برام پیش اومده که موقع تغییر فایلهای لینوکس به خاطر مجوز اونها به مشکل خوردم. تصمیم گرفتم یکبار با دقت این مجوزها رو بخونم و به زبان ساده در وبلاگم بنویسم. البته این راهنما قرار نیست کامل باشه و بیشتر یک یادداشته برای مراجعات بعدی خودم.
اگر در یک ترمینال دستور ls -l
یا ll
رو تایپ کنیم چیزی شبیه به این میبینیم:
mehdix@spielplatz:~/Desktop/perm$ ls -l
total 4
drwxrwxr-x 2 mehdix mehdix 4096 Jan 8 09:38 dir1
-rw-rw-r-- 1 mehdix mehdix 0 Jan 8 09:38 file1
حق دسترسی و مالکیت دو موضوع تقریبا مستقل از هم هستند. ستون اول خروجی دستور بالا حق دسترسی روی فایل و پوشه موجود رو نشون میده ولی ستونهای سوم و چهارم حق مالکیت بر روی فایلها رو نشون میده. لازمه بگم که پوشه هم یک جور فایل است با این تفاوت که آدرس فایلهای دیگر رو درون خودش نگه میداره (مراجعه کنید به inode
). در ادامه هر دو رو شرح میدیم.
مالکیت
وقتی یک فایل یا پوشه رو با دستورات و اپراتورهای مختلف از جمله mkdir
(بخوانید make directory) و touch
و echo
و <
و <<
(این دو تا رو نمیدونم چطور بخونیم!) میسازیم مالکیت فایل تولیدی هم به ما داده میشه. در مثال بالا ستون سوم مالک رو نشون میده و ستون چهارم هم گروه کاربری رو. معنی مالک در لینوکس مثل معنی اون در دنیای واقعی است. یعنی مالک تصمیم میگیره چه کسی به فایل اون بتونه «نگاه» کنه یا «دست بزنه». میتونید تصور کنید که پدر مالک ماشینه و اون تصمیم میگیره که اجازه بده که فرزندش به ماشین فقط نگاه کنه یا پشت فرمون هم بشینه.
نکته مهم اینجا اینه که مالک یک فایل تصمیم میگیره که حق دسترسیهای اون فایل چی باشه. جالبه بدونید که مالک میتونه حق دسترسی خواندن و نوشتن و اجرا کردن خودش رو هم روی فایل محدود کنه اما از جایی که مالکیت فایل رو در اختیار داره میتونه دوباره اون رو سر جاش برگردونه.
پس یادمون میمونه که حق مالکیت جدا از حق دسترسی است.
گروه کاربری
هر فایلی حتما یک مالک داره که حق دسترسیهای اون رو تعیین میکنه اما علاوه بر این هر فایلی به یک گروه هم تعلق داره. یک گروه نماینده کاربرانی است که حقوقی متفاوت از کاربر عادی در دسترسی به فایلها دارند. یعنی بواسطه گروهشون به فایلهایی دسترسی داشته باشند که کاربرشون به تنهایی نداره. یک کاربر میتونه در بیش از یک گروه عضو باشه اما یک فایل فقط میتونه متعلق به یک گروه باشه. در مثال بالا هم ستون چهارم گروه کاربری رو نشون میده. روی کامپیوتر اوبونتوی من که یک کاربر بیشتر نداره (البته به استثنای کاربر root) کاربر و گروه کاربری من یکیه. هر کاربر حتما باید عضو یک گروه باشه بنابراین به طور پیشفرض یک گروه بنام خود کاربر روی سیستم موقع نصب ساخته شده. گروه کاربری وقتی به درد میخوره که با بیش از یک کاربر سر و کار داشته باشیم. مثلا بخوایم به همه کاربرهایی که اعتماد داریم اجازه خواندن و نوشتن بدیم و به سایر کاربرهای سیستم فقط اجازه خواندن بدیم. در این صورت میتونیم گروهی که کاربران مورد اعتماد ما عضوش هستند رو به عنوان گروه فایل تنظیم کنیم.
تغییر مالک و گروه کاربری فایلها با chown
هر کاربر میتونه حقوق دسترسی روی یک فایل رو که در مالکیت اوست تغییر بده اما نمیتونه مالکیت فایل رو تغییر بده. این کار باید توسط کاربر root انجام بشه. در ضمن وقتی ما از دستور root
استفاده میکنیم (در سیستمهای مشابه دبیان) داریم با دسترس کاربر روت تغییرات رو انجام میدیم.
هرچند یک کاربر میتونه گروه کاربری یک فایل رو به گروهی جدید تغییر بده به شرط اینکه خودش عضو گروه جدید باشه. به عبارت دیگه یک کاربر میتونه گروه یک فایل رو بین گروههایی که خودش عضو اونهاست دست به دست کنه.
دستور اصلی برای تغییر مالکیت فایلها chown
است (بخوانید change owner) به این ترتیب:
chown username:groupname file1 file2 [or directory]
در دستور بالا username نام کاربری است که میخواهیم فایلها به اون تعلق داشته باشند و نیز groupname نام گروهی است که میخواهیم فایلها به آن تعلق داشته باشند.
این دستور رو به دو شیوه دیگر هم میشه اجرا کرد. فقط برای تغییر مالک فایل به شکل زیر:
chown username file1 file2 [or directory]
و تنها برای تغییر گروه فایل به این شکل (دو نقطه فراموش نشود):
chown :groupname file1 file2 [or directory]
برای تغییر گروه دستور chgrp
را هم میتوان بکار برد (بخوانید change group):
chgrp groupname file1 file2 [or directory]
با بکارگیری فلگ -R تغییرات به همه زیرشاخهها هم اعمال خواهد شد:
chown -R username:groupname directory
حق دسترسی برای فایلها
برای هر فایل میشه سه نوع حقدسترسی تعریف کرد: حقنوشتن و حق خواندن و حق اجرا کردن فایل.
-
حق خواندن یعنی دیدن محتوای فایل و استفاده از دستوراتی مانند
less
وcat
و غیره. حق خواندن با r نشان داده میشود. -
حق نوشتن یعنی تغییر محتویات فایل. فوروارد کردن خروجی یک دستور به یک فایل و اضافه کردن به فایل و مانند اینها. حق خواندن با w نشان داده میشود.
-
حق اجرای فایل اگر ما روی یک فایل حق اجرا داشته باشیم میتوانیم از سیستم عامل بخواهیم که آن فایل را مثل یک برنامه برای ما اجرا کند. اگر فایل باینری باشد حق اجرا کفایت میکند اما اگر فایل اسکریپت باشد از جایی که باید یک برنامه دیگر آنرا بخواند و اجرا کند علاوه بر حق اجرا حق خواندن نیز لازم است. حق خواندن با x نشان داده میشود.
حق دسترسی برای پوشهها
برای هر پوشه هم میشود سه نوع حق دسترسی تعریف کرد. خواندن و نوشتن و جستجو. این معانی با قبلیها تفاوت دارند.
-
حق خواندن به معنای دیدن لیست فایلهای درون یک پوشه است با بکارگیری دستوری مانند
ls
(بخوانید list ). هرچند این به معنی خواندن محتوای فایلهای داخل آن نیست. -
حق نوشتن به معنی امکان افزودن فایلهای جدید به پوشه و همچنین تغییر نام و انتقال فایلهای موجود است، برای مثال با دستور
mv
. -
حق اجرا روی یک پوشه به معنی اینست که پوشه قابل جستجو است و میتوان نام آنرا برای دسترسی به یک فایل دارای حق اجرا بکار برد.
تغییر دسترسیها با chmod
یک کاربر میتونه حق خواندن و نوشتن و اجرای فایلهایی که تحت مالکیت خودش قرار دارند رو تغییر بده. همونطور که در بالا گفتیم rwx حرف اول مجوزهایی هستند که برای هر فایل بکار میره. برای هر فایل سه دست حق دسترسی تعریف شده، هر دست شامل مجوز خواندن و نوشتن و اجرا است. یک دست برای مالک و یک دست برای گروه و یک دست برای سایر کاربران. در مجموع نه بیت برای اینکار بکار رفته که هر سه بیت یک دست حق دسترسی رو نشون میده. هر بیت اگر ست شده باش (یعنی مقدر ۱ بهش داده شده باشه) بسته به اینکه بیت خواندن یا نوشتن یا اجرا باشه با r و w و x نشون داده خواهد شد. حالا با مراجعه دوباره به لیستی که اول نوشته داشتیم اینها رو مرور میکنیم:
mehdix@spielplatz:~/Desktop/perm$ ls -l
total 4
drwxrwxr-x 2 mehdix mehdix 4096 Jan 8 09:38 dir1
-rw-rw-r-- 1 mehdix mehdix 0 Jan 8 09:38 file1
در مثال بالا خطهای تیره در ستون اول نماینده بیتهایی هستند که ست نشدهاند (مقدارشان صفر است). به ترتیب از چپ به راست اولین بیت اگر d باشد یعنی یک پوشه است اگر l باشد یعنی لینک سمبلیک است و اگر - باشد یعنی فایل معمولی است. نه سه تای بعدی مجوزهای مالک سه تای دوم مجوزهای گروه و سه تای سوم مجوزهای سایر کاربران هستند.
برای این منظور از دستور chmod
(بخوانید change mode) استفاده میکنیم:
chmod [references][operator][modes] file1 ...
در دستور بالا references
برای انتخاب سِت مورد نظر است، مالک و/یا گروه و/یا سایر کاربران. جدول زیر نشاندهنده حروفی است که به این منظور بکار میرود:
رفرنس | کلاس | شرح |
---|---|---|
u | user | مالک فایل |
g | group | کاربرانی که عضو گروه فایل هستند |
o | other | کاربرانی که عضو گروه فایل نیستند |
a | all | همه موارد بالا |
در ادامه با مثال کاربرد این حروف را میبینیم. اوپراتورها هم یا + یا - یا = هستند:
- به علاوه + به معنی افزودن یک مود به رفرنسهای نامبرده است
- منها - به معنی حذف یک مود از رفرنسهای نامبرده است
- مساوی = به معنی اعمال یک مود به همه رفرنسهاست
مودها یا حالتها هم همان حق خواندن و نوشتن و اجرا هستند که البته سه مود دیگر بنامهای X (با حرف بزرگ) و s و t هم داریم که فعلا به آنها نمیپردازیم.
حالا چند مثال. فایل یک از مثال بالا را تغییر میدهیم:
chmod ug+rw file1
یعنی به کاربر مالک و گروه مالک حق خواندن و نوشتن را اضافه کن و این شد نتیجه:
-rw-rw-r-- 1 mehdix mehdix 0 Jan 8 10:20 file1
حالا همون حقوقی رو که خودمون دادیم پس میگیریم :) به این شکل:
chmod ug-rw file1
و این هم نتیجه:
-------r-- 1 mehdix mehdix 0 Jan 8 10:20 file1
یا مثلا گرفتن و دادن همه مجوزها به همه کاربران:
chmod a+rw file1
chmod a-rw file1
یا مثلا دادن تنها امکان خواندن به سایر کاربران:
chmod o=r file1
دقت کنید که بکارگیری = باعث از بین رفتن مجوزهای قبلی میشه در حالی که + و - مجوزها رو اضافه و حذف میکنند و کاری به بقیه ندارند. اینها در حقیقت همون عملیات and و or و mask کردن بیتها در کامپیوتره.
نوشتن این یادداشت باعث شد خودم بهتر این موارد رو به خاطر بسپرم. موارد بیشتری هم هست که بهرحال فهم این نکات اولیه به یادگیری بقیه هم کمک میکنه. منابعی هم که بکار گرفتم در انتهای مطلب1234 هست.
سلام مطلب خیلی خوب و بدرد بخوری نوشتی ، من اینو به عنوان رفرنس به چند تا از دوستانی که تازه با لینوکس و مباحث مرتبط بهش آشنا و درگیر شدن معرفی کردم ، از قول خودم و اونها ازت تشکر می کنم. یه سوال هم خودم ازت دارم ، چطور میشه کاری کرد که پرمیشن هایی که روی فایل ها اعمال شدن طور دیگه ای اعمال بشن ، صبر کن برای روشن تر شدن موضوع یک مثال بزنم : فرض کن همین الان یه کوول دیسک به سیستمت متصل کنم ، با فرض اینکه قبلا مجوز تمام فایل ها رو 777 اعمال کرده باشم ، ٬الان٬ مجوز تمام فایل ها 644 شده! /n نظرت در مورد ست کردن پرمیشن هنگام مونت کردن یک فایل سیستم چیه؟ اگر چیزی در موردش می دونی که حس می کنی به درد من و دوستام که از مراجعه کنندگان به این رفرنس هستیم می خوره حتما بگو. تشکر
باعث خوشحالیه که مطلب به دردتون خورده. در مورد مثالی که زدی نوع پارتیشن روی کولدیسک رو عنوان نکردی. یک مثال قابل تولید هم برای من اگر بگی میتونم امتحان کنم ببینم دقیقا مشکل چیه.
نوع فایل سیستم رو ex4 در نظر بگیر سعی می کنم سوالم رو روشنتر بیان کنم مثال : فرض کن من یک کول دیسک دارم که از قبل پرمیشن تمام فایل هاش رو ۷۷۷ گذاشتم ، در سیستم یکی از دوستانم (در اینجا مثلا شما ) کول دیسک رو به پورت usb می زنم و فایل سیستم مونت می شه ولی فایل ها با پرمیشنی غیر از چیزی که قبلا ست کرده بودم نمایش داده میشن مثلا read only میشن یا حالت اجرایی ازشون گرفته میشه. می خوام بدونم چطور میشه فهمید که چطور میشه اینکارو کرد ، منظورم اینه که هنگام مونت کردن بگیم که مثلا همه ی فایل ها این device فقط خواندنی مونت بشن تشکر
من در این مورد مقداری مطالعه کردم ولی تنها نکتهای که بهش رسیدم همون حدس اولم بود. این مشکلیه که با پارتیشنهای FAT و NTFS پیش میآد. چون اونا مدل پرمیشن لینوکس رو ساپورت نمیکنند. اما در مورد این مشکل با ext4 اطلاعی ندارم.
سپاس از شما. مطلب خیلی مفید و بلیغی بود. خواهش می کنم در مورد دسترسی هایی که با عدد مشخص میشه هم یه توضیحی بدید. مثلا 777 ، 755 و …
مطلبی در این مورد نوشتم، ببین: http://mehdix.ir/linux-perm…
با سلام خدمت مدیریت سایت بنده میخام در محیط لینوکس یعنی آبونتو عمل ماسک کردن mask بر روی داده های انجام بدم یعنی داده های روی کشور ایران را جدا کنم از بقیه کشور های اطراف یعنی مرز سیاسی را برش بزنم و خروجی کار فقط بشه ایران .. چون داده ها کل خاورمیانه رو در برمی گیره میشه کمک بفرماید ؟؟!
سلام مختار، برای اینکه بتونم بهت کمک بدردبخوری بکنم باید مشکلت رو دقیق شرح بدی، عملی که گفتی چیز شناخته شدهای نیست که من جوابی آماده داشته باشم. شرح بده چه کار کردی، با کدام زبان، کدام داده، کدام فرمت، کدام خطا، و الی آخر.
احسنت خیلی عالی بود … خیلی وقته دنبال چنین چیزی بودم ممنون …
احسنت خیلی عالی بود … خیلی وقته دنبال چنین چیزی بودم ممنون …
ببخشید من نمیتونم تغییراتی که در proxychains.conf میدم را سیو کنم و خطا میده اید چیکار کنم?
سلام مرسی از مطالب مفیدتون. انشالا همیشه موفق و سلامت باشین و مطالبی که بلدینو به همین صورت برا همه انتشار بدین
سلام خسته نباشید استاد من برنامه یا همون.apk لینوکس رو در گوشیم نصب کردم ولی هر چی دستور >ls وارد میکنم نمیاد بالا یا مینویسه نوت فوند not fuond خواهش میکنم بگید راه حلش چیه چون تازه کارم زیاد وارد نیستم دارم کمکم دستورات رو یاد میگیرم
سلام، اگر بهتر توضیح بدی بهتر میشه بهت کمک کرد. لینوکس برنامهی اندروید نیست که apk داشته باشه. اگر قصد بکاربردن دستورات رایج یونیکسی روی گوشیت رو داری برنامهی ترموکس رو نصب کن. اونجا میتونی فرامین لینوکسی رو که دیدی امتحان کنی.
سلام و عرض ادب.در کالی لینوکس ۲۰۲۰.۴ بر روی فولدر compact wireless در دکستاپ نشان قفل زده شده است.چگونه این فولدر را حذف نمایم.هر کاری کردم نشد راهنمایی بفرمایید.با سپاس.
سلام و عرض ادب.در کالی لینوکس ۲۰۲۰.۴که روی vmware 10 در ویندوز هفت ۳۲ بیتکالی لینوکس ۳۲ بیت نصب کردم. بر روی فولدر compact wireless در دکستاپ نشان قفل زده شده است.چگونه این فولدر را حذف نمایم.هر کاری کردم نشد راهنمایی بفرمایید.با سپاس.
سلام امیر. من کاربر کالیلینوکس نیستم و مشکلی هم که ذکر کردی به یک ابزار شناخته شده مربوط نمیشه که راهحلی به فکرم برسه. ولی باید ببینی دسکتاپی که کالی استفاده میکنه چیه. هر دسکتاپ تنظیماتش رو روی دیسک جایی ذخیره میکنه که احتمالا با حذف یا تغییر اون بتونی مشکل رو رفع کنی.