در محیط لینوکس، هر فایل و دایرکتوری یک مالک (یک user، group یا service) دارد که تضمین میکند فایل مدیریت شده و دارای پرمیژنهای دسترسی مناسب است. در این آموزش به شما نشان خواهیم داد که چگونه از دستور chown (تغییر مالک) در لینوکس برای تغییر مالکیت فایلها، دایرکتوریها یا symbolic links به یک کاربر دیگر استفاده کنید.
در بیشتر موارد، کاربر یا سرویسی که فایل یا دایرکتوری را ایجاد میکند، به عنوان مالک، دارای امتیاز خواندن(read)، نوشتن(write) و اجرا(execute) برچسب گذاری شده و سایر کاربران و خدمات بسته به نیازهایشان از امتیازات انتخابی برخوردار میشوند.
نکته مهم در مورد دسترسی به فایل و دایرکتوری در لینوکس، سهولت تغییر مجوزهای فایل است. برای بررسی و تغییر مجوزهای فایل و دایرکتوری میتوانید از چندین دستور و ابزار اصلی استفاده کنید.
سینتکس دستور chown در لینوکس
chown یک دستور قوی است که ا از فلگها و گزینههایی پشتیبانی میکند که رفتار دستور را در ترمینال تغییر میدهند. توجه داشته باشید که به دلایل امنیتی، برای اجرای دستور chown به امتیازات superuser نیاز دارید.
سینتکس اصلی دستور به شرح زیر است:
# chown [OPTIONS] USER[:GROUP] FILE(s)
- [OPTIONS] – دستور ممکن است با یا بدون گزینههای اضافی استفاده شود
- [USER] – نام کاربری مالک فایل جدید یا User ID عددی آنها
- [:] – به یاد داشته باشید که هنگام تغییر گروه یک فایل از دونقطه استفاده کنید
- [Group] – تغییر مالکیت گروهی یک فایل یک اقدام اختیاری است. توجه داشته باشید که همه اعضای گروه به فایل دسترسی دارند
- FILE – فایل مورد نظر
نسخه دستور chown را بررسی کنید
باید بدانید که دستور chown بخشی از زنجیره ابزار گنو (GNU Core Utilities) است. بدان معناست که این دستور در تمام سیستم عاملهای مبتنی بر گنو در دسترس است. با این حال، نسخه دستور ممکن است در توزیع سیستم عامل متفاوت باشد.
در این آموزش، سیستم تست ما دارای Ubuntu 18.04.2 LTS با نسخه chown 8.28 است. از آنجایی که ممکن است تفاوتهای عملکردی ظریفی در نسخههای chown وجود داشته باشد، توصیه میکنیم قبل از ادامه آموزش، نسخه دستور را بررسی کنید.
برای تعیین نسخه chown نصب شده بر روی سیستم خود، دستور زیر را وارد کنید:
# chown --version
خروجی باید شبیه موارد زیر باشد:
مشاهده و تغییر مالکیت فایل و دایرکتوری
اکنون ببینیم چگونه میتوانید از این دستور برای مشاهده و تغییر مالکیت فایل و دایرکتوری استفاده کنید. ما در مورد سناریوهای خاصی صحبت خواهیم کرد که در آن شما میتوانید این دستور را برای تغییر مالکیت این منابع اعمال کنید.
پیش نیازها
در اینجا پیش نیازهایی وجود دارد که باید برای آزمایش ایده های ارائه شده در این آموزش داشته باشید:
- یک توزیع اصلی لینوکس
- یک حساب کاربری با امتیازات sudo
خرید سرور مجازی در پنج موقعیت جغرافیایی ایران، ترکیه، هلند، آلمان و آمریکا با قابلیت تحویل آنی در پارسدو فراهم است.
نحوه تایید مالکیت فایل در لینوکس
قبل از ایجاد هرگونه تغییر در فایلها و دایرکتوریها، باید مالکیت فعلی را شناسایی و تایید کنید که از حقوق مناسب برای انجام عملیات برخوردار هستید.
برای بررسی مالکیت و گروه فایلها و دایرکتوریها در دایرکتوری فعلی، دستور ls زیر را اجرا کنید:
# ls -l
خروجی دستور در سیستم آزمایشی ما آمده است:
تغییر مالکیت کاربر و گروه
می توانید از دستور chown برای تایید و تنظیم مجوزهای سطح کاربر و گروه استفاده کنید. برای مثال، میتوانید دستور زیر را برای تغییر و تایید مالکیت کاربر و گروه اجرا کنید.
# chown --from=CurrentUser:CurrentGroup NewUser:NewGroup FILE
برای مثال، دستور زیر را اجرا کنید تا مالکیت کاربر و گروه فایل sample3 را از root (مالک اصلی) و group2 (گروه اصلی) به linuxuser (مالک جدید) و group3 (گروه جدید) تغییر دهید.
# chown --from=root:group2 linuxuser:group3 sample3
فقط مالک را تغییر دهید
دستور chown بسیار انعطاف پذیر است و شما میتوانید فقط مالکیت کاربر یک فایل را تغییر دهید. برای این کار، توصیه می کنیم از گزینه –from با دستور زیر برای تغییر مالک فعلی یک فایل استفاده کنید. توجه داشته باشید که از آنجایی که گروه در سینتکس ذکر نشده است، مالکیت گروه بدون تغییر باقی خواهد ماند.
# chown --from=CurrentUser NewUser FILE
به عنوان مثال، دستور زیر مالکیت فایل را از root (مالک فعلی) به linuxuser (کاربر جدید) تغییر می دهد:
# chown --from=root linuxuser sample3
فقط گروه را تغییر دهید
درست مانند بخش قبل، می توانید مالکیت گروهی یک فایل را با گزینه –from که در دستور زیر ذکر شده است تغییر دهید. توجه داشته باشید که از آنجایی که کاربر در دستور ذکر نشده است، مالکیت سطح کاربر تغییر نخواهد کرد:
# chown --from=:CurrentGroup :NewGroup FILE
به عنوان مثال، دستور زیر مالکیت گروه را از group3 (گروه فعلی) به group4 (گروه جدید) تغییر می دهد بدون اینکه مالکیت کاربر را مختل کند.
# chown --from=:group3 :group4 FILE
مهم: اگر هنگام اجرای دستور خطایی مشاهده کردید، بررسی کنید که یک کولون(:) با نام هر دو گروه قرار دادهاید.
مالکیت یک یا چند فایل و دایرکتوری را تغییر دهید
می توانید دستور chown را برای تغییر مالکیت یک یا چند فایل اعمال کنید. بیایید به این سناریوها نگاه کنیم:
مالکیت یک فایل یا دایرکتوری را تغییر دهید
دستور استاندارد chown برای تغییر مالکیت یک فایل/دایرکتوری به شرح زیر است:
chown NewUser FILE
همانطور که می بینید، سینتکس از نام کاربری جدید و نام فایل استفاده میکند.
به عنوان مثال، دستور زیر مالکیت فایلی به نام sample را به کاربر test منتقل میکند.
# chown test sample
تغییر مالکیت با ذکر شناسه کاربری (UID)
علاوه بر نام کاربری، می توانید از یک User ID با دستور chown استفاده کنید.
به عنوان مثال، دستور زیر مالکیت فایل sample2 را به 1002 UID منتقل میکند:
# chown 1002 sample2
مهم: باید مطمئن شوید که هیچ نام کاربری مشابه با UID که با دستور استفاده میکنید وجود ندارد. در مواردی که دستور chown همان نام کاربری و UID را پیدا میکند، نام کاربری را بر UID ترجیح میدهد.
تغییر مالکیت چندین فایل لینوکس
اجرای چندباره هر دستوری میتواند خیلی سریع خسته کننده شود. به همین دلیل است که chown به شما این امکان را میدهد که مالکیت چندین فایل را در یک حرکت تغییر دهید. برای این کار، پس از مشخص کردن کاربر جدید، لیست فایلهای مورد نظر را اضافه و اطمینان حاصل کنید که بین نام هر فایل یک فاصله وجود دارد.
به عنوان مثال، دستور زیر مالکیت فایل های sample2 و sample3 را به کاربر root تنظیم می کند:
# chown root sample2 sample3
حتی میتوانید فایلها و دایرکتوریها را در یک فرمان واحد گروهبندی کنید، بدون اینکه بر اجرا تاثیری داشته باشید. برای این منظور مثال زیر را در نظر بگیرید:
# chown root sample3 Dir1
ویرایش گروه یک فایل یا دایرکتوری
میتوانید گروه مرتبط با یک فایل یا دایرکتوری را تغییر دهید و مالکیت را دست نخورده باقی بگذارید که مانند دستور chgrp (تغییر گروه) عمل میکند.
مهم است که توجه داشته باشید که قبل از نام گروه ها یک دونقطه (:) در دستور chown وجود دارد. حذف کولون می تواند پیام های خطا ایجاد کند.
دستور برای تغییر مالکیت گروه به شرح زیر است:
# chown :NewGroup FILE
مثال زیر را در نظر بگیرید که در آن از دستور chown برای تغییر گروه فایل sample3 از grouptest (گروه قدیمی) به group3 (گروه جدید) استفاده کردیم:
# chown :group3 sample3
می توانید چندین نام فایل یا دایرکتوری را فهرست کنید تا تغییرات انبوه را در مالکیت گروه انجام دهید.
تغییر گروه فایل با استفاده از شناسه گروه (GID)
مشابه استفاده از UID برای تغییر مالکیت کاربر، شما می توانید از یک شناسه گروه (GID) به جای نام گروه برای تغییر گروه فایل استفاده کنید.
به عنوان مثال، دستور زیر مالکیت گروه فایل sample را به 1003 GID تغییر می دهد:
# chown :1003 sample
توجه داشته باشید که قبل از GID یک دونقطه وجود دارد تا نشان دهد که یک شناسه گروهی است.
هم مالکیت و هم مالکیت گروه را تغییر دهید
میتوانید مالک و مالکیت گروه را در یک دستور chown مجدد به شرح زیر اختصاص دهید:
# chown NewUser:NewGroup FILE
به عنوان مثال، دستور زیر linuxuser را به عنوان مالک جدید و group2 را به عنوان گروه جدید برای فایل sample2 اختصاص می دهد:
# chown linuxuser:group3 sample3
مطمئن شوید که هیچ فضایی در اطراف کولون وجود ندارد.
گروه را به تراز با گروه اصلی کاربر تغییر دهید
هنگامی که هیچ گروهی به صراحت ذکر نشده است، می توانید از دستور chown برای تنظیم گروه فایل به گروه ورود پیش فرض مالک استفاده کنید.
برای این کار، کاربر جدید را وارد کنید، بعد دونقطه و سپس فایلی را که میخواهید هدف قرار دهید، بدون فاصله بین آن وارد کنید:
# chown NewUser: FILE
مثال زیر را در نظر بگیرید که مالکیت گروه را تغییر میدهد تا با گروه ورود به سیستم linuxuser مطابقت داشته باشد:
# chown linuxuser: sample3
مالکیت و تنظیمات گروه را از یک فایل به فایل دیگر تغییر دهید
در برخی موارد، میخواهید مالکیت کاربر و گروه فایلهای موجود را برای سایر فایلها و دایرکتوریهای سیستم منعکس کنید.
توصیه می کنیم از گزینه –reference در دستور chown برای تکرار تنظیمات از یک فایل به فایل دیگر استفاده کنید. سینتکس دستور به صورت زیر است:
# chown --reference=ReferenceFILE FILE
برای جلوگیری از مواجه شدن با پیام خطا مانند موارد زیر باید در مورد نام فایلها بسیار مراقب باشید:
تغییر مالکیت فایل به صورت بازگشتی
میتوانید دستور chown را برای تغییر مالکیت برای همه فایلها و زیر شاخهها در یک دایرکتوری مشخص اعمال کنید. برای انجام این کار به صورت بازگشتی، کافیست گزینه -R را به دستور اضافه کنید. سینتکس دستور به صورت زیر است:
# chown -R NewUser:NewGroup DirNameOrPath
به عنوان مثال، دستور را برای تغییر بازگشتی مالک و گروه برای همه فایلها و زیر شاخهها در دایرکتوری Dir1 اعمال میکنیم:
# chown -R linuxuser:group3 Dir1
مالکیت Symbolic Link را با chown تغییر دهید
برای تغییر مالک Symbolic Link، از گزینه -h استفاده کنید. اگر این گزینه را حذف کنید، فرمان chown مالکیت فایل لینک شده را به جای Symbolic Link تغییر میدهد.
تصویر زیر را در نظر بگیرید که رفتار پیشفرض دستور chown را در یک Symbolic Link در زمانی که گزینه -h استفاده نمیشود، نشان میدهد.
همانطور که میبینید، مالکیت کاربر و گروه Symbolic Link بدون تغییر باقی میماند. در عوض، دستور این مقادیر را برای فایل متنی تغییر میدهد.
حال، زمانی که از دستور با فلگ -h برای اعمال تغییرات در symlink استفاده میکنیم:
# chown -h NewUser:NewGroup SymbolicLink
نمایش جزئیات اجرای دستور
بهطور پیشفرض، اطلاعات فرآیند دقیق دستور chown را در ترمینال نمیبینید. در نتیجه، هیچ پیام وضعیتی را نمیبینید.
با این حال، میتوانید از یکی از پرچمهای زیر برای دسترسی به اطلاعات عملیات زیربنایی استفاده کنید:
- گزینه -v جزئیات فرآیند را ایجاد میکند، حتی اگر مالکیت آن بدون تغییر باقی بماند.
- گزینه -c اطلاعات خروجی را به طور انحصاری هنگامی که تغییری در مالک یا گروه فایل هدف وجود دارد ارائه می دهد.
به عنوان مثال، هنگامی که از دستور زیر برای تعیین مالک فعلی به عنوان مالک جدید فایل sample2 استفاده می کنیم:
# chown -v linuxuser sample2
اگر -v را با -c جایگزین کنید، هیچ پیامی در این سناریو وجود نخواهد داشت زیرا هیچ تغییری در مالک یا گروه وجود ندارد.
پرچم های -c و -v به ویژه در هنگام برخورد با دستورات chown بازگشتی ارزشمند هستند. به مثال زیر توجه کنید:
# sudo chown -v -R test sample*
سرکوب خطاها در اجرای دستور
هنگام اجرای دستور chown با افزودن پرچم -f می توانید از نمایش پیام های خطای احتمالی جلوگیری کنید.
سینتکس دستور به صورت زیر است:
# chown -f NewUser FILE
سناریویی را در نظر بگیرید که در آن دستور زیر یک خطای دقیق ایجاد می کند:
# sudo chown linuxuser symblinks
حالا وقتی دستور را با یک اشتباه دوباره اجرا می کنیم (linuxusers به جای linuxuser)، پرچم -f برای سرکوب پیام خطا:
# sudo chown -f linuxusers symblinks
نتیجه
با آموختن سینتکس استفاده از دستور chown در لینوکس برای تغییر مالکیت فایل و گروه، بسیار مهم است که هنگام انجام این تغییرات احتیاط کنید. مدیریت دسترسی (پرمیژن) کارآمد برای یک سیستم فایل امن و سازمان یافته حیاتی است.
نظرتون برامون مهمه شما اولین نظر رو بنویسید