مجوزها در لینوکس (chown، chmod، SUID، GUID، sticky bit، ACL، umask)

سلام به همه. این ترجمه مقاله ای از کتاب RedHat RHCSA RHCE 7 RedHat Enterprise Linux 7 EX200 and EX300 است.

فشار دادن: امیدوارم این مقاله نه تنها برای مبتدیان مفید باشد، بلکه به مدیران با تجربه تر کمک کند تا دانش خود را ساده کنند.

بیا بریم

مجوزها در لینوکس (chown، chmod، SUID، GUID، sticky bit، ACL، umask)

برای دسترسی به فایل ها در لینوکس، از مجوزها استفاده می شود. این مجوزها به سه شی اختصاص داده می شود: مالک فایل، مالک گروه و شی دیگر (یعنی همه افراد دیگر). در این مقاله، نحوه اعمال مجوزها را خواهید آموخت.

این مقاله با مروری بر مفاهیم اساسی آغاز می‌شود و سپس در مورد مجوزهای ویژه و لیست‌های کنترل دسترسی (ACL) بحث می‌شود. در پایان این مقاله، تنظیم مجوزهای پیش‌فرض از طریق umask و همچنین مدیریت ویژگی‌های کاربر توسعه‌یافته را پوشش می‌دهیم.

مدیریت مالکیت فایل

قبل از بحث در مورد مجوزها، باید از نقش مالک فایل و دایرکتوری آگاه باشید. مالکیت فایل ها و دایرکتوری ها برای برخورد با مجوزها حیاتی است. در این بخش ابتدا یاد می گیرید که چگونه می توانید مالک را ببینید. سپس یاد خواهید گرفت که چگونه مالک و کاربر گروه را برای فایل ها و دایرکتوری ها تغییر دهید.

نمایش صاحب یک فایل یا دایرکتوری

در لینوکس، هر فایل و هر دایرکتوری دو مالک دارد: یک کاربر و یک مالک گروه.

این مالکان زمانی تنظیم می شوند که یک فایل یا دایرکتوری ایجاد شود. کاربری که فایل را ایجاد می کند مالک آن فایل می شود و گروه اصلی که همان کاربر به آن تعلق دارد نیز مالک آن فایل می شود. برای تعیین اینکه آیا شما به عنوان یک کاربر، مجوز دسترسی به یک فایل یا فهرست را دارید، پوسته مالکیت را بررسی می کند.

این به ترتیب زیر اتفاق می افتد:

  1. پوسته بررسی می کند که آیا شما مالک فایلی هستید که می خواهید به آن دسترسی داشته باشید. اگر مالک هستید، مجوزها را دریافت می‌کنید و پوسته بررسی را متوقف می‌کند.
  2. اگر شما مالک فایل نیستید، پوسته بررسی می کند که آیا شما عضو گروهی هستید که مجوزهای فایل را دارد یا خیر. اگر عضو این گروه هستید، با مجوزهایی که گروه تنظیم کرده است به فایل دسترسی خواهید داشت و پوسته بررسی را متوقف می کند.
  3. اگر نه کاربر هستید و نه مالک یک گروه، حقوق سایر کاربران (Other) به شما داده می شود.

برای مشاهده تخصیص مالک فعلی، می توانید از دستور استفاده کنید 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 را به user 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 ~]#

اکنون user lisa مالک دایرکتوری حساب شده است:

[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 و همچنین گروه فروش را به عنوان مالک همان فایل تنظیم می کند.
  • chown lisa: sales myfile همانند دستور قبلی
  • chown .sales myfile گروه فروش را به عنوان مالک myfile بدون تغییر مالک کاربر تعیین می کند.
  • chown :sales myfile همانند دستور قبلی

می توانید از دستور استفاده کنید 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. اگر کاربر از دستور استفاده کند نیورپاما عضوی از گروه هدف نیست، پوسته رمز عبور گروه را درخواست می کند. پس از وارد کردن رمز عبور صحیح گروه، یک گروه اولیه موثر جدید ایجاد خواهد شد.

مدیریت حقوق اساسی

سیستم مجوز لینوکس در دهه 1970 اختراع شد. از آنجایی که نیازهای محاسباتی در آن سال ها محدود بود، سیستم مجوز اولیه کاملاً محدود بود. این سیستم مجوز از سه مجوز استفاده می کند که می تواند برای فایل ها و دایرکتوری ها اعمال شود. در این بخش با نحوه استفاده و تغییر این مجوزها آشنا خواهید شد.

آشنایی با مجوزهای خواندن، نوشتن و اجرا

سه مجوز اساسی به شما امکان خواندن، نوشتن و اجرای فایل ها را می دهد. اثر این مجوزها زمانی که برای فایل ها یا دایرکتوری ها اعمال می شود متفاوت است. برای یک فایل، مجوز خواندن به شما این حق را می دهد که فایل را برای خواندن باز کنید. بنابراین، می‌توانید محتوای آن را بخوانید، اما این بدان معناست که رایانه شما می‌تواند فایل را برای انجام کاری با آن باز کند.

فایل برنامه ای که نیاز به دسترسی به یک کتابخانه دارد، برای مثال باید دسترسی خواندن به آن کتابخانه داشته باشد. بنابراین، مجوز خواندن ابتدایی ترین مجوزی است که برای کار با فایل ها نیاز دارید.

هنگامی که بر روی یک فهرست اعمال می شود، خواندن به شما امکان می دهد محتویات آن دایرکتوری را نمایش دهید. باید توجه داشته باشید که این مجوز به شما اجازه نمی دهد فایل های موجود در فهرست را بخوانید. سیستم مجوز لینوکس وراثت نمی شناسد و تنها راه برای خواندن یک فایل استفاده از مجوزهای خواندن در آن فایل است.

همانطور که احتمالاً می توانید حدس بزنید، مجوز نوشتن، اگر برای یک فایل اعمال شود، اجازه نوشتن روی فایل را می دهد. به عبارت دیگر، این امکان را به شما می دهد تا محتوای فایل های موجود را تغییر دهید. با این حال، به شما اجازه ایجاد یا حذف فایل های جدید یا تغییر مجوزهای فایل را نمی دهد. برای انجام این کار، باید به دایرکتوری که می خواهید فایل را ایجاد کنید، اجازه نوشتن بدهید. در دایرکتوری ها، این مجوز همچنین به شما امکان ایجاد و حذف زیر شاخه های جدید را می دهد.

مجوز اجرا همان چیزی است که برای اجرای فایل نیاز دارید. هرگز به صورت پیش‌فرض نصب نمی‌شود، که باعث می‌شود لینوکس تقریباً به طور کامل در برابر ویروس‌ها مصون بماند. فقط شخصی که مجوز نوشتن در دایرکتوری داشته باشد می تواند مجوز اجرا را اعمال کند.

موارد زیر به طور خلاصه استفاده از مجوزهای اولیه را نشان می دهد:

مجوزها در لینوکس (chown، chmod، SUID، GUID، sticky bit، ACL، umask)

با استفاده از chmod

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

مجوزها در لینوکس (chown، chmod، SUID، GUID، sticky bit، ACL، umask)

هنگام تنظیم مجوزها، مقدار مورد نیاز خود را محاسبه کنید. اگر می‌خواهید خواندن/نوشتن/اجرا برای کاربر، خواندن/اجرا برای گروه و خواندن/اجرا برای دیگران را در /somefile تنظیم کنید، از دستور زیر استفاده می‌کنید. chmod:

chmod 755 /somefile

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

اگر می خواهید مجوزها را نسبت به مجوزهای فعلی تغییر دهید، می توانید استفاده کنید chmod در حالت نسبی استفاده كردن chmod در حالت نسبی شما با سه نشانگر کار می کنید تا نشان دهید که چه کاری می خواهید انجام دهید:

  1. ابتدا مشخص می کنید که می خواهید مجوزها را برای چه کسانی تغییر دهید. برای انجام این کار، می توانید بین کاربر (uگروه (g) و دیگران (o).
  2. سپس از یک عبارت برای افزودن یا حذف مجوزها از حالت فعلی استفاده می‌کنید یا آنها را کاملاً تنظیم می‌کنید.
  3. در پایان استفاده می کنید 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 را به روشی هوشمندتر برای مقابله با مجوزهای اجرایی تبدیل می کند. با این کار از تنظیم این مجوز در فایل هایی که به آن نیازی نیست جلوگیری می کند.

حقوق تمدید شده

لینوکس علاوه بر مجوزهای اولیه ای که در مورد آنها خواندید، مجموعه ای از مجوزهای پیشرفته نیز دارد. اینها مجوزهایی نیستند که شما به طور پیش فرض تنظیم کرده اید، اما گاهی اوقات آنها یک افزونه مفید ارائه می دهند. در این بخش، می آموزید که آنها چیست و چگونه آنها را تنظیم کنید.

آشنایی با مجوزهای SUID، GUID و Sticky Bit Extended Permissions

سه مجوز پیشرفته وجود دارد. اولین مورد، مجوز تنظیم شناسه کاربر (SUID) است. در برخی موارد خاص، می توانید این مجوز را برای فایل های اجرایی اعمال کنید. به طور پیش فرض، کاربری که یک فایل اجرایی را اجرا می کند، آن فایل را با مجوزهای خود اجرا می کند.

برای کاربران عادی، این معمولاً به این معنی است که استفاده از برنامه محدود است. با این حال، در برخی موارد، کاربر تنها برای انجام یک کار خاص به مجوزهای ویژه نیاز دارد.

به عنوان مثال، موقعیتی را در نظر بگیرید که در آن کاربر باید رمز عبور خود را تغییر دهد. برای این کار کاربر باید رمز عبور جدید خود را در فایل /etc/shadow بنویسد. با این حال، این فایل توسط کاربران غیر روت قابل نوشتن نیست:

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 ممکن است مفید به نظر برسد (و در برخی موارد مفید است)، اما در عین حال بالقوه خطرناک است. اگر به درستی اعمال نشود، می توانید به طور تصادفی مجوزهای ریشه را از دست بدهید. بنابراین، توصیه می کنم از آن فقط با نهایت دقت استفاده کنید.

اکثر مدیران هرگز نیازی به استفاده از آن ندارند. شما آن را فقط در برخی از فایل‌ها می‌بینید که سیستم عامل باید آن را به طور پیش‌فرض تنظیم کند.

دومین مجوز ویژه، شناسه گروه (SGID) است. این اجازه دو اثر دارد. هنگامی که بر روی یک فایل اجرایی اعمال می شود، به کاربری که فایل را اجرا می کند، مجوزهای مالک گروه فایل را می دهد. بنابراین SGID می تواند کم و بیش همان کار SUID را انجام دهد. با این حال، SGID عملا برای این منظور استفاده نمی شود.

مانند مجوز SUID، SGID به عنوان یک تنظیم پیش فرض برای برخی از فایل های سیستم اعمال می شود.

هنگامی که SGID روی یک فهرست اعمال می شود، می تواند مفید باشد زیرا می توانید از آن برای تنظیم مالک گروه پیش فرض برای فایل ها و زیر شاخه های ایجاد شده در آن دایرکتوری استفاده کنید. به‌طور پیش‌فرض، زمانی که کاربر یک فایل ایجاد می‌کند، گروه اصلی مؤثر او به‌عنوان مالک گروه برای آن فایل تنظیم می‌شود.

این همیشه خیلی مفید نیست، به خصوص از آنجایی که کاربران Red Hat/CentOS گروه اصلی خود را روی گروهی با همان نام کاربر تنظیم می‌کنند که کاربر تنها عضو آن است. بنابراین، به طور پیش فرض، فایل هایی که کاربر ایجاد می کند به صورت انبوه به اشتراک گذاشته می شود.

موقعیتی را تصور کنید که کاربران لیندا و لری در حسابداری کار می کنند و اعضای یک گروه هستند حساب. به طور پیش فرض، این کاربران اعضای یک گروه خصوصی هستند که تنها عضو آن هستند. با این حال، هر دو کاربر عضو گروه حساب هستند، اما همچنین به عنوان یک پارامتر گروه ثانویه.

وضعیت پیش فرض این است که وقتی هر یک از این کاربران یک فایل ایجاد می کنند، گروه اصلی مالک می شود. بنابراین، به طور پیش فرض، لیندا نمی تواند به فایل های ایجاد شده توسط lori دسترسی داشته باشد و بالعکس. با این حال، اگر یک دایرکتوری گروهی مشترک ایجاد کنید (مثلاً /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

سومین مجوزهای ویژه، بیت چسبنده است. این مجوز برای محافظت از فایل‌ها در برابر حذف تصادفی در محیطی که چندین کاربر به یک فهرست دسترسی دارند، مفید است. اگر از بیت چسبنده استفاده شود، کاربر تنها در صورتی می تواند فایلی را حذف کند که مالک کاربر فایل یا دایرکتوری حاوی فایل باشد. به همین دلیل، از آن به عنوان مجوز پیش فرض برای دایرکتوری tmp / استفاده می شود و می تواند برای دایرکتوری های گروه عمومی نیز مفید باشد.

بدون بیت چسبنده، اگر کاربر بتواند فایل‌هایی را در دایرکتوری ایجاد کند، می‌تواند فایل‌ها را نیز از آن دایرکتوری حذف کند. در یک محیط گروه عمومی، این می تواند آزاردهنده باشد. کاربران linda و lori را تصور کنید که هر دو دارای مجوز نوشتن در فهرست /data/account هستند و با عضویت در گروه حساب، این مجوزها را دریافت می کنند. بنابراین، لیندا می تواند فایل های ایجاد شده توسط lori و بالعکس را حذف کند.

هنگامی که بیت چسبنده را اعمال می کنید، کاربر تنها در صورتی می تواند فایل ها را حذف کند که یکی از شرایط زیر درست باشد:

  • کاربر مالک فایل است.
  • کاربر مالک دایرکتوری است که فایل در آن قرار دارد.

هنگام استفاده از ls-l، می توانید بیت چسبنده را به صورت مشاهده کنید t در موقعیتی که معمولاً مجوز اجرا را برای دیگران می‌بینید:

[root@hnl data]# ls -ld account/
drwxr-sr-t. 2 root account 4096 Apr 30 21:28 account/

اعمال حقوق تمدید شده

برای اعمال SUID، SGID و بیت چسبنده نیز می توانید استفاده کنید chmod. SUID دارای مقدار عددی 4، SGID دارای مقدار عددی 2 و بیت چسبنده دارای مقدار عددی 1 است.

اگر می خواهید این مجوزها را اعمال کنید، باید یک آرگومان چهار رقمی به آن اضافه کنید chmod، که رقم اول آن به مجوزهای ویژه اشاره دارد. به عنوان مثال، خط زیر مجوز SGID را به دایرکتوری اضافه می کند و rwx را برای کاربر و rx را برای گروه و دیگران تنظیم می کند:

chmod 2755 /somedir

اگر لازم است مجوزهای فعلی را که قبل از کار با آنها تنظیم شده است ببینید، این کار نسبتاً غیر عملی است chmod در حالت مطلق (اگر این کار را نکنید، خطر بازنویسی مجوزها را دارید.) بنابراین اگر نیاز به اعمال هر یک از مجوزهای ویژه دارید، توصیه می کنم در حالت نسبی اجرا کنید:

  1. برای استفاده از SUID chmod u+s.
  2. برای استفاده از SGID chmod g+s.
  3. برای استفاده از بیت چسبنده chmod +tو به دنبال آن نام فایل یا دایرکتوری که می خواهید مجوزها را برای آن تنظیم کنید.

جدول همه چیزهایی را که باید در مورد مدیریت مجوزهای ویژه بدانید را خلاصه می کند.

مجوزها در لینوکس (chown، chmod، SUID، GUID، sticky bit، ACL، umask)

نمونه کار با حقوق خاص

در این مثال، شما از مجوزهای ویژه استفاده می‌کنید تا اشتراک‌گذاری فایل‌ها در فهرست مشترک گروه را برای اعضای گروه آسان‌تر کنید. بیت ID را به شناسه گروه مجموعه و همچنین بیت چسبنده اختصاص می دهید، و می بینید که پس از تنظیم، ویژگی هایی اضافه می شود تا کار اعضای گروه با یکدیگر آسان تر شود.

  1. ترمینالی را باز کنید که در آن کاربر لیندا هستید. می توانید با دستور یک کاربر ایجاد کنید کاربر اضافه کردن لیندا، رمز عبور را اضافه کنید passwd لیندا.
  2. دایرکتوری /data را در ریشه و زیر شاخه /data/sales را با دستور ایجاد کنید mkdir -p /data/sales... اجرا کردن سی دی /داده/فروشبرای رفتن به دایرکتوری فروش کامل لیندا1 را لمس کنید и لیندا2 را لمس کنیدبرای ایجاد دو فایل خالی متعلق به لیندا.
  3. اجرا کردن سو لیزا برای تغییر کاربر فعلی به کاربر لیزا که او نیز عضو گروه فروش است.
  4. اجرا کردن سی دی /داده/فروش و از آن دایرکتوری اجرا کنید ls-l. دو فایل را مشاهده خواهید کرد که توسط کاربر linda ساخته شده اند و متعلق به گروه linda هستند. کامل rm -f لیندا*. با این کار هر دو فایل حذف می شوند.
  5. اجرا کردن lisa1 را لمس کنید и lisa2 را لمس کنیدبرای ایجاد دو فایل که متعلق به کاربر lisa است.
  6. اجرا کردن سو- برای ارتقای امتیازات خود به روت.
  7. اجرا کردن chmod g+s,o+t /data/salesبرای تنظیم بیت شناسه گروه (GUID) و همچنین بیت چسبنده در دایرکتوری گروه مشترک.
  8. اجرا کردن سو-لیندا. سپس انجام دهید لیندا3 را لمس کنید и لیندا4 را لمس کنید. اکنون باید ببینید که دو فایلی که ایجاد کردید متعلق به گروه فروش است که مالک گروه دایرکتوری /data/sales است.
  9. اجرا کردن rm -rf لیزا*. بیت چسبنده از حذف این فایل ها از طرف کاربر لیندا جلوگیری می کند، زیرا شما مالک این فایل ها نیستید. توجه داشته باشید که اگر کاربر لیندا مالک دایرکتوری /data/sales باشد، به هر حال می تواند این فایل ها را حذف کند!

مدیریت ACL (setfacl، getfacl) در لینوکس

حتی اگر مجوزهای توسعه یافته مورد بحث در بالا عملکرد مفیدی را به روشی که لینوکس مجوزها را مدیریت می کند اضافه می کند، به شما اجازه نمی دهد به بیش از یک کاربر یا گروه در یک فایل مجوز بدهید.

لیست های کنترل دسترسی این ویژگی را ارائه می دهند. علاوه بر این، آنها به مدیران اجازه می‌دهند تا مجوزهای پیش‌فرض را به روشی پیچیده تنظیم کنند، جایی که مجوزهای مجموعه ممکن است از فهرستی به فهرست دیگر متفاوت باشد.

درک ACL ها

اگرچه زیرسیستم ACL قابلیت های بسیار خوبی را به سرور شما اضافه می کند، اما یک نقطه ضعف دارد: همه برنامه های کاربردی از آن پشتیبانی نمی کنند. بنابراین، ممکن است هنگام کپی یا انتقال فایل‌ها، تنظیمات ACL خود را از دست بدهید و نرم‌افزار پشتیبان‌گیری شما ممکن است نتواند از تنظیمات ACL شما نسخه پشتیبان تهیه کند.

ابزار tar از ACL ها پشتیبانی نمی کند. برای اطمینان از اینکه تنظیمات ACL هنگام ایجاد پشتیبان از بین نمی روند، از آن استفاده کنید ستاره به جای تار ستاره با همان گزینه های تار کار می کند. فقط از تنظیمات 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:sales: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 که قبلا ایجاد کرده بودید را ادامه خواهید داد. در مثال‌های قبلی، اطمینان حاصل کردید که گروه فروش دارای مجوزهای /data/sales و گروه حساب دارای مجوز روی /data/account هستند.

ابتدا مطمئن شوید که گروه حساب مجوز خواندن در فهرست /data/sales و گروه فروش مجوز خواندن در فهرست /data/account دریافت می کند.

سپس ACLهای پیش‌فرض را تنظیم می‌کنید تا مطمئن شوید که همه فایل‌های جدید مجوزهای درستی را برای همه موارد جدید تنظیم کرده‌اند.

  1. یک ترمینال باز کنید
  2. اجرا کردن setfacl -mg:account:rx /data/sales и setfacl -mg:sales:rx /data/account.
  3. اجرا کردن دریافتمطمئن شوید که مجوزها به شکلی که شما می خواهید تنظیم شده است.
  4. اجرا کردن setfacl -md:g:account:rwx,g:sales:rx /data/salesبرای تنظیم ACL پیش فرض برای دایرکتوری فروش.
  5. با استفاده از یک ACL پیش فرض برای دایرکتوری /data/account اضافه کنید setfacl -md:g:sales:rwx,g:account:rx /data/account.
  6. با افزودن یک فایل جدید به /data/sales، بررسی کنید که تنظیمات ACL در حال اجرا هستند. کامل /data/sales/newfile را لمس کنید و اجرا کنند getfacl /data/sales/newfile برای بررسی مجوزهای فعلی

تنظیم مجوزهای پیش فرض با umask

در بالا، نحوه کار با ACL های پیش فرض را یاد گرفتید. اگر از ACL استفاده نمی کنید، یک گزینه پوسته وجود دارد که مجوزهای پیش فرضی را که دریافت می کنید تعیین می کند: umask (ماسک معکوس). در این بخش، نحوه تغییر مجوزهای پیش فرض را با umask.

ممکن است متوجه شده باشید که هنگام ایجاد یک فایل جدید، برخی از مجوزهای پیش فرض تنظیم شده است. این مجوزها توسط تنظیمات تعیین می شوند umask. این تنظیم پوسته برای همه کاربران در هنگام ورود اعمال می شود. در پارامتر umask یک مقدار عددی استفاده می شود که از حداکثر مجوزهایی که می توان به طور خودکار برای فایل تنظیم کرد کم می شود. حداکثر تنظیم برای فایل ها 666 و برای دایرکتوری ها 777 است.

با این حال، برخی استثناها برای این قانون اعمال می شود. می توانید یک نمای کلی از تنظیمات پیدا کنید umask در جدول زیر

از اعداد استفاده شده در umask، مانند آرگومان های عددی برای دستور chmod، رقم اول به مجوزهای کاربر، رقم دوم به مجوزهای گروه و آخرین رقم به مجوزهای پیش فرض تنظیم شده برای دیگران اشاره دارد. معنی umask 022 پیش فرض 644 را برای همه فایل های جدید و 755 را برای همه دایرکتوری های جدید ایجاد شده روی سرور شما می دهد.

نمای کلی تمام مقادیر عددی umask و نتایج آنها در جدول زیر.

مجوزها در لینوکس (chown، chmod، SUID، GUID، sticky bit، ACL، umask)

یک راه آسان برای دیدن نحوه عملکرد تنظیمات umask به شرح زیر است: با مجوزهای پیش فرض فایل که روی 666 تنظیم شده است شروع کنید و umask را کم کنید تا مجوزهای موثر را دریافت کنید. همین کار را برای دایرکتوری و مجوزهای پیش فرض 777 آن انجام دهید.

دو راه برای تغییر تنظیمات umask وجود دارد: برای همه کاربران و برای کاربران فردی. اگر می‌خواهید umask را برای همه کاربران تنظیم کنید، باید اطمینان حاصل کنید که تنظیمات umask هنگام شروع فایل‌های محیط پوسته، همانطور که در /etc/profile مشخص شده است، در نظر گرفته می‌شود. روش صحیح این است که یک اسکریپت پوسته به نام umask.sh در پوشه /etc/profile.d ایجاد کنید و umask را که می خواهید در آن اسکریپت پوسته استفاده کنید مشخص کنید. اگر umask در این فایل تغییر کند، پس از ورود به سرور برای همه کاربران اعمال می شود.

جایگزینی برای تنظیم umask از طریق /etc/profile و فایل های مرتبط، که در آن برای همه کاربرانی که وارد می شوند اعمال می شود، تغییر تنظیمات umask در فایلی به نام .profile است که در فهرست اصلی هر کاربر ایجاد می شود.

تنظیمات اعمال شده در این فایل فقط برای هر کاربر اعمال می شود. بنابراین اگر به جزئیات بیشتری نیاز دارید، این روش خوبی است. من شخصاً این ویژگی را دوست دارم که umask پیش فرض را برای کاربر root به 027 تغییر دهد در حالی که کاربران عادی با umask پیش فرض 022 در حال اجرا هستند.

کار با ویژگی های کاربر توسعه یافته

این آخرین بخش در مورد مجوزهای لینوکس است.

هنگام کار با مجوزها، همیشه یک رابطه بین یک کاربر یا شی گروه و مجوزهایی که اشیاء کاربر یا گروه روی یک فایل یا فهرست دارند، وجود دارد. یک روش جایگزین برای محافظت از فایل ها در سرور لینوکس، کار با ویژگی ها است.
ویژگی ها بدون توجه به دسترسی کاربر به فایل کار خود را انجام می دهند.

مانند ACL ها، ویژگی های فایل ممکن است نیاز به این گزینه داشته باشند استقرار (mount).

این یک گزینه است user_xattr. اگر هنگام کار با ویژگی های کاربر توسعه یافته پیام "عملیات پشتیبانی نمی شود" دریافت کردید، حتماً پارامتر را تنظیم کنید. استقرار (mount) در /etc/fstab.

بسیاری از ویژگی ها مستند شده اند. برخی از ویژگی ها در دسترس هستند اما هنوز پیاده سازی نشده اند. از آنها استفاده نکنید؛ آنها برای شما چیزی نمی آورند

در زیر مفیدترین ویژگی هایی است که می توانید اعمال کنید:

A این ویژگی تضمین می کند که زمان دسترسی فایل به فایل تغییر نمی کند.
به طور معمول، هر بار که یک فایل باز می شود، زمان دسترسی به فایل باید در فراداده فایل ثبت شود. این بر عملکرد تأثیر منفی می گذارد. بنابراین برای فایل هایی که به طور منظم به آنها دسترسی پیدا می شود، ویژگی A می توان برای غیرفعال کردن این ویژگی استفاده کرد.

a این ویژگی به شما امکان می دهد فایلی را اضافه کنید اما حذف نکنید.

c اگر از سیستم فایلی استفاده می‌کنید که از فشرده‌سازی در سطح حجم پشتیبانی می‌کند، این ویژگی فایل تضمین می‌کند که فایل در اولین باری که مکانیزم فشرده‌سازی فعال می‌شود فشرده می‌شود.

D این ویژگی تضمین می‌کند که تغییرات فایل‌ها به جای اینکه ابتدا در حافظه پنهان ذخیره شوند، بلافاصله روی دیسک نوشته می‌شوند. این یک ویژگی مفید در فایل های پایگاه داده مهم است تا مطمئن شوید که بین کش فایل و هارد دیسک گم نمی شوند.

d این ویژگی تضمین می‌کند که فایل در پشتیبان‌گیری‌هایی که از ابزار dump استفاده می‌شود، ذخیره نمی‌شود.

I این ویژگی نمایه سازی دایرکتوری که در آن فعال است را فعال می کند. این امکان دسترسی سریع‌تر به فایل را برای فایل‌سیستم‌های اولیه مانند Ext3 فراهم می‌کند که از پایگاه داده B-tree برای دسترسی سریع به فایل استفاده نمی‌کنند.

i این ویژگی فایل را تغییرناپذیر می کند. بنابراین نمی توان هیچ تغییری در فایل ایجاد کرد که برای فایل هایی که نیاز به حفاظت اضافی دارند مفید است.

j این ویژگی تضمین می کند که در یک سیستم فایل ext3، فایل ابتدا در مجله و سپس در بلوک های داده روی هارد دیسک نوشته می شود.

s بعد از حذف فایل، بلوک هایی که فایل در آنها ذخیره شده است را روی 0s بازنویسی کنید. این تضمین می کند که پس از حذف فایل قابل بازیابی نیست.

u این ویژگی اطلاعات مربوط به حذف را ذخیره می کند. این به شما این امکان را می دهد که ابزاری توسعه دهید که با این اطلاعات کار می کند تا فایل های حذف شده را نجات دهد.

اگر می خواهید ویژگی ها را اعمال کنید، می توانید از دستور استفاده کنید گفتگو. به عنوان مثال استفاده کنید chattr +s somefileبرای اعمال ویژگی ها به فایل. آیا نیاز به حذف یک ویژگی دارید؟ سپس استفاده کنید chattr -s somefileو حذف خواهد شد. برای دریافت نمای کلی از تمام ویژگی هایی که در حال حاضر اعمال می شوند، از دستور استفاده کنید lsattr.

خلاصه

در این مقاله نحوه کار با مجوزها را یاد گرفتید. شما در مورد سه مجوز اساسی، مجوزهای پیشرفته، و نحوه اعمال ACL در یک سیستم فایل مطالعه کردید. همچنین یاد گرفتید که چگونه از گزینه umask برای اعمال مجوزهای پیش فرض استفاده کنید. در پایان این مقاله، نحوه استفاده از ویژگی های توسعه یافته توسط کاربر را برای اعمال یک لایه اضافی از امنیت سیستم فایل یاد گرفتید.

اگر این ترجمه را دوست داشتید، لطفاً در مورد آن در نظرات بنویسید. انگیزه بیشتری برای ترجمه مفید وجود خواهد داشت.

برخی از اشتباهات تایپی و گرامری مقاله را اصلاح کرد. برخی از پاراگراف های حجیم را برای خوانایی بهتر به پاراگراف های کوچکتر کاهش داد.

به جای "فقط افرادی که حقوق مدیریت دایرکتوری دارند می توانند مجوز اجرا را اعمال کنند." ثابت شده است به "فقط کسی با مجوز نوشتن در فهرست می تواند مجوز اجرا را اعمال کند."، که صحیح تر است.

با تشکر از نظرات برز.

جایگزین شد:
اگر شما مالک کاربر نیستید، پوسته بررسی می کند که آیا عضو گروهی هستید که به عنوان گروه فایل نیز شناخته می شود.

در مورد:
اگر شما مالک فایل نیستید، پوسته بررسی می کند که آیا شما عضو گروهی هستید که مجوزهای فایل را دارد یا خیر. اگر عضو این گروه هستید، با مجوزهایی که گروه تنظیم کرده است به فایل دسترسی خواهید داشت و پوسته بررسی را متوقف می کند.

ممنون از نظر شما CryptoPirate

منبع: www.habr.com

اضافه کردن نظر