گاهی اوقات بعد از اینکه شما در لینوکس فایلی را از کامپیوتر لوکال خود یا سرور دیگه بر روی سرور لینوکسی خود می آورید میبینید که داخل فایل ها را نمیتوانید ببینید و یا اینکه آنها را نمیتوانید جابجا و تغییری روی آنها بدهید آن به این علت است که سطح دسترسی و گروه های آن به جابجایی دچار اختلال شده است که شما میتوانید به راحتی در ترمینال SSH این مشکل را برطرف کنید :
ابتدا ما باید ببینیم که فایل ها به چه گروه و چه نوع دسترسی دارند تا گروه و دسترسی آن را عوض کنیم
اگر شما در ترمینال ls -l را بزنید چیزی شبیه این را خواهی دید :
[root@server public_html1]# ls -l
drwxr-xr-x 2 root root 4096 Jun 10 14:18 images
drwxr-xr-x 9 root root 4096 Aug 21 20:12 wp-admin
drwxr-xr-x 10 root root 208 Sep 30 16:34 inc
drwxr-xr-x 25 root root 8192 Aug 21 20:12 other
حق دسترسی و مالکیت دو موضوع تقریبا مستقل از هم هستند. ستون اول خروجی دستور بالا حق دسترسی روی فایل و پوشه موجود رو نشون میده ولی ستونهای سوم و چهارم حق مالکیت بر روی فایلها رو نشون میده. لازمه بگم که پوشه هم یک جور فایل است با این تفاوت که آدرس فایلهای دیگر رو درون خودش نگه میداره
دستور اصلی برای تغییر مالکیت فایلها 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 نشون داده خواهد شد.
برای این منظور از دستور 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 sam sam 0 Jan 21 20:10 file1
حالا همون حقوقی رو که خودمون دادیم پس میگیریم 🙂 به این شکل:
chmod ug-rw file1
و این هم نتیجه:
-------r-- 1 sam sam 0 Jan 21 21:10 file1
یا مثلا گرفتن و دادن همه مجوزها به همه کاربران:
chmod a+rw file1
chmod a-rw file1
یا مثلا دادن تنها امکان خواندن به سایر کاربران:
chmod o=r file1
دقت کنید که بکارگیری = باعث از بین رفتن مجوزهای قبلی میشه در حالی که + و – مجوزها رو اضافه و حذف میکنند و کاری به بقیه ندارند. اینها در حقیقت همون عملیات and و or و mask کردن بیتها در کامپیوتر می باشد.