5 دستور chattr برای Immutable یا تغییرناپذیر کردن فایل های مهم در لینوکس
30 جولای 2022
خواندن 2 دقیقه
نیکو رنجبر

5 دستور chattr برای Immutable یا تغییرناپذیر کردن فایل های مهم در لینوکس

در این آموزش 5 دستور chattr برای تغییر ناپذیر کردن فایل های مهم در لینوکس را بررسی خواهیم کرد! chattr ابزار خط فرمان لینوکس است که برای set/unset کردن ویژگی‌های خاص یک فایل در سیستم لینوکس استفاده می‌شود تا حذف یا تغییر تصادفی فایل‌ها و پوشه‌های مهم را تضمین کند، حتی اگر به عنوان کاربر اصلی وارد شده باشید.

در Linux native filesystems، یعنی ext2، ext3، ext4، btrfs و… از flagها پشتیبانی می‌کند، ولی non-native FS پشتیبانی نمی شود. هنگامی که ویژگی ها با دستور chattr تنظیم می شوند، نمی توان فایل یا پوشه را حذف کرد یا تغییر داد، حتی اگر کسی مجوز داشته باشد.

این آموزش برای تنظیم ویژگی‌ها در فایل‌های سیستمی مانند فایل‌های passwd و shadow که اطلاعات کاربر در آن‌ها وجود دارد بسیار مفید است.

5 دستور chattr برای IMMUTABLE (غیر قابل تغییر) فایل های مهم در لینوکس

5 دستور chattr برای تغییرناپذیر کردن فایل های مهم در لینوکس

Syntax of chattr

chattr [operator] [flags] [filename]

ویژگی ها و flag ها

در زیر لیستی از ویژگی‌های رایج و flag های مرتبط ارائه شده است که می توان با استفاده از دستور chattr set/unset کرد.

  • اگر به فایلی با مجموعه ویژگی “A” دسترسی پیدا شود، رکورد زمان آن به روز نمی شود.
  • اگر فایلی با مجموعه ویژگی “S” اصلاح شود، تغییرات به‌طور همزمان روی دیسک به‌روزرسانی می‌شوند.
  • فایلی که با ویژگی “a” تنظیم شده است، فقط می تواند در حالت ضمیمه برای نوشتن باز شود.
  • فایلی که با ویژگی “i” تنظیم شده است، نمی توان آن را تغییر داد (غیرقابل تغییر). به این معنی که بدون تغییر نام و بدون ایجاد پیوند نمادین، بدون اجرا، بدون قابلیت نوشتن، فقط superuser می تواند ویژگی را تنظیم کند.
  • فایلی که با ویژگی “j” تنظیم شده است، تمام اطلاعات آن قبل از به روز رسانی به خود فایل در ext3 journal به روز می شود.
  • فایلی که با ویژگی “t” تنظیم شده است، tail-merging نمی شود.
  • فایلی با ویژگی “d”، دیگر کاندیدای پشتیبان گیری در هنگام اجرای فرآیند dump نخواهد بود.
  • هنگامی که یک فایل دارای ویژگی “u” حذف می شود، داده های آن ذخیره می شود. این مورد به کاربر امکان می دهد تا درخواست حذف آن را بکند.

اپراتور

  • + : attribute را به ویژگی موجود فایل ها اضافه می کند.
  • – :attribute را از ویژگی موجود فایل ها حذف می کند.
  • = : ویژگی های موجودی که فایل ها دارند را حفظ می کند.

در اینجا، برخی از نمونه‌های دستور chattr را برای set/unset کردن ویژگی‌های یک فایل و پوشه‌ها آماده کرده ایم.

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

برای این منظور، ما به ترتیب از folder demo و file important_file.conf استفاده کرده‌ایم. قبل از تنظیم ویژگی‌ها، مطمئن شوید که فایل‌های موجود دارای ویژگی‌هایی هستند که با استفاده از دستور ls -l تنظیم شده‌اند. نتایج را ببینید، در حال حاضر هیچ ویژگی تنظیم نشده است.

[[email protected] admin]# ls -l
total 0
drwxr-xr-x. 2 root root 6 Aug 31 18:02 demo
-rwxrwxrwx. 1 root root 0 Aug 31 17:42 important_file.conf

