5 دستور chattr برای ایجاد فایل های مهم IMMUTABLE(غیرقابل تغییر) در لینوکس
chattr (Change Attribute) یک ابزار خط فرمان لینوکسی است که برای ست کردن و ویژگی های یک فایل در سیستم لینوکس برای امنیت در برابر حذف تصادفی و یا تغییر فایل و فولدر های مهم، حتی اگر شما به عنوان کاربر root لاگین هستید، بکار می رود.
در فایل سیستم های لینوکسی، همانند ext2 و ext3 و ext4 و btrfs و … تمامی آپشن ها پشتیبانی می شود، گرچه تمامی آپشن ها برای تمام فایل سیستم ها پشتیبانی نخواهد شد. هنگامیکه فایل و فولدر را حتی با دسترسی کامل نتوان حذف یا تغییر داد ویژگی هایی با chattr در آنها ست شده است.
تنظیم این ویژگی برای فایل هایی همچون passwd و shadow که شامل اطلاعات کاربر است می تواند بسیار مفید باشد.
Syntax of chattr
1 |
# chattr [operator] [flags] [filename] |
ویژگی ها و آپشن ها
- در زیر لیستی از ویژگی ها و آپشن هایی هستند که می توانند با دستور chattr تنظیم شوند:
- اگر یک فایل با attribute ‘A’ تنظیم شود، رکورد atime آن آپدیت نخواهد شد.
- اگر یک فایل با attribute ‘S’ تنظیم شود، تغییرات به طور همزمان برروی دیسک آپدیت خواهد شد.
- اگر یک فایل با attribute ‘a’ تنظیم شود، تنها در مد append برای نوشتن می تواند باز گردد.
- اگر یک فایل با attribute ‘i’ تنظیم شود، غیر قابل تغییر خواهد بود، به این معنی که نه امکان تغییر نام، نه ایجاد لینک سیمبولیک، نه امکان اجرایی، نه قابلیت نوشتن را ندارد و تنها superuser می تواند این ویژگی را غیر فعال کند.
- یک فایل با attribute ‘j’ قبل از آپدیت شدن خود فایل تمام اطلاعاتش به صورت ژورنالینگ ext3 آپدیت خواهد شد.یک فایل با attribute ‘t’ غیرقابل ادغام خواهد بود.
- یک فایل با attribute ‘d’ هیچگاه برای بک آپ هنگام dump گرفتن انتخاب نخواهد شد.
- هنگامیکه یک فایل با attribute ‘u’ حذف شود، داده ی آن ذخیره خواهد شد. این کاربر را برای برگرداندن آن قادر می سازد.
عملگرها
- + : attribute را به فایل اضافه می کند.
- – : attribute را از فایل حذف می کند.
- = : attribute های موجود فایل را نگه می دارد.
در اینجا ما برخی مثال های دستور chattr را برای تنظیم attribute ها به فایل را نشان خواهیم داد.
1 – نحوه ی اضافه کردن attribute ها به فایل برای امنیت در برابر حذف
برای نشان دادن این هدف، ما از فولدر demo و فایل important_file.conf استفاده خواهیم کرد. قبل از تنظیمات attribute ها، attribute های موجود در فایل با دستور ls –l را بررسی کنید. شما نتیجه را به صورت زیر خواهید دید که در حال حاضر هیچ ویژگیی تنظیم نشده است.
1 2 3 4 |
[root@tecmint tecmint]# 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 |
برای تنظیم attribute، ما از علامت “+” و برای برداشتن آن از علامت “-” با دستور chattr استفاده خواهیم کرد. بنابراین اجازه دهید بیت غیر قابل تغییر را روی فایل با +i برای جلوگیری از حذف فایل توسط هر کسی حتی کاربر روت، تنظیم کنیم.
1 2 |
[root@tecmint tecmint]# chattr +i demo/ [root@tecmint tecmint]# chattr +i important_file.conf |
نکته : بیت immutable +i تنها توسط superuser می تواند تنظیم شود.
پس از ست کردن بیت immutable فایل را با دستور lsattr بررسی کنید.
1 2 3 |
[root@tecmint tecmint]# lsattr ----i----------- ./demo ----i----------- ./important_file.conf |
حالا سعی کنید که فایل را حذف کنید، تغییر نام دهید و یا پرمیشن ها را تغییر دهید، به شما اجازه داده نخواهد شد و با پیغام “Operation not permitted“ مواجه خواهید شد.
1 2 |
[root@tecmint tecmint]# rm -rf demo/ rm: cannot remove âdemo/â: Operation not permitted |
1 2 |
[root@tecmint tecmint]# mv demo/ demo_alter mv: cannot move âdemo/â to âdemo_alterâ: Operation not permitted |
1 2 |
[root@tecmint tecmint]# chmod 755 important_file.conf chmod: changing permissions of âimportant_file.confâ: Operation not permitted |
2 – نحوه ی غیرفعال کردن attribute برروی فایل
در مثال بالا، ما دیدیم که چگونه ویژگی ها را برای امنیت و جلوگیری از حذف فایل تنظیم کنیم، در این مثال ما نحوه ی ریست کردن پرمیشن ها و اجازه ی ساخت فایل های قابل تغییر را باآپشن –i انجام خواهیم داد.
1 |
[root@tecmint tecmint]# chattr -i demo/ important_file.conf |
پس از ریست کردن پرمیشن ها، وضعیت immutable فایل را با استفاده از دستور lsattr بررسی نمایید.
1 2 3 |
[root@tecmint tecmint]# lsattr ---------------- ./demo ---------------- ./important_file.conf |
شما در نتیجه ی بالا می بینید کهآپشن -i حذف شده است، که به این معنی است که تمام فایل ها و فولدر ها در فولدر شاخه جاری می توانند حذف شوند.
1 2 3 4 |
[root@tecmint tecmint]# rm -rf * [root@tecmint tecmint]# ls -l total 0 |
3 – نحوه ی امن کردن فایل های /etc/passwd و /etc/shadow
تنظیمات attribute immutable بروی فایل /etc/passwd یا /etc/shadow، آنها را در برابر حذف امن خواهد کرد و همچنین امکان ایجاد کاربر را نیز غیرفعال خواهد کرد.
1 2 |
[root@tecmint tecmint]# chattr +i /etc/passwd [root@tecmint tecmint]# chattr +i /etc/shadow |
حالا سعی کنید تا کاربر سیستمی ای ایجاد کنید، شما با پیغام ‘cannot open /etc/passwd‘ مواجه خواهید شد.
1 2 |
[root@tecmint tecmint]# useradd tecmint useradd: cannot open /etc/passwd |
این راهی برای ست کردن پرمیشن immutable برروی فایل های مهم سا فایل های کانفیگ برای جلوگیری از حذف آنها می باشد.
4 – اضافه کردن دیتا بدون تغییر دیتای موجود برروی فایل
فرض کنید شما تنها اجازه ی اضافه کردن دیتا برروی یک فایل می باشید بدون اینکه محتوای فبلی آن تغییر کند، شما می توانید از attribute ‘a’ به صورت زیر استفاده کنید.
1 2 3 4 |
[root@tecmint tecmint]# chattr +a example.txt [root@tecmint tecmint]# lsattr example.txt -----a---------- example.txt |
پس از تنظیم مد append فایل می تواند باز شده و تنها برای اضافه کردن دیتا نوشته شود. شما می توانید این attribute را به صورت زیر غیرفعال کنید.
1 |
[root@tecmint tecmint]# chattr -a example.txt |
حالا سعی کنید محتوای فایل موجود example.txt را تغییر دهید، شما با پیغام خطای ‘Operation not permitted‘ مواجه خواهید شد.
1 2 |
[root@tecmint tecmint]# echo "replace contain on file." > example.txt -bash: example.txt: Operation not permitted |
حالا سعی کنید محتوای جدیدی به فایل موجود example.txt اضافه کنید و آن را بررسی کنید.
1 |
[root@tecmint tecmint]# echo "replace contain on file." >> example.txt |
1 2 3 |
[root@tecmint tecmint]# cat example.txt Here is the example to test 'a' attribute mean append only. replace contain on file. |
5 – نحوه ی امن کردن دایرکتوری ها
برای امنیت دایرکتوری و فایل های آن، ما می توانیم از سوئیچ –R با آپشن +i با مسیر کامل فایل استفاده کنیم.
1 |
[root@tecmint tecmint]# chattr -R +i myfolder |
بعد از تنظیمات attribute recursively، سعی کنید فولدر و فایل های آنرا حذف کنید.
1 2 |
[root@tecmint tecmint]# rm -rf myfolder/ rm: cannot remove 'myfolder/': Operation not permitted |
برای غیرفعال کردن پرمیشن ها، ما می توانیم از همان سوئیچ –R با آپشن –i با مسیر کامل فولدر استفاده کنیم.
1 |
[root@tecmint tecmint]# chattr -R -i myfolder |
برای دانستن در مورد attribute های دستور chattr و آپشن های آن از صفحه راهنمای man استفاده کنید.