Chattr (Change Attribute) یک ابزار خط فرمان لینوکس است که برای تنظیم/حذف ویژگی‌های خاص یک فایل در سیستم لینوکس استفاده می‌شود؛ با استفاده از این دستور می‌توان از حذف یا تغییر تصادفی فایل‌ها و پوشه‌های مهم، حتی برای کاربر Root را جلوگیری کرد.
هر فایل می‌توان ویژگی‌هایی منحصر به فرد را داشته باشد؛ به این ویژگی‌ها پرچم می‌گوییم؛ تمامی فایل‌سیستم‌های اصلی لینوکس، یعنی ext2، ext3، ext4، btrfs و ... از همه پرچم‌ها پشتیبانی می‌کنند؛ اما سایر فایل‌سیستم‌ها مثل NTFS مایکروسافت از همه این پرچم‌ها (ویژگی‌ها) پشتیبانی نمی‌کنند.
هنگامی‌که ویژگی‌ها با دستور chattr تنظیم می‌شوند، هیچ کاربری نمی‌تواند آن فایل/پوشه را حذف کرده و یا تغییر دهد، حتی اگر کاربر تمام مجوزها را روی آن فایل/پوشه داشته باشد؛ این دستور برای تنظیم ویژگی‌های موجود در فایل‌های سیستمی مانند فایل‌های passwd و shadow که اطلاعات کاربر در آن قرار دارد، بسیار مفید است.

 

ساختار دستوری chattr

chattr [operator] [flags] [filename]


ویژگی‌ها و پرچم‌ها

در زیر لیستی از ویژگی‌های رایج وجود دارد و پرچم‌های اختصاص یافته با استفاده از دستور chattr می‌توانند تنظیم شوند:


در ادامه تعدادی از این ویژگی‌ها را توضیح خواهیم داد.

    • اگر دسترسی به یک فایل با ویژگی ‘A’ تنظیم شده باشد، رکورد atime (atime تاریخ آخرین باری که یک فایل توسط یک کاربر مشاهده یا ویرایش شده را ذخیره می‌کند ) آن به روز نمی‌شود.
    • اگر تغییر یک فایل با ویژگی ‘S’ تنظیم شده باشد، تغییرات به طور همزمان در دیسک به روز می‌شوند.
    • فایلی که با ویژگی ‘a’ تنظیم شده است، فقط می‌تواند در حالت append (ویژگی append به این معنی است که فقط می‌توان به فایل اضافه کرد و نمی‌توان قسمتی از فایل اصلی را تغییر داد) برای نوشتن باز باشد.
    • فایلی که با ویژگی ‘i’ تنظیم شده است، قابل تغییر نیست. یعنی نه تغییر نام، نه ایجاد لینک سیمبلیک، ​​نه اجرا و نه نوشتن برای آن فایل امکان پذیر نمی‌باشد بلکه تنها یک کاربر از گروه root می‌تواند این ویژگی را از روی آن فایل بردارد.
    • فایلی که با ویژگی ‘t’ تنظیم شده است، غیرقابل ادغام خواهد بود.
    • فایلی که با ویژگی ‘d’ تنظیم شده است، دیگر هنگام اجرای فرآیند dump (برنامه dump برنامه‌ای است که از فایل‌ها بک‌آپ یا نسخه پشتیبان تهیه می‌کند) برای تهیه نسخه پشتیبان انتخاب نمی‌شود.
    • هنگامی‌که یک فایل با ویژگی ‘u’ حذف می‌شود، داده‌های آن در جای دیگری ذخیره می‌شوند. این کار، کاربر را قادر می‌سازد تا بتواند در صورت نیاز فایل را بازگرداند.

لیست کامل این عملگر‌ها را می‌توان در این آدرس مطالعه کرد: chattr

عملگرها

 + : یک ویژگی جدیدی را به ویژگی‌های موجود فایل‌ها اضافه می‌کند.
 -  : یک ویژگی مشخصی را از ویژگی‌های موجود فایل‌ها حذف می‌کند.
 = : ویژگی‌های فایل‌ها را نگه می‌دارد.
در اینجا، ما می‌خواهیم برخی از نمونه‌های دستور chattr را برای تنظیم ویژگی‌های یک فایل و پوشه‌ها نشان دهیم.

 

چگونگی افزودن ویژگی‌ها به فایل‌ها برای ایمن کردن آنها از حذف تصادفی

در اینجا ما از پوشه demo و فایل important_file.conf استفاده می‌نماییم. ما می‌توانیم با استفاده از دستور "lsattr" ویژگی‌های فایل‌ها را مشاهده کنیم:

lsattr

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


برای تنظیم ویژگی، ما از علامت  و برای بازگرداندن به حالت قبل از علامت  –  به همراه دستور chattr استفاده می‌کنیم. با استفاده از دستور زیر بیت مربوط به تغییر ناپذیری را روی فایل‌ها با پرچم +i قرار می‌دهیم؛ تا از حذف آن توسط هر کاربری جلوگیری شود، در این صورت حتی یک کاربر root نیز اجازه حذف آن را ندارد.

chattr +i demo/
chattr +i important_file.conf

توجه: بیت غیرقابل تغییر +i فقط می‌تواند توسط کاربر  superuser (یعنی root) یا کاربر با مجوز sudo تنظیم شود.
پس از تنظیم بیت غیرقابل تغییر، می‌توانیم ویژگی را با دستور ‘lsattr’ بررسی کنیم:


اکنون، سعی کنید فایل را به اجبار حذف نمایید، آن را تغییر نام دهید یا مجوزهای آن را تغییر دهید، به شما اجازه داده نمی‌شود و پیغام “Operation not permitted” داده می‌شود.

rm -rf demo/

خروجی دستور بالا به صورت زیر است:

همچنین این فایل قابل تغییرنام را نیز ندارد! با دستور زیر این مورد را بررسی می‌کنیم:

mv demo/ demo_alter

خروجی این دستور به صورت زیر است:

و حتی مجوز‌های این فایل نیز قابلیت تغییر ندارند:

chmod 755 important_file.conf

خروجی دستور بالا به صورت زیر است:


نحوه حذف ویژگی در فایل‌ها

در مثال بالا، ما چگونگی تنظیم ویژگی را برای ایمن سازی فایل و جلوگیری از حذف تصادفی فایل مشاهده کردیم، در اینجا در این مثال چگونگی بازنشانی مجوزها (حذف ویژگی) را مشاهده کرده و با استفاده از پرچم -i اجازه می‌دهیم که یک فایل قابل تغییر شود.

 chattr -i demo/ important_file.conf

پس از بازنشانی مجوزها، وضعیت تغییر ناپذیری فایل‌ها را با استفاده از دستور ‘lsattr’ بررسی کنید.

 lsattr
---------------- ./demo
---------------- ./important_file.conf


شما در نتایج فوق می‌بینید که پرچم ‘-i’ حذف شده است، به این معنی که می‌توانید تمام فایل‌ها و پوشه‌های موجود در پوشه jeyserver را با خیال راحت به صورت ایمن حذف کنید.

rm -rf jeyserver/

 ls -l
total 0

 

چگونه می‌توان فایل‌های /etc/passwd و /etc/shadow را ایمن کرد؟

تنظیم ویژگی غیرقابل‌تغییری در فایل‌های /etc/passwd یا /etc/shadow، باعث می‌شود آنها از حذف یا دستکاری تصادفی ایمن شوند و همچنین ایجاد حساب کاربری را غیرفعال می‌کند.

chattr +i /etc/passwd
chattr +i /etc/shadow

اکنون سعی کنید یک کاربر سیستم جدید ایجاد کنید، پیغام خطایی دریافت خواهید کرد که می‌گوید ‘cannot /etc/passwd’.

 useradd tecmint
useradd: cannot open /etc/passwd

به این ترتیب می‌توانید مجوزهای تغییر ناپذیری را روی فایل‌های مهم یا فایل‌های پیکربندی سیستم خود تنظیم کنید؛ تا از حذف آن جلوگیری شود.

 

اضافه کردن داده بدون تغییر داده‌های موجود در یک فایل

فرض کنید، شما تنها می‌خواهید به همه اجازه دهید داده‌ها را بدون تغییر داده‌های وارد شده، فقط در یک فایل پیوست نمایند؛ در این صورت می‌توانید از ویژگی ‘a’ به صورت زیر استفاده کنید.

 chattr +a example.txt

lsattr example.txt
-----a---------- example.txt


پس از تنظیم حالت append، فایل می‌تواند تنها برای نوشتن داده‌ها در حالت append باز شود. شما می‌توانید این ویژگی append را به صورت زیر حذف کنید.

chattr -a example.txt

اکنون سعی کنید، محتوای موجود را بر روی یک فایل example.txt جایگزین کنید. در این صورت با خطای ‘Operation not permittied’ روبه‌رو می‌شوید.

echo "replace contain on file." > example.txt
-bash: example.txt: Operation not permitted

اکنون سعی کنید، محتوای جدید را در یک فایل موجود example.txt اضافه کرده و آن را وارسی نمایید.

 echo "replace contain on file." >> example.txt


چگونه می‌توان دایرکتوری‌ها را ایمن کرد

برای ایمن کردن کل دایرکتوری و فایل‌های آن ، از کلید R (مخفف عبارت بصورت بازگشتی) با پرچم ‘+i’ به همراه مسیر کامل پوشه استفاده می‌کنیم.

chattr -R +i myfolder


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

rm -rf myfolder/
rm: cannot remove 'myfolder/': Operation not permitted

برای خاموش کردن مجوز، از همان کلید ‘-R’ با پرچم ‘-i’ به همراه مسیر کامل پوشه استفاده کنید.

chattr -R -i myfolder

 

 

اقتباس شده از:

Tecmint