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

آموزش راه اندازی Disk Quota در لینوکس بصورت گام به گام

چگونه محدودیت استفاده از فضای دیسک در لینوکس ایجاد کنیم؟ چگونه Disk Quota در لینوکس راه اندازی کنیم؟ همانطور که در سیستم عامل ویندوز هم واژه ای به نام Disk Quota داریم در لینوکس هم Disk Quota وجود دارد ، این قابلیت به سیستم عامل اجازه می دهد که میزان استفاده کاربر از فضای دیسک را مدیریت کنیم

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

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

آموزش راه اندازی Disk Quota در لینوکس قسمت 1 : فعال کردن

برخلاف سیستم عامل ویندوز در سیستم عامل لینوکس Disk Quota ابتدا باید فعال شود و سپس مورد استفاده قرار بگیرد ، برای فعال کردن Disk Quota در سیستم عامل لینوکس شما باید یک سری تغییرات در فایل fstab انجام بدهید که قبلا در این خصوص بصورت کامل در توسینسو توضیح داده شده است ، شما باید فایل سیستم مورد نظر را مطابق مثال زیر در fstab تغییر بدهید و علاوه بر option ای که بصورت default وجود دارد موارد زیر را نیز باید به این فایل اضافه کنید :

/dev/sdb1 /home ext3 defaults,usrquota,grpquota 0 0

در دستور بالا usrquota برای اعمال Disk Quota به user ها و grpquota برای اعمال Disk Quota به group ها استفاده می شود. شما می توانید از هر کدام از این option ها بصورت انتخابی بر اساس نیاز می توانید استفاده کنید ، بعد از اعمال کردن این موارد در فایل fstab بایستی یکبار فایل سیستم مورد نظر remount شود تا تغییراتی که در آن اعمال کرده ایم اعمال شود و Disk Quota فعال شود ، بعد از اینکه umount کردید فایل سیستم مورد نظر را با استفاده از دستور زیر اینبار با قابلیت Disk Quota شما می توانید فایل سیستم مورد نظر را mount کنید :

root@itpro-debian ~]# mount –o remount /dev/sdb1

در آموزش های بعدی در خصوص نحوه اعمال کردن Disk Quota توضیحات بیشتری را ارائه خواهیم کرد.

آموزش راه اندازی Disk Quota در لینوکس قسمت 2 : ایجاد فایل دیتابیس

در قسمت قبلی این آموزش نحوه فعال کردن و اضافه کردن موارد مورد نیاز برای disk quota در لینوکس را به شما آموزش دادیم اما توجه کنید که تا زمانیکه اطلاعات مربوط به disk quota در سیستم ذخیره نشوند امکان اجرا شدن این موارد در لینوکس وجود ندارد .

اطلاعات مربوط به disk quota در لینوکس در قالب فایلی هایی که در واقع دیتابیس disk quota هستند نگهداری می شوند و از طریق همین فایل ها تنظیمات محدود کننده اعمال می شود. بعد از اینکه شما تغییرات مورد نظرتان را بر روی فایل fstab مطابق آموزش قبلی انجام دادید

و سیستم را یکبار reboot کردید disk quota در سیستم فعال می شود اما کار نمی کند چون فایل های دیتابیس آن ایجاد نشده اند. برای اینکه این فایل ها را در لینوکس ایجاد کنیم از دستوری به نام quotacheck به شکل زیر استفاده می کنیم ، دقت کنید که برای اجرای این دستور باید کاربر شما root باشد :

root@itpro-debian ~]# quotacheck -cug /dev/sdb1 

خوب در دستور بالا با توجه به اینکه در حال حاضر فایل های مورد نیاز وجود ندارند از پارامتر c که مخفف create است استفاده می کنیم ، ما می خواهیم هم برای user ها و هم برای group ها disk quota تعریف کنیم بنابراین از پارامترهای ug استفاده می کنیم 

بعد از اینکه دستور بالا با موفقیت اجرا شد دو عدد فایل در فایل سیستم مربوطه به نامهای aquota.group و aquota.user ایجاد خواهند شد که در ریشه mount point مورد نظر هستند ، زمانیکه فایل های دیتابیس disk quota ما ایجاد شدند ما می توانیم آنها را به دیسک فعلی مورد استفاد خودمان اعمال کنیم ، اینکار از طریق قالب و دستور زیر انجام می شود :

root@itpro-debian  ~]# quotacheck -uvg /dev/sdb1 

پارامتر u برای update کردن استفاده می شود و دستور بالا template موجود در پایگاه داده را به فایل سیستم مورد نظر ما اعمال می کند. اگر پارامتر a را داشته باشیم تمامی فایل سیستم هایی که mount شده اند بررسی خواهند شد ، با توجه به اینکه فایل سیستم شما ممکن است در زمان اعمال کردن disk quota در حال استفاده باشد

و در حالت read write باشد ممکن است مشکلاتی در اعمال disk quota به وجود بیاید به همین خاطر پیشنهاد می شود که قبل از اعمال کردن این موارد فایل سیستم را در حالت read only ابتدا mount کرده و سپس unmount و در حالت read write مجددا mount کنید که مشکلی برای فایل سیستم به وجود نیاید ، اگر quotacheck نتواند فرآیند remount را انجام دهد شما می توانید remount کردن را با پارامتر m اجبار یا force کنید. بنابراین دستور مورد نظر شما به شکل زیر در خواهد آمد :

root@itpro-debian ~]# quotacheck -muvg /dev/sdb1

هدف ما از این نکته آموزشی نحوه ایجاد کردن فایل های دیتابیس disk quota و اعمال کردن آنها به فایل سیستم بود که انجام دادیم و هنوز هیچ محدودیتی برای دیسک ها اعمال نکرده ایم ، دقت کنید که دستور quotacheck بایستی بصورت متناوب هر چند وقت یکبار بایستی برای بررسی سالم بودن و صحبت فایل سیستم اجار شود در آموزش های بعدی در خصوص نحوه اعمال محدودیت در این فایل سیستم صحبت خواهیم کرد.

آموزش راه اندازی Disk Quota در لینوکس قسمت 3 فعال و غیرفعال کردن

خوب قبل از اینکه بتوانیم از disk quota استفاده کنیم بایستی آن را روشن یا on کنیم ، طبیعتا اینکار بر روی فایل سیستم هایی انجام می شود که در حال حاضر بر روی سیستم mount شده باشند. برای اینکار ما می توانیم از دستوری به نام quotaon استفادهکنیم ف با استفاده از کاربر root و دستور quotaon به شکل زیر ما disk quota را برای user ها group ها فعال می کنیم :

 [root@itpro-debian ~]# quotaon -vug /dev/sdb1
/dev/sdb1 [/home]: group quotas turned on
/dev/sdb1 [/home]: user quotas turned on

همانطور که در خروجی دستور بالا مشاهده می کنید برای USER و GROUP قابلیت disk quota را بر روی فایل سیستم فعال یا روشن کردیم ، اگر بخواهیم بصورت مقطعی یا موقتی disk quota را بنا به هر دلیلی غیرفعال کنیم از دستور quotaoff به شکل زیر با سطح دسترسی کاربر root استفاده می کنیم :

 [root@itpro-debian  ~]# quotaoff -vug /dev/sdb1
/dev/sdb1 [/home]: group quotas turned off
/dev/sdb1 [/home]: user quotas turned off

در قسمت بعدی در خصوص نحوه اعمال quota بر روی فایل سیستم صحبت خواهیم کرد.

آموزش راه اندازی Disk Quota در لینوکس قسمت 4 : edquota و repquota

خوب تا اینجای کار ما تغییرات لازم را در فایل fstab ایجاد کردیم ، قابلیت disk quota را فعال کردیم و الان می خواهیم محدودیت های خودمان را برای استفاده از دیسک و فایل سیستم اعمال کنیم. Disk quota در لینوکس برای هر کاربر ، گروه یا فایل سیستم بصورت مجزا قابل اعمال است و اینکار توسط دستوری به نام edquota یا edit quota انجام می شود.

شما می توانید برای مشخص کردن کاربر یا گروه مورد نظر علاوه بر نام کاربردی یا نام گروه از GID یا UID کاربر یا گروه نیست استفاده کنید ، قالب استفاده کردن از این دستور بسیار ساده است کافیست که ابتدا دستور edquota را وارد کنید در ادامه نام فایل سیستم و بعد از ان هم نام کاربر یا گروه مورد نظرتان را به شکل زیر وارد کنید :

[root@itpro-debian ~]# edquota -f /dev/sdb1 unity

در دستور بالا ما می خواهیم برای کاربر unity در دسترسی به فایل سیستم sdb1 محدودیت اعمال کنیم ، با وارد کردن دستور بالا یک فایل موقتی با استفاده از vi editor باز می شود و شما می توانید محدودیت های خودتان را در این فایل اعمال کنید ، ساختار این فایل موقتی به شکل زیر می باشد :

  Disk quotas for user unity (uid 500):
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 40460 45000 50000 11 0 0

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

در خروجی دستور بالا که مشاهده می کنید قسمت اول که filesystem است اسم فایل سیستم را به شما اعلام می کند ، قسمت دوم تعداد block های موجود فایل سیستم که قابل استفاده هستند را نمایش می دهد ، در ادامه دو پارامتر اصلی disk quota را مشاهده می کنید که یکی به عنوان hard و دیگری به نام soft معرفی شده اند.

تفاوت hard quota و soft quota در چیست ؟

Hard quota یعنی حداکثر فضایی که یک کاربر یا گروه می تواند در اختیار داشته باشد و به هیچ عنوان کاربر نمی تواند از این میزان فضا بیشتر استفاده کند اما زمانیکه صحبت از soft quota می شود کاربر می تواند بیشتر از این مقدار را نیز ذخیره کند اما برای نگهداری از اطلاعات بیشتر محدودیت زمانی دارد.

بگذارید با یک مثال صحبت کنیم ، فرض کنید که ما hard quota را 100 مگابایت و soft quota را 70 مگابایت در نظر گرفته ایم ، حالا شما خودتان را بکشید هم بیشتر از 100 مگابایت نمی توانید از فضای دیسک استفاده کنید ، اگر شما به فضای 70 مگابایت برسید سیستم به شما یک فرصت زمانی می دهد که فضای خودتان را خالی کنید به گونه ای که به زیر 70 مگابایت برسد 

برخی موارد پیش می آید که فضای شما بصورت موقتی از قضای soft quota بیشتر می شود مثلا یک برنامه را کامپایل می کنید یا یک برنامه را extract می کنید و مواردی از این قبیل ، اما بعد از مدتی این فضا حذف شده و باز به زیر اندازه soft quota می رسد 

سیستم یک مدت زمان در انتظار شما می ماند که فضای اشغالی زیادتر را به سیستم برگردانید و در صورتیکه بر نگرداندید soft quota شما تبدیل به hard quota می شود و این یعنی دیگر به هیچ عنوان نمی توانید بیشتر از 70 مگابایت در سیستم اطلاعات ذخیره کنید.

اگر به خروجی بالا دقت کنید ما در دو قسمت soft و hard داریم ، در قسمت اول شما می توانید محدودیت ها را بر اساس میزان block های مجاز حافظه به کاربر اعمال کنید و در قسمت دوم می توانید محدودیت را بر اساس تعداد inode های مجاز کاربر برای ایجاد کردن اعمال کنید ، عدد صفر یعنی هیچ محدودیت و quota ای وجود ندارد ، برای اینکه بتوانید مدت زمان grace period یا همان زمان مجاز سیستم را تغییر بدهید می توانید از پارامتر –t یا همان time به شکل زیر استفاده کنید :

edquota –t

grace period با استفاده از دستور بالا بر روی همه کاربران و گروه ها اعمال می شود ، اگر بخواهیم برای یک کاربر خاص grace period تعریف کنیم می توانیم با استفاده از دسترسی کاربر root و استفاده از پارامتر T و نام کاربر مورد نظر به شکل زیر فقط grace period یک کاربر را تغییر بدهیم ، به مثال زیر توجه کنید :

edquota -T <username>

اگر بخواهید grace period را برای یک گروه خاص تغییر بدهید علاوه بر T بزرگ بایستی از g برای مشخص کردن نام گروه مورد نظر به شکل زیر استفاده کنید :

edquota -T -g <groupname

در چند دستور بالا شما با تغییر دادن مقادیر block ها و inode ها می توانید محدودیت استفاده را اعمال کنید ، دقت کنید که hard و soft بایستی تناسب داشته باشند و همیشه soft از hard بایستی بزرگتر باشد.

چگونه می توانیم Quota های فایل سیستم ها را مشاهده کنیم ؟

برای گزارش گیری از وضعیت اعمال disk quota در سیستم می توانید از دستور repquota به شکل زیر استفاده کنید و خروجی مشخصات را مشاهده کنید :

[root@itpro-debian ~]# repquota -a
*** Report for user quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 149628 0 0 4 0 0 
unity  +- 50000 45000 50000 6days 17 0 0

امیدوارم مورد توجه شما قرار گرفته باشد.


محمد نصیری
محمد نصیری

بنیانگذار انجمن تخصصی فناوری اطلاعات ایران ، هکر کلاه خاکستری ، کارشناس امنیت اطلاعات و ارتباطات

محمد نصیری هستم ، هکر قانونمند و کارشناس امنیت سایبری ، سابقه همکاری با بیش از 50 سازمان دولتی ، خصوصی ، نظامی و انتظامی در قالب مشاور ، مدرس و مدیر پروژه ، مدرس دوره های تخصص شبکه ، امنیت ، هک و نفوذ ، در حال حاضر در ایران دیگه رسما فعالیتی غیر از مشاوره انجام نمیدم و مقیم کشور ترکیه هستم ، عاشق آموزش و تدریس هستم و به همین دلیل دوره های آموزشی که ضبط می کنم در دنیا بی نظیر هستند.

نظرات