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