سلام به همه. این ترجمه مقاله ای از کتاب RedHat RHCSA RHCE 7 RedHat Enterprise است. Linux 7 EX200 و EX300.
فشار دادن: امیدوارم این مقاله نه تنها برای مبتدیان مفید باشد، بلکه به مدیران باتجربهتر نیز کمک کند تا دانش خود را سازماندهی کنند.
بیا بریم

برای دسترسی به فایلها در Linux، از مجوزها استفاده میشود. این مجوزها به سه شیء اختصاص داده میشوند: مالک فایل، مالک گروه و یک شیء دیگر (یعنی هر کس دیگری). در این مقاله، نحوه اعمال مجوزها را خواهید آموخت.
این مقاله با مروری بر مفاهیم اولیه آغاز میشود و پس از آن به بحث در مورد مجوزهای ویژه و لیستهای کنترل دسترسی (ACL) میپردازد. در نهایت، تنظیم مجوزهای پیشفرض از طریق umask و مدیریت ویژگیهای توسعهیافته کاربر را پوشش میدهد.
مدیریت مالکیت فایل
قبل از بحث در مورد مجوزها، باید نقش مالکیت فایلها و دایرکتوریها را درک کنید. مالکیت فایلها و دایرکتوریها برای کار با مجوزها حیاتی است. در این بخش، ابتدا نحوه مشاهده مالک را خواهید آموخت. سپس، نحوه تغییر مالکیت گروه و کاربر فایلها و دایرکتوریها را خواهید آموخت.
نمایش مالک یک فایل یا دایرکتوری
В Linux هر فایل و هر دایرکتوری دو مالک دارد: کاربر و مالک گروه.
این مالکها هنگام ایجاد یک فایل یا دایرکتوری تنظیم میشوند. کاربری که فایل را ایجاد میکند، مالک آن فایل میشود و گروه اصلی که آن کاربر عضو آن است نیز مالک آن فایل میشود. برای تعیین اینکه آیا شما، به عنوان یک کاربر، حق دسترسی به یک فایل یا دایرکتوری را دارید یا خیر، پوسته مالکیت آن را بررسی میکند.
این به ترتیب زیر اتفاق میافتد:
- پوسته بررسی میکند که آیا شما مالک فایلی هستید که میخواهید به آن دسترسی پیدا کنید یا خیر. اگر مالک باشید، به شما مجوزها اعطا میشود و پوسته بررسی را متوقف میکند.
- اگر شما مالک فایل نباشید، پوسته بررسی میکند که آیا شما عضو گروهی هستید که مجوزهای دسترسی به فایل را دارد یا خیر. اگر عضو آن گروه باشید، با مجوزهای تعیینشده برای آن گروه به فایل دسترسی خواهید داشت و پوسته بررسی را متوقف میکند.
- اگر شما نه کاربر هستید و نه مالک گروه، از حقوق سایر کاربران (سایر) برخوردار خواهید بود.
برای دیدن تکالیف مالک فعلی، میتوانید از دستور زیر استفاده کنید ls-lاین دستور، مالک کاربر و گروه را نمایش میدهد. در زیر میتوانید تنظیمات مالک برای دایرکتوریهای موجود در دایرکتوری /home را مشاهده کنید.
[root@server1 home]# ls -l
total 8
drwx------. 3 bob bob 74 Feb 6 10:13 bob
drwx------. 3 caroline caroline 74 Feb 6 10:13 caroline
drwx------. 3 fozia fozia 74 Feb 6 10:13 fozia
drwx------. 3 lara lara 74 Feb 6 10:13 lara
drwx------. 5 lisa lisa 4096 Feb 6 10:12 lisa
drwx------. 14 user user 4096 Feb 5 10:35 user
با استفاده از دستور ls شما میتوانید مالک فایلها را در یک دایرکتوری مشخص نمایش دهید. گاهی اوقات دریافت لیستی از تمام فایلهای روی سیستم که یک کاربر یا گروه مشخص مالک آنها است، میتواند مفید باشد. برای این کار، میتوانید از پیدا کردن. بحث و جدل پیدا کردن -کاربر میتواند برای این منظور استفاده شود. برای مثال، دستور زیر تمام فایلهایی را که کاربر linda مالک آنها است، نمایش میدهد:
find / -user lindaهمچنین می توانید استفاده کنید پیدا کردن برای یافتن فایلهایی که گروه خاصی مالک آنها است.
برای مثال، دستور زیر تمام فایلهای متعلق به گروه را جستجو میکند. کاربران:
find / -group usersتغییر مالک
برای اعمال مجوزهای مناسب، اولین چیزی که باید در نظر بگیرید مالکیت است. برای این کار یک دستور وجود دارد. دلم برات تنگ شدهسینتکس این دستور به راحتی قابل فهم است:
chown кто чтоبرای مثال، دستور زیر مالک دایرکتوری /home/account را به کاربر linda تغییر میدهد:
chown linda /home/accountتیم دلم برات تنگ شده چندین گزینه دارد که یکی از آنها به ویژه مفید است: -Rاحتمالاً میتوانید حدس بزنید که چه کاری انجام میدهد، زیرا این گزینه برای بسیاری از دستورات دیگر نیز موجود است. این گزینه به شما امکان میدهد مالک را به صورت بازگشتی تنظیم کنید، به شما این امکان را میدهد که مالک دایرکتوری فعلی و هر چیزی که در زیر آن قرار دارد را تعیین کنید. دستور زیر مالک دایرکتوری /home و هر چیزی که در زیر آن قرار دارد را به کاربر linda تغییر میدهد:
حالا صاحبانش این شکلی هستند:
[root@localhost ~]# ls -l /home
total 0
drwx------. 2 account account 62 Sep 25 21:41 account
drwx------. 2 lisa lisa 62 Sep 25 21:42 lisa
بیایید انجام دهیم:
[root@localhost ~]# chown -R lisa /home/account
[root@localhost ~]#
اکنون کاربر لیزا مالک دایرکتوری حساب شده است:
[root@localhost ~]# ls -l /home
total 0
drwx------. 2 lisa account 62 Sep 25 21:41 account
drwx------. 2 lisa lisa 62 Sep 25 21:42 lisa
تغییر مالک یک گروه
دو راه برای تغییر مالکیت گروه وجود دارد. میتوانید این کار را با استفاده از دلم برات تنگ شدهاما یک دستور ویژه به نام وجود دارد chgrp، که این کار را انجام میدهد. اگر میخواهید از دستور استفاده کنید دلم برات تنگ شده، استفاده کنید . یا : قبل از نام گروه
دستور زیر هر مالکی از گروه /home/account را به گروه حساب کاربری تغییر میدهد:
chown .account /home/account
شما می توانید استفاده کنید دلم برات تنگ شده چندین روش برای تغییر مالک یک کاربر و/یا گروه وجود دارد. در اینجا چند مثال آورده شده است:
- چوان فاکس myfile1 کاربر lisa را به عنوان مالک فایل myfile1 تعیین میکند.
- chown lisa.sales myfile کاربر lisa را به عنوان مالک فایل myfile و همچنین گروه sales را به عنوان مالک همان فایل تعیین میکند.
- لیزا چوان: فروش فایل من همان دستور قبلی.
- فایل من از chown.sales گروه فروش را به عنوان مالک فایل myfile بدون تغییر مالک کاربر تعیین میکند.
- chown: فایل منِ فروش همان دستور قبلی.
می توانید از دستور استفاده کنید chgrpبرای تغییر مالک یک گروه. بیایید به مثال زیر نگاهی بیندازیم، که میتوانید از آن استفاده کنید. chgrp مالک دایرکتوری حساب را روی گروه فروش تنظیم کنید:
chgrp .sales /home/accountهمانطور که با دلم برات تنگ شده، میتوانید از گزینه استفاده کنید -R с chgrpو همچنین به صورت بازگشتی مالک گروه را تغییر میدهد.
آشنایی با مالک پیشفرض
شاید متوجه شده باشید که وقتی کاربر فایلی ایجاد میکند، مالکیت پیشفرض اعمال میشود.
کاربری که فایلی ایجاد میکند، بهطور خودکار مالک آن فایل میشود و گروه اصلی آن کاربر نیز بهطور خودکار مالک آن فایل میشود. بهطور معمول، این گروهی است که بهعنوان گروه اصلی کاربر در فایل /etc/passwd مشخص شده است. با این حال، اگر کاربری عضو چندین گروه باشد، میتواند گروه اصلی مؤثر را تغییر دهد.
برای نمایش گروه اصلی مؤثر فعلی، کاربر میتواند از دستور زیر استفاده کند: گروه:
[root@server1 ~]# groups lisa
lisa : lisa account sales
اگر کاربر فعلی linda بخواهد گروه اصلی مؤثر را تغییر دهد، از دستور زیر استفاده میکند: نیورپو به دنبال آن نام گروهی که میخواهد به عنوان گروه اصلی مؤثر جدید تعیین کند. پس از استفاده از دستور نیورپ گروه اصلی تا زمانی که کاربر دستوری را وارد کند، فعال خواهد بود. خروج یا از سیستم خارج نمیشه.
در زیر نحوه استفاده کاربر لیندا از این دستور برای تبدیل گروه اصلی به گروه فروش را مشاهده میکنید:
lisa@server1 ~]$ groups
lisa account sales
[lisa@server1 ~]$ newgrp sales
[lisa@server1 ~]$ groups
sales lisa account
[lisa@server1 ~]$ touch file1
[lisa@server1 ~]$ ls -l
total 0
-rw-r--r--. 1 lisa sales 0 Feb 6 10:06 file1
پس از تغییر گروه اصلی مؤثر، تمام فایلهای جدید ایجاد شده توسط کاربر، این گروه را به عنوان مالک گروه خواهند داشت. برای بازگشت به تنظیمات اولیه گروه اصلی، از خروج.
برای اینکه بتوانید از دستور استفاده کنید نیورپ، کاربر باید عضو گروهی باشد که میخواهد از آن به عنوان گروه اصلی استفاده کند. علاوه بر این، میتوان با استفاده از دستور زیر، از رمز عبور گروه برای یک گروه استفاده کرد. gpasswdاگر کاربر از دستور استفاده کند نیورپ، اما عضو گروه هدف نباشد، پوسته از شما رمز عبور گروه را میخواهد. پس از وارد کردن رمز عبور صحیح گروه، یک گروه اصلی مؤثر جدید ایجاد میشود.
مدیریت حقوق اساسی
سیستم مجوز Linux در دهه ۱۹۷۰ اختراع شد. از آنجا که نیازهای محاسباتی در آن زمان محدود بود، سیستم مجوزهای اولیه کاملاً محدود بود. این سیستم مجوزها از سه مجوز استفاده میکند که میتوانند برای فایلها و دایرکتوریها اعمال شوند. در این بخش، نحوه استفاده و تغییر این مجوزها را خواهید آموخت.
آشنایی با مجوزهای خواندن، نوشتن و اجرا
سه مجوز اساسی به شما امکان خواندن، نوشتن و اجرای فایلها را میدهند. این مجوزها هنگام اعمال روی فایلها یا دایرکتوریها، اثرات متفاوتی دارند. وقتی روی یک فایل اعمال میشوند، مجوز خواندن به شما حق باز کردن فایل برای خواندن را میدهد. این بدان معناست که میتوانید محتوای آن را بخوانید، اما همچنین به این معنی است که رایانه شما میتواند فایل را برای انجام کاری با آن باز کند.
برای مثال، یک فایل برنامه که نیاز به دسترسی به یک کتابخانه دارد، باید دسترسی خواندن به آن کتابخانه را داشته باشد. این بدان معناست که مجوز خواندن، اساسیترین مجوزی است که برای کار با فایلها به آن نیاز دارید.
وقتی مجوز خواندن به یک دایرکتوری اعمال میشود، به شما امکان میدهد محتوای آن دایرکتوری را نمایش دهید. باید توجه داشته باشید که این مجوز به شما اجازه خواندن فایلهای موجود در دایرکتوری را نمیدهد. سیستم مجوزها Linux وراثت را نمیشناسد، و تنها راه خواندن یک فایل، استفاده از مجوزهای خواندن آن فایل است.
همانطور که احتمالاً میتوانید حدس بزنید، مجوز نوشتن، وقتی به یک فایل اعمال میشود، امکان نوشتن در فایل را فراهم میکند. به عبارت دیگر، اجازه تغییر محتوای فایلهای موجود را میدهد. با این حال، اجازه ایجاد یا حذف فایلهای جدید یا تغییر مجوزهای فایل را نمیدهد. برای انجام این کار، باید مجوز نوشتن را به دایرکتوری که میخواهید فایل را در آن ایجاد کنید، اعطا کنید. برای دایرکتوریها، این مجوز همچنین امکان ایجاد و حذف زیردایرکتوریهای جدید را فراهم میکند.
مجوز اجرا (Execute permission) چیزی است که برای اجرای یک فایل به آن نیاز دارید. این مجوز هرگز به طور پیشفرض تنظیم نمیشود، که باعث میشود Linux تقریباً کاملاً در برابر ویروسها مصون است. فقط کسی که دسترسی نوشتن به دایرکتوری را دارد میتواند مجوزهای اجرا را اعمال کند.
موارد زیر خلاصهای از کاربرد مجوزهای اصلی است:

استفاده از chmod
این دستور برای مدیریت حقوق استفاده میشود. chmodهنگام استفاده chmod شما میتوانید مجوزهایی را برای کاربر، گروه و موارد دیگر تنظیم کنید. میتوانید از این دستور در دو حالت استفاده کنید: حالت نسبی و حالت مطلق. در حالت مطلق، از سه رقم برای تنظیم مجوزهای پایه استفاده میشود.

هنگام تنظیم مجوزها، مقدار مورد نیاز خود را محاسبه کنید. اگر میخواهید مجوزهای خواندن، نوشتن و اجرا را برای یک کاربر، مجوزهای خواندن و اجرا را برای یک گروه و مجوزهای خواندن و اجرا را برای دیگران در فایل /somefile تنظیم کنید، از دستور زیر استفاده خواهید کرد: chmod:
chmod 755 /somefileوقتی استفاده می کنید chmod به این ترتیب، تمام مجوزهای فعلی با مجوزهایی که شما تعیین کردهاید جایگزین میشوند.
اگر میخواهید مجوزها را نسبت به مجوزهای فعلی تغییر دهید، میتوانید از chmod در حالت نسبی. هنگام استفاده chmod در حالت نسبی، شما با سه شاخص کار میکنید تا نشان دهید چه کاری میخواهید انجام دهید:
- ابتدا، مشخص میکنید که میخواهید مجوزها را برای چه کسی تغییر دهید. برای انجام این کار، میتوانید بین یک کاربر (u) ، گروه (g) و دیگران (o).
- سپس از عملگر برای اضافه کردن یا حذف مجوزها از حالت فعلی یا تنظیم مطلق آنها استفاده میکنید.
- در پایان شما استفاده می کنید r, w и xبرای مشخص کردن مجوزهایی که میخواهید تنظیم کنید.
هنگام تغییر مجوزها در حالت نسبی، میتوانید قسمت "to" را حذف کنید تا مجوزها را برای همه اشیاء اضافه یا حذف کنید. برای مثال، این دستور مجوز اجرا را به همه کاربران اضافه میکند:
chmod +x somefileهنگام کار در حالت نسبی، میتوانید از دستورات پیچیدهتری نیز استفاده کنید. برای مثال، این دستور مجوز نوشتن را به یک گروه اضافه میکند و مجوز خواندن را برای دیگران حذف میکند:
chmod g+w,o-r somefileهنگام استفاده از chmod -R o+rx /data شما مجوز اجرا را برای همه دایرکتوریها و همچنین برای فایلهای موجود در دایرکتوری /data تنظیم میکنید. برای تنظیم مجوز اجرا فقط برای دایرکتوریها و نه برای فایلها، از دستور زیر استفاده کنید. chmod -R o+ rX /data.
حرف بزرگ X تضمین میکند که به فایلها اجازه اجرا داده نمیشود، مگر اینکه فایل از قبل اجازه اجرا را برای برخی از اشیاء تنظیم کرده باشد. این باعث میشود X روشی هوشمندانهتر برای مدیریت مجوزهای اجرا باشد؛ از تنظیم این مجوز برای فایلهایی که نیازی به آن نیست، جلوگیری میکند.
حقوق تمدید شده
علاوه بر مجوزهای اساسی که در مورد آنها خواندید، Linux همچنین مجموعهای از مجوزهای توسعهیافته وجود دارد. اینها مجوزهایی نیستند که به طور پیشفرض تنظیم میکنید، اما گاهی اوقات میتوانند یک مزیت اضافی مفید ارائه دهند. در این بخش، یاد خواهید گرفت که آنها چه هستند و چگونه آنها را پیکربندی کنید.
آشنایی با مجوزهای توسعهیافته SUID، GUID و Sticky Bit
سه مجوز پیشرفته وجود دارد. اولین مورد، مجوز تنظیم شناسه کاربر (SUID) است. در برخی موارد خاص، میتوانید این مجوز را برای فایلهای اجرایی اعمال کنید. به طور پیشفرض، کاربری که یک فایل اجرایی را اجرا میکند، فایل را با مجوزهای خود اجرا میکند.
برای کاربران عادی، این معمولاً به این معنی است که استفاده از برنامه محدود شده است. با این حال، در برخی موارد، کاربر فقط برای انجام یک کار خاص به مجوزهای ویژه نیاز دارد.
برای مثال، موقعیتی را در نظر بگیرید که یک کاربر نیاز به تغییر رمز عبور خود دارد. برای انجام این کار، کاربر باید رمز عبور جدید خود را در فایل /etc/shadow بنویسد. با این حال، این فایل توسط کاربران بدون دسترسی root قابل نوشتن نیست:
root@hnl ~]# ls -l /etc/shadow
----------. 1 root root 1184 Apr 30 16:54 /etc/shadow
مجوز SUID راه حلی برای این مشکل ارائه میدهد. در ابزار /usr/bin/passwd، این مجوز به طور پیشفرض اعمال میشود. این بدان معناست که وقتی رمز عبور تغییر میکند، کاربر به طور موقت امتیازات ریشه را به دست میآورد و به او اجازه میدهد در فایل /etc/shadow بنویسد. میتوانید مجوز SUID را با ls-l مانند s در موقعیتی که معمولاً انتظار دیدن آن را دارید x برای مجوزهای سفارشی:
[root@hnl ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 32680 Jan 28 2010 /usr/bin/passwd
مجوزهای SUID ممکن است مفید به نظر برسند (و در برخی موارد واقعاً مفید هستند)، اما به طور بالقوه خطرناک نیز هستند. اگر به طور نادرست استفاده شوند، ممکن است به طور تصادفی دسترسی ریشه (root access) اعطا کنید. بنابراین، توصیه میکنم فقط با احتیاط شدید از آنها استفاده کنید.
اکثر مدیران سیستم هرگز نیازی به استفاده از آن نخواهند داشت؛ شما فقط آن را در چند فایل مشاهده خواهید کرد که سیستم عامل باید به طور پیش فرض آن را تنظیم کند.
دومین مجوز ویژه، شناسه گروه (SGID) است. این مجوز دو اثر دارد. وقتی روی یک فایل اجرایی اعمال میشود، به کاربری که فایل را اجرا میکند، مجوزهای مالک گروه فایل را اعطا میکند. بنابراین SGID میتواند کم و بیش همان عملکردهای SUID را انجام دهد. با این حال، SGID به ندرت برای این منظور استفاده میشود.
همانند مجوز SUID، SGID نیز به عنوان یک تنظیم پیشفرض برای برخی از فایلهای سیستمی اعمال میشود.
وقتی SGID روی یک دایرکتوری اعمال میشود، میتواند مفید باشد زیرا میتوانید از آن برای تعیین مالک گروه پیشفرض برای فایلها و زیردایرکتوریهای ایجاد شده در آن دایرکتوری استفاده کنید. به طور پیشفرض، وقتی کاربری فایلی ایجاد میکند، گروه اصلی مؤثر او به عنوان مالک گروه برای آن فایل تعیین میشود.
این همیشه خیلی مفید نیست، مخصوصاً از آنجایی که کاربران Red Hat/CentOS گروه اصلی روی گروهی با همان نام کاربر تنظیم میشود که کاربر تنها عضو آن است. این بدان معناست که به طور پیشفرض، فایلهایی که کاربر ایجاد میکند، به صورت گروهی به اشتراک گذاشته میشوند.
موقعیتی را تصور کنید که کاربران لیندا و لوری در بخش حسابداری کار میکنند و عضو یک گروه هستند. حساببه طور پیشفرض، این کاربران عضو یک گروه خصوصی هستند که خودشان تنها عضو آن هستند. با این حال، هر دو کاربر عضو گروه حساب کاربری هستند، اما به عنوان یک پارامتر گروه ثانویه، عضو گروه حساب کاربری نیز میباشند.
به طور پیشفرض، وقتی هر یک از این کاربران فایلی ایجاد میکنند، گروه اصلی مالک آن میشود. بنابراین، به طور پیشفرض، لیندا نمیتواند به فایلهای ایجاد شده توسط لوری دسترسی داشته باشد و برعکس. با این حال، اگر یک دایرکتوری مشترک گروهی (مثلاً /groups/account) ایجاد کنید و مطمئن شوید که مجوز SGID به این دایرکتوری اعمال شده و حساب گروه به عنوان مالک گروه برای این دایرکتوری تنظیم شده است، تمام فایلهای ایجاد شده در این دایرکتوری و تمام زیرشاخههای آن نیز به طور پیشفرض حساب گروه را به عنوان مالک گروه دریافت میکنند.
به همین دلیل، مجوز SGID یک مجوز بسیار مفید برای تنظیم در دایرکتوریهای گروه مشترک است.
مجوز SGID در خروجی نشان داده شده است. ls-l مانند s در موقعیتی که معمولاً مجوز اجرای گروهی را در آن پیدا میکنید:
[root@hnl data]# ls -ld account
drwxr-sr-x. 2 root account 4096 Apr 30 21:28 account
سومین مجوز ویژه، sticky bit است. این مجوز برای محافظت از فایلها در برابر حذف تصادفی در محیطهایی که چندین کاربر دسترسی نوشتن در یک دایرکتوری را دارند، مفید است. وقتی sticky bit اعمال میشود، یک کاربر فقط در صورتی میتواند یک فایل را حذف کند که مالک فایل یا دایرکتوری حاوی فایل باشد. به همین دلیل، از آن به عنوان مجوز پیشفرض برای دایرکتوری /tmp استفاده میشود و همچنین میتواند برای دایرکتوریهای گروه مشترک مفید باشد.
بدون استفاده از sticky bit، اگر کاربری بتواند در یک دایرکتوری فایل ایجاد کند، میتواند فایلها را از آن دایرکتوری نیز حذف کند. در یک محیط گروه عمومی، این میتواند آزاردهنده باشد. کاربران linda و lori را تصور کنید که هر دو دسترسی نوشتن در دایرکتوری /data/account را دارند و این مجوزها را از طریق عضویت در گروه حساب کاربری به دست میآورند. بنابراین، linda میتواند فایلهای ایجاد شده توسط lori را حذف کند و برعکس.
وقتی که شما از sticky bit استفاده میکنید، کاربر فقط در صورتی میتواند فایلها را حذف کند که یکی از شرایط زیر برقرار باشد:
- کاربر مالک فایل است؛
- کاربر، مالک دایرکتوری است که فایل در آن قرار دارد.
هنگام استفاده از ls-l، میتوانید تکه چسبنده را به صورت زیر ببینید t در موقعیتی که معمولاً مجوز اجرا برای دیگران را مشاهده میکنید:
[root@hnl data]# ls -ld account/
drwxr-sr-t. 2 root account 4096 Apr 30 21:28 account/
اعمال حقوق گسترده
برای اعمال SUID، SGID و sticky bit، میتوانید از دستور زیر نیز استفاده کنید. chmodSUID مقدار عددی ۴، SGID مقدار عددی ۲ و sticky bit مقدار عددی ۱ دارد.
اگر میخواهید این مجوزها را اعمال کنید، باید یک آرگومان چهار رقمی به آن اضافه کنید chmodکه رقم اول آن به مجوزهای ویژه اشاره دارد. برای مثال، خط زیر، مجوز SGID را به یک دایرکتوری اضافه میکند و rwx را برای کاربر و rx را برای گروه و سایرین تنظیم میکند:
chmod 2755 /somedirاگر لازم باشد مجوزهای فعلی که قبل از کار با آنها تنظیم شدهاند را ببینید، این کار کاملاً غیرعملی است. chmod در حالت مطلق. (اگر این کار را نکنید، خطر بازنویسی مجوزها وجود دارد.) بنابراین، اگر نیاز به اعمال هر یک از مجوزهای ویژه دارید، توصیه میکنم در حالت نسبی کار کنید:
- برای استفاده از SUID chmod u+s.
- برای استفاده از SGID chmod g+s.
- برای استفاده از مته چسبنده chmod +tو به دنبال آن نام فایل یا دایرکتوری که میخواهید مجوزها را برای آن تنظیم کنید.
این جدول هر آنچه را که باید در مورد مدیریت مجوزهای ویژه بدانید، خلاصه میکند.

نمونهای از کار با حقوق ویژه
در این مثال، شما از مجوزهای سفارشی استفاده میکنید تا اعضای گروه بتوانند فایلها را در یک دایرکتوری گروه مشترک آسانتر به اشتراک بگذارند. شما بیت شناسه گروه ایجاد شده و همچنین بیت چسبنده را اختصاص میدهید و خواهید دید که تنظیم این موارد، ویژگیهایی را اضافه میکند که همکاری را برای اعضای گروه آسانتر میکند.
- یک ترمینال که در آن کاربر لیندا هستید باز کنید. میتوانید با دستور زیر یک کاربر ایجاد کنید. کاربرافزودن لیندا، اضافه کردن رمز عبور لیندا را رمز گشایی کنید.
- با استفاده از دستور زیر، یک دایرکتوری /data و یک زیر دایرکتوری /data/sales در ریشه ایجاد کنید. mkdir -p /data/salesاجرا سیدی /داده/فروشبرای رفتن به کاتالوگ فروش. دویدن لیندا1 را لمس کنید и لیندا2 را لمس کنیدبرای ایجاد دو فایل خالی متعلق به لیندا.
- اجرا کردن سو — لیزا برای تغییر کاربر فعلی به کاربر lisa، که او نیز عضو گروه فروش است.
- اجرا کردن سیدی /داده/فروش و از این دایرکتوری اجرا کنید ls-lدو فایل را مشاهده خواهید کرد که توسط کاربر linda ایجاد شدهاند و به گروه linda تعلق دارند. دستور زیر را اجرا کنید. rm -f لیندا*با این کار هر دو فایل حذف میشوند.
- اجرا کردن لیزا1 را لمس کنید и لیزا2 را لمس کنیدبرای ایجاد دو فایل که متعلق به کاربر lisa هستند.
- اجرا کردن سو - برای ارتقاء امتیازات خود به سطح ریشه.
- اجرا کردن دستور chmod g+s,o+t /data/salesبرای تنظیم بیت شناسه گروه (GUID) و همچنین بیت sticky در دایرکتوری گروه مشترک.
- اجرا کردن سو — لینداسپس اجرا کنید لیندا3 را لمس کنید и لیندا4 را لمس کنیداکنون باید ببینید که دو فایلی که ایجاد کردهاید متعلق به گروه sales هستند، که مالک گروه دایرکتوری /data/sales است.
- اجرا کردن دستور rm -rf لیزا*Sticky bit از حذف این فایلها توسط کاربر linda جلوگیری میکند، زیرا شما مالک آنها نیستید. توجه داشته باشید که اگر کاربر linda مالک دایرکتوری /data/sales باشد، میتواند این فایلها را به هر حال حذف کند!
مدیریت ACL (setfacl، getfacl) در Linux
حتی اگر حقوق گسترده مورد بحث در بالا، قابلیتهای مفیدی را به نحوهی عملکرد اضافه کنند Linux با مجوزها کار میکند، به شما اجازه نمیدهد که در یک فایل به بیش از یک کاربر یا یک گروه مجوز بدهید.
فهرستهای کنترل دسترسی این قابلیت را ارائه میدهند. آنها همچنین به مدیران اجازه میدهند مجوزهای پیشفرض را به شیوهای پیچیده تنظیم کنند، به طوری که مجوزهای تعیینشده ممکن است در دایرکتوریهای مختلف متفاوت باشند.
درک ACL ها
اگرچه زیرسیستم ACL قابلیتهای فوقالعادهای را به سرور شما اضافه میکند، اما یک اشکال دارد: همه ابزارها از آن پشتیبانی نمیکنند. در نتیجه، ممکن است هنگام کپی یا انتقال فایلها، تنظیمات ACL را از دست بدهید و نرمافزار پشتیبانگیری ممکن است در پشتیبانگیری از تنظیمات ACL ناموفق باشد.
ابزار tar از ACL ها پشتیبانی نمیکند. برای اطمینان از اینکه تنظیمات ACL هنگام ایجاد نسخه پشتیبان از بین نمیروند، از ستاره به جای قیر. ستاره با همان گزینههای tar کار میکند؛ فقط پشتیبانی از تنظیمات ACL را اضافه میکند.
همچنین میتوانید با استفاده از دستور زیر از ACL پشتیبان تهیه کنید. دریافتکه میتوان آن را با استفاده از دستور setfacl بازیابی کرد. برای ایجاد نسخه پشتیبان، از دستور getfacl -R /directory > file.aclsبرای بازیابی تنظیمات از یک فایل پشتیبان، از setfacl --restore=file.acl.
عدم پشتیبانی برخی ابزارها نباید مشکلی ایجاد کند. ACLها اغلب به عنوان یک اقدام ساختاری به دایرکتوریها اعمال میشوند، نه به فایلهای منفرد.
بنابراین، تعداد زیادی از آنها وجود نخواهد داشت، فقط تعداد کمی از آنها در مکانهای هوشمندانهای در سیستم فایل اعمال میشوند. در نتیجه، بازیابی ACL های اصلی که با آنها کار میکردید نسبتاً آسان است، حتی اگر نرمافزار پشتیبانگیری شما از آنها پشتیبانی نکند.
آمادهسازی سیستم فایل برای ACLها
قبل از کار با ACLها، ممکن است لازم باشد سیستم فایل خود را برای پشتیبانی از ACLها آماده کنید. از آنجا که ابردادههای سیستم فایل نیاز به گسترش دارند، سیستمهای فایل همیشه به طور پیشفرض از ACLها پشتیبانی نمیکنند. اگر هنگام پیکربندی ACLها برای یک سیستم فایل، پیام "عملیات پشتیبانی نمیشود" را دریافت کردید، ممکن است سیستم فایل شما از ACLها پشتیبانی نکند.
برای رفع این مشکل باید این گزینه را اضافه کنید پایه ACL در فایل /etc/fstab قرار دهید تا سیستم فایل به طور پیشفرض با پشتیبانی از ACL نصب شود.
تغییر و مشاهده تنظیمات ACL با setfacl و getfacl
برای تنظیم ACL، به دستور زیر نیاز دارید setfaclبرای مشاهده تنظیمات فعلی ACL، باید دریافت. تیم ls-l هیچ ACL موجودی را نشان نمیدهد؛ فقط یک علامت + بعد از لیست مجوزها نشان میدهد که نشان میدهد ACLها برای فایل نیز اعمال میشوند.
قبل از پیکربندی ACLها، همیشه ایده خوبی است که تنظیمات فعلی ACL را با استفاده از دریافتدر مثال زیر میتوانید حقوق دسترسی فعلی را همانطور که نشان داده شده است، مشاهده کنید. ls-lو همچنین همانطور که نشان داده شده است دریافتاگر به اندازه کافی دقت کنید، خواهید دید که اطلاعات نشان داده شده دقیقاً یکسان هستند.
[root@server1 /]# ls -ld /dir
drwxr-xr-x. 2 root root 6 Feb 6 11:28 /dir
[root@server1 /]# getfacl /dir
getfacl: Removing leading '/' from absolute path names
# file: dir
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
در نتیجه اجرای دستور دریافت در زیر میتوانید ببینید که مجوزها برای سه شیء مختلف نشان داده شدهاند: کاربر، گروه و سایر. حالا بیایید یک ACL اضافه کنیم تا مجوزهای خواندن و اجرا را به گروه فروش اعطا کنیم. دستور مربوط به این setfacl -mg:sales:rx /dirدر این تیم -m نشان میدهد که تنظیمات فعلی ACL باید تغییر کند. پس از این g:فروش:rx به دستور میگوید که ACL را برای خواندن و اجرا تنظیم کند (rx) برای گروه (g) فروش. در زیر میتوانید ببینید که این دستور به چه شکل است، همچنین خروجی دستور getfacl را پس از تغییر تنظیمات فعلی ACL مشاهده میکنید.
[root@server1 /]# setfacl -m g:sales:rx /dir
[root@server1 /]# getfacl /dir
getfacl: Removing leading '/' from absolute path names
# file: dir
# owner: root
# group: root
user::rwx
group::r-x
group:sales:r-x
mask::r-x
other::r-x
حالا که فهمیدید چگونه یک ACL گروهی تنظیم کنید، فهمیدن ACLها برای کاربران و سایر کاربران آسان است. برای مثال، دستور setfacl -mu:linda:rwx /data به کاربر لیندا در دایرکتوری /data مجوز میدهد، بدون اینکه او را مالک کند یا تکلیف مالک فعلی را تغییر دهد.
تیم setfacl امکانات و گزینههای زیادی دارد. یکی از گزینهها به ویژه مهم است، پارامتر -Rدر صورت استفاده، این گزینه ACL را به تمام فایلها و زیردایرکتوریهایی که در حال حاضر در دایرکتوری که ACL را در آن تنظیم کردهاید، وجود دارند، اعمال میکند. توصیه میشود همیشه هنگام تغییر ACLها برای دایرکتوریهای موجود از این گزینه استفاده کنید.
کار با ACL های پیش فرض
یکی از مزایای استفاده از ACL ها این است که میتوانید به چندین کاربر یا گروه در یک دایرکتوری مجوز اعطا کنید. مزیت دیگر این است که میتوانید هنگام کار با ACL های پیشفرض، وراثت را فعال کنید.
با تنظیم یک ACL پیشفرض، مجوزهایی را که برای همه موارد جدید ایجاد شده در دایرکتوری اعمال میشوند، تعریف میکنید. به خاطر داشته باشید که ACL پیشفرض، مجوزهای فایلها و زیردایرکتوریهای موجود را تغییر نمیدهد. برای تغییر آنها، باید یک ACL معمولی اضافه کنید!
دانستن این نکته مهم است. اگر میخواهید از ACLها برای پیکربندی دسترسی چندین کاربر یا گروه به یک دایرکتوری استفاده کنید، باید ACLها را دو بار تنظیم کنید. ابتدا، از setfacl -R -mبرای تغییر ACL برای فایلهای فعلی. سپس از دستور setfacl -md:، تا از تمام عناصر جدیدی که ایجاد خواهند شد نیز مراقبت کند.
برای تنظیم ACL پیشفرض، فقط باید گزینه زیر را اضافه کنید: d بعد از گزینه -m (ترتیب مهم است!) بنابراین از setfacl -md:g:sales:rx /dataاگر میخواهید فروش گروهی هر آنچه را که در دایرکتوری /data ایجاد میشود، بخواند و اجرا کند.
هنگام استفاده از ACL های پیش فرض، تنظیم ACL برای دیگران نیز میتواند مفید باشد. این کار معمولاً منطقی نیست زیرا میتوانید با استفاده از ... مجوزها را برای دیگران نیز تغییر دهید. chmodبا این حال، کاری که نمیتوانید با آن انجام دهید chmod، برای مشخص کردن مجوزهایی است که باید برای هر فایل جدیدی که ایجاد میشود به سایر کاربران اعطا شود. اگر میخواهید دیگران هیچ مجوزی روی هر چیزی که در /data ایجاد میشود، نداشته باشند، به عنوان مثال، از setfacl -md:o::- /data.
ACLها و مجوزهای معمولی همیشه به خوبی با هم ادغام نمیشوند. اگر یک ACL پیشفرض را به یک دایرکتوری اعمال کنید، سپس مواردی را به آن دایرکتوری اضافه کنید و سپس سعی کنید مجوزهای معمولی را تغییر دهید، ممکن است مشکلاتی ایجاد شود. تغییرات ایجاد شده در مجوزهای معمولی به خوبی در نمای کلی ACL منعکس نمیشوند. برای جلوگیری از مشکلات، ابتدا مجوزهای معمولی را تنظیم کنید، سپس ACL پیشفرض را تنظیم کنید (و سپس از تغییر دوباره آنها خودداری کنید).
مثالی از مدیریت حقوق توسعهیافته با استفاده از ACLها
در این مثال، شما به کار با دایرکتوریهای /data/account و /data/sales که قبلاً ایجاد کردهاید، ادامه خواهید داد. در مثالهای قبلی، مطمئن شدید که گروه فروش (sales) مجوزهای دسترسی به /data/sales و گروه حساب (account) مجوزهای دسترسی به /data/account را دارند.
ابتدا، مطمئن شوید که به گروه حساب، مجوزهای خواندن دایرکتوری /data/sales و به گروه فروش، مجوزهای خواندن دایرکتوری /data/account داده شده است.
سپس ACL های پیش فرض را تنظیم می کنید تا اطمینان حاصل شود که همه فایل های جدید مجوزهای صحیحی برای همه موارد جدید دارند.
- ترمینال را باز کنید.
- اجرا کردن setfacl -mg:account:rx /data/sales и setfacl -mg:sales:rx /data/account.
- اجرا کردن دریافتبرای اطمینان از اینکه مجوزها به روشی که میخواستید تنظیم شدهاند.
- اجرا کردن setfacl -md:g:account:rwx,g:sales:rx /data/salesبرای تنظیم ACL پیشفرض برای دایرکتوری فروش.
- با استفاده از دستور زیر یک ACL پیشفرض به دایرکتوری /data/account اضافه کنید. setfacl -md:g:sales:rwx,g:account:rx /data/account.
- با اضافه کردن یک فایل جدید به /data/sales، تأیید کنید که تنظیمات ACL اعمال شدهاند. اجرا کنید لمس /داده/فروش/فایل جدید و انجامش بده getfacl /data/sales/newfile برای بررسی مجوزهای فعلی.
تنظیم مجوزهای پیشفرض با استفاده از umask
در بالا، نحوه کار با ACL پیشفرض را آموختید. اگر از ACLها استفاده نمیکنید، یک پارامتر shell وجود دارد که مجوزهای پیشفرض دریافتی شما را تعیین میکند: umask (ماسک معکوس). در این بخش، نحوه تغییر مجوزهای پیشفرض با استفاده از umask.
احتمالاً متوجه شدهاید که وقتی یک فایل جدید ایجاد میکنید، برخی مجوزهای پیشفرض تنظیم میشوند. این مجوزها توسط تنظیمات تعیین میشوند. umaskاین تنظیم پوسته برای همه کاربران هنگام ورود به سیستم اعمال میشود. در تنظیم umask یک مقدار عددی استفاده میشود که از حداکثر مجوزهایی که میتوان به طور خودکار برای یک فایل تنظیم کرد، کم میشود؛ حداکثر تنظیم برای فایلها ۶۶۶ و برای دایرکتوریها ۷۷۷ است.
با این حال، برخی استثنائات در این قانون وجود دارد. میتوانید نمای کلی از تنظیمات را پیدا کنید. umask در جدول زیر.
از اعداد استفاده شده در umask، مانند مورد آرگومانهای عددی برای دستور chmod، رقم اول به مجوزهای کاربر، رقم دوم به مجوزهای گروه و رقم آخر به مجوزهای پیشفرض تعیینشده برای دیگران اشاره دارد. معنی umask به طور پیشفرض، ۰۲۲ برای همه فایلهای جدید عدد ۶۴۴ و برای همه دایرکتوریهای جدید ایجاد شده روی سرور شما عدد ۷۵۵ را میدهد.
مرور کلی بر تمام مقادیر عددی umask و نتایج آنها در جدول زیر آمده است.

یک روش ساده برای مشاهده نحوه عملکرد پارامتر umask به شرح زیر است: با مجوزهای پیشفرض فایل که روی ۶۶۶ تنظیم شده است شروع کنید و umask را کم کنید تا مجوزهای مؤثر را بدست آورید. همین کار را برای یک دایرکتوری و مجوزهای پیشفرض آن که ۷۷۷ است انجام دهید.
دو راه برای تغییر تنظیمات umask وجود دارد: برای همه کاربران و برای کاربران خاص. اگر میخواهید برای همه کاربران umask تنظیم کنید، باید مطمئن شوید که تنظیمات umask هنگام اجرای فایلهای محیط shell، همانطور که در /etc/profile مشخص شده است، رعایت میشود. رویکرد صحیح این است که یک اسکریپت shell به نام umask.sh در دایرکتوری /etc/profile.d ایجاد کنید و umask مورد نظر خود را در این اسکریپت shell مشخص کنید. اگر umask در این فایل تغییر کند، پس از ورود به سرور برای همه کاربران اعمال میشود.
یک جایگزین برای تنظیم umask از طریق /etc/profile و فایلهای مرتبط، که در مورد همه کاربرانی که وارد سیستم میشوند اعمال میشود، تغییر تنظیمات umask در فایلی به نام .profile است که در دایرکتوری خانگی هر کاربر ایجاد میشود.
تنظیمات این فایل فقط برای یک کاربر اعمال میشود و در صورت نیاز به جزئیات بیشتر، گزینه خوبی است. من شخصاً این ویژگی را دوست دارم تا مقدار پیشفرض umask برای کاربر root را به 027 تغییر دهم، در حالی که کاربران عادی از umask پیشفرض 022 استفاده میکنند.
کار با ویژگیهای کاربر توسعهیافته
این بخش پایانی در مورد حقوق در ... است. Linux.
هنگام کار با مجوزها، همیشه رابطهای بین یک شیء کاربر یا گروه و مجوزهایی که آن اشیاء کاربر یا گروه روی یک فایل یا دایرکتوری دارند، وجود دارد. یک روش جایگزین برای ایمنسازی فایلها روی سرور Linux - کار با ویژگیها
ویژگیها کار خود را مستقل از کاربری که به فایل دسترسی دارد، انجام میدهند.
همانند ACLها، ممکن است لازم باشد این گزینه برای ویژگیهای فایل فعال باشد. استقرار (mount).
این یک گزینه است. کاربر_xattrاگر هنگام کار با ویژگیهای کاربر توسعهیافته، پیام "عملیات پشتیبانی نمیشود" دریافت کردید، حتماً پارامتر را تنظیم کنید. استقرار (mount) در فایل /etc/fstab.
بسیاری از ویژگیها مستند شدهاند. برخی از ویژگیها در دسترس هستند اما هنوز پیادهسازی نشدهاند. از آنها استفاده نکنید؛ آنها هیچ فایدهای برای شما نخواهند داشت.
در زیر مفیدترین ویژگیهایی که میتوانید اعمال کنید، آورده شده است:
A این ویژگی تضمین میکند که زمان دسترسی به فایل تغییر نکند.
معمولاً هر بار که یک فایل باز میشود، زمان دسترسی به فایل باید در متادیتای فایل ثبت شود. این امر تأثیر منفی بر عملکرد دارد؛ بنابراین، برای فایلهایی که مرتباً مورد دسترسی قرار میگیرند، ویژگی A میتوان برای غیرفعال کردن این ویژگی استفاده کرد.
a این ویژگی به شما امکان اضافه کردن فایل را میدهد، اما امکان حذف آن را نمیدهد.
c اگر از سیستم فایلی استفاده میکنید که از فشردهسازی در سطح حجم پشتیبانی میکند، این ویژگی فایل تضمین میکند که فایل در اولین باری که مکانیزم فشردهسازی فعال میشود، فشرده خواهد شد.
D این ویژگی تضمین میکند که تغییرات فایل بلافاصله روی دیسک نوشته میشوند، نه اینکه ابتدا در حافظه پنهان (cache) ذخیره شوند. این یک ویژگی مفید برای فایلهای مهم پایگاه داده است و تضمین میکند که آنها بین حافظه پنهان فایل و هارد دیسک از بین نمیروند.
d این ویژگی تضمین میکند که فایل در پشتیبانهایی که از ابزار dump استفاده میکنند، ذخیره نخواهد شد.
I این ویژگی، امکان فهرستبندی دایرکتوری که در آن فعال شده است را فراهم میکند. این امر دسترسی سریعتر به فایل را برای سیستمهای فایل اولیه، مانند Ext3، که از پایگاه داده B-tree برای دسترسی سریع به فایل استفاده نمیکنند، فراهم میکند.
i این ویژگی فایل را تغییرناپذیر میکند. بنابراین، فایل قابل تغییر نیست، که برای فایلهایی که نیاز به حفاظت بیشتری دارند مفید است.
j این ویژگی تضمین میکند که در سیستم فایل ext3، یک فایل ابتدا در ژورنال و سپس در بلوکهای داده روی هارد دیسک نوشته میشود.
s بلوکهایی که فایل در آنها ذخیره شده بود را با صفر ثانیه پس از حذف فایل بازنویسی کنید. این تضمین میکند که فایل پس از حذف قابل بازیابی نباشد.
u این ویژگی اطلاعات حذف را ذخیره میکند. این امر امکان توسعه ابزاری را فراهم میکند که از این اطلاعات برای نجات فایلهای حذف شده استفاده میکند.
اگر میخواهید ویژگیها را اعمال کنید، میتوانید از دستور استفاده کنید گفتگوبرای مثال، استفاده از chattr +s یه فایلبرای اعمال ویژگیها به یک فایل. آیا نیاز به حذف یک ویژگی دارید؟ سپس از chattr -s برخی از فایلهاو حذف خواهد شد. برای مشاهدهی خلاصهای از تمام ویژگیهایی که در حال حاضر اعمال شدهاند، از دستور زیر استفاده کنید: lsattr.
خلاصه
در این مقاله، نحوه کار با مجوزها را آموختید. با سه مجوز پایه، مجوزهای توسعهیافته و نحوه اعمال ACLها به سیستم فایل آشنا شدید. همچنین نحوه استفاده از پارامتر umask برای اعمال مجوزهای پیشفرض را آموختید. در نهایت، نحوه استفاده از ویژگیهای توسعهیافته توسط کاربر را برای اعمال یک لایه اضافی از امنیت سیستم فایل آموختید.
اگر از این ترجمه خوشتان آمد، لطفاً در قسمت نظرات به من اطلاع دهید. این کار به شما انگیزه میدهد تا ترجمههای مفیدی خلق کنید.
من برخی از اشتباهات تایپی و دستوری مقاله را اصلاح کردهام. همچنین برخی از پاراگرافهای طولانی را برای درک آسانتر، کوتاه کردهام.
به جای «فقط کسی که دارای حق دسترسی مدیریتی به دایرکتوری است میتواند مجوز اجرا را اعمال کند.» آن را به «فقط کسی که دارای حق نوشتن در دایرکتوری است میتواند مجوز اجرا را اعمال کند» اصلاح کردم، که صحیحتر است.
ممنون از نظرات. .
جایگزین شده توسط:
اگر شما مالک کاربر نباشید، پوسته بررسی میکند که آیا شما عضوی از گروه هستید یا خیر، که به آن گروه فایل نیز گفته میشود.به:
اگر شما مالک فایل نباشید، پوسته بررسی میکند که آیا شما عضو گروهی هستید که مجوزهای دسترسی به فایل را دارد یا خیر. اگر عضو آن گروه باشید، با مجوزهای تعیینشده برای آن گروه به فایل دسترسی خواهید داشت و پوسته بررسی را متوقف میکند.ممنون بابت نظر.
منبع: www.habr.com