برای تنظیم ویژگی ها، از علامت + و برای از تنظیم خارج کردن از علامت – با دستور chattr استفاده کنید. بنابراین، immutable bit را روی فایل‌ها با flags +i تنظیم کنید تا از حذف فایل جلوگیری شود، حتی یک کاربر root اجازه حذف آن را ندارد.

نکته: immutable bit +i را فقط می‌توان توسط کاربر superuser (یعنی root) تنظیم کرد یا کاربری با امتیازات sudo می‌تواند تنظیم کند.

پس از تنظیم immutable bit ، ویژگی را با دستور ‘lsattr’ تأیید کنید.

[[email protected] admin]# lsattr
----i----------- https://azarsys.com/wp-content/themes/azarsys/clientdemo
----i----------- https://azarsys.com/wp-content/themes/azarsys/clientimportant_file.conf
[[email protected] admin]# mv demo/ demo_alter
mv: cannot move âdemo/â to âdemo_alterâ: Operation not permitted
[[email protected] admin]# chmod 755 important_file.conf
chmod: changing permissions of âimportant_file.confâ: Operation not permitted

2. نحوه حذف ویژگی در File ها

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

[[email protected] admin]# chattr -i demo/ important_file.conf

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

[[email protected] admin]# lsattr
---------------- https://azarsys.com/wp-content/themes/azarsys/clientdemo
---------------- https://azarsys.com/wp-content/themes/azarsys/clientimportant_file.conf

در نتایج بالا مشاهده می کنید که flag “-i” حذف شده است، به این معنی که می توانید با خیال راحت تمام فایل و پوشه موجود در پوشه admin را حذف کنید.

[[email protected] admin]# rm -rf *
[[email protected] admin]# ls -l
total 0

3. نحوه ایمن کردن فایل های /etc/passwd  و /etc/shadow

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

[[email protected] admin admin]# chattr +i /etc/passwd
[[email protected] admin admin]# chattr +i /etc/shadow

اکنون اگر یک کاربر جدید بسازید، با پیغام خطایی مواجه می شوید که می گوید “cannot open /etc/passwd”.

[[email protected] admin admin]# useradd admin
useradd: cannot open /etc/passwd

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

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

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

[[email protected] admin]# chattr +a example.txt
[[email protected] admin]# lsattr example.txt
-----a---------- example.txt

پس از تنظیم append mode، فایل را می توانید فقط برای نوشتن داده ها در حالت پیوست باز کنید. شما می توانید append attribute را به صورت زیر تنظیم کنید.

[[email protected] admin]# chattr -a example.txt

اکنون سعی کنید محتوای موجود را در فایل example.txt جایگزین کنید، پس از این کار با خطای “operation not permitted” مواجه خواهید شد.

[[email protected] admin]# echo "replace contain on file." > example.txt
-bash: example.txt: Operation not permitted

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

[[email protected] admin]# echo "replace contain on file." >> example.txt
[[email protected] admin]# cat example.txt
Here is the example to test 'a' attribute mean append only.
replace contain on file.

5. نحوه ایمن سازی دایرکتوری ها

برای ایمن سازی کل دایرکتوری و فایل های آن، از سوئیچ flag -R (به صورت بازگشتی) با +i به همراه مسیر کامل پوشه استفاده کنید.

[[email protected] admin]# chattr -R +i myfolder

پس از تنظیم recursively attribute، سعی کنید پوشه و فایل های آن را حذف کنید.

[[email protected] admin]# rm -rf myfolder/
rm: cannot remove 'myfolder/': Operation not permitted

برای unset permission، از همان حالت سوئیچ R- با flag -i به همراه مسیر کامل پوشه استفاده کنید.

[[email protected] admin]# chattr -R -i myfolder

نتیجه گیری

در این آموزش 5 دستور chattr برای IMMUTABLE یا تغییر ناپذیر کردن فایل های مهم در لینوکس را بررسی کردیم. امیدوارم این مقاله برایتان مفید بوده باشد. نظرات خود را از طریق فرم زیر با ما به اشتراک بگذارید.

نویسنده مقاله
نویسنده / @نیکو رنجبر
مقالات مرتبط
دیدگاه بگذارید