chattr - محافطت از فایل‌ها و پوشه‌ها

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

$ chattr [options] [files]

چند نکته:

  • اگر شما یک فایل را به کمک خواص دستور chattr امن نمایید حتی در صورتی داشتن اجازه کامل یعنی (full permission) در سیستم  قادر به پاک کردن آن نخواهید بود!
  • یکی از مهم‌ترین کاربردهای دستور محافظت از فایل‌های سیستمی نظیر فایل shadow و فایل passwd می‌باشد که حاوی اطلاعات کاربران و گذرواژه‌ها می‌باشد.
  • عملگر + برای اضافه کردن خاصیت‌های (attributes) انتخابی به فایل موردنظر به‌کار می‌رود و عملگر - نقطه مقابل عملگر قبلی است و به منظور حذف کردن کردن خاصیت‌ها از یک فایل به ‌کار می‌رود و عملگر = باعث تغییری در عملگرهای جاری فایل نمی‌شود.
  • نحوه استفاده از این دستور به‌صورت نوع خلاقانه و ترکیبی می‌باشد و مانند سایر دستورها برای یک سری کاربردهای از قبل پیش‌بینی شده محدود نمی‌باشد.

پارامترها:

R-: تغییر خواص پوشه‌ها و محتویاتشان بصورت بازگشتی تا انتها

نکته: این پارامتر برای امن نمودن پوشه‌ها و محتویات آن به‌کار می‌رود.

V-: نمایش نسخه برنامه و خروجی chattr

f-: نادیده گرفتن اکثر خطاها

v-: نمایش نسخه و شماره تولید فایل

خاصیت‌ها:
a: تنها افزودن را اجازه می‌دهد

c: عمل فشرده‌سازی را انجام می‌دهد

d: جلوگیری از دامپ کردن

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

e: استفاده از فرمت extent مثل Ext3 و Ext4

i: استفاده از بیت تغییر ناپذیر یا immutable بیت

نکته: پس از اضافه شدن این خاصیت به فایل، فایل موردنظر به‌صورت فقط خواندنی (یا read-only) تبدیل می‌شود ومعادل این است بگوییم  اجازه نوشتن در فایل را نداریم.

j: تعیین اولویت نوشتن داده‌ها

نکته: ابتدا داده‌ها در سیستم فایل Ext3 نوشته می‌شود و سپس در خود فایل

s: حذف امن

t: این خاصیت موارد خاصی دارد و برنامه‌های نظیر LILO می‌توانند از آن استفاده کنن.

u: غیر قابل حذف

A: عدم به‌روزرسانی زمان atime

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

D: به‌روزرسانی همگام پوشه‌ها

S: به‌روزرسانی همگام

T: پوشه‌ای که این خاصیت را داشته باشد به عنوان بالاترین پوشه در سلسله مراتب شناخته می‌شود.

مثال: تغییر DNS در ابونتو به کمک دستور chattr

ابتدا در خط فرمان تایپ کنید:

sudo gedit /etc/resolv.conf

سپس در جلوی nameserver ابتدا 208.67.222.222 و در خط زیری 208.67.220.220 را بنویسید سپس باید برای محافظت از محتویات فایل از آن محافظت کنیم که برای این منظور از بیت immutable استفاده می‌شود. بنابراین باید فایل را طوری از لحاظ امنیتی تنظیم کنیم که قابل تغییر نباشد یا قفل شود. برای این کار از پارامتر  i+استفاده می‌کنیم.

sudo chattr +i /etc/resolv.conf

نکته: درصورتی که با خطای زیر روبرو شدیم:

chattr: Operation not supported while reading flags on /etc/resolv.conf

برای رفع خطا و اعمال تغییرات باید resolvconf را با دستور زیر حذف کنیم:

sudo apt-get remove resolvconf

و سپس کامپیوتر را ریبوت نماییم. برای پیدا کردن DNSهای جاری از دستور dig استفاده می‌کنیم.

نکته: اگر به جای i+  از  i-استفاده کنیم فایل از حالت محافظت شده یا قفل شده به حالت عادی و غیر محافظت شده بر می‌گردد.

مثال: فایل هایی که قابل حذف، نام‌گذاری مجدد، ... نیستند

به اولین نکته صفحه مراجعه کنید می‌بینید که اگر فایلی به کمک دستور chattr امن شود حتی درصورت داشتن دسترسی کامل یا (full permission) امکان حذف آن وجود ندارد لذا در همچنین مواردی مثل موارد فوق یا مورد پایین:

mv cannot move /etc/resolv.conf.dhclient-new to /etc/resolv.conf: Operation not permitted

باید به‌کمک دستور lsattr ابتدا خاصیت‌های آن را برسی کنیم و ببینیم که آیا دارای خاصیت iهست یا خیر.

نکته: به‌کمک دستور lsattr می‌توانیم بفهمیم که آیا دارای این خاصیت می‌باشد؟ به‌صورت زیر:

dotnet@dotnet-V:~$ lsattr /etc/resolv.conf
----i--------e- /etc/resolv.conf

همانطور که می بینید فایل مذکور دارای بیت تغییر ناپذیر است و داده‌های آن غیرقابل بازنویسی هستن. به همین دلیل امکان حذف، تغییر نام و... وجود ندارد لذا برای رفع این مشکل باید از i-استفاده کنیم.

$ sudo chattr -i /etc/resolv.conf

فایل موردنظر به حالت عادی و غیرمحافظت شده تبدیل می‌شود.

اطلاعات بیشتر: این‌جا