file attributes

اضافه کردن اتریبیوت به فایل ها در لینوکس (File attribute)

File attributes   یکی از راه های محافظت از فایل ها و دایرکتوری ها مهم در برابر تغییرات خواسته و ناخواسته توسط کاربران، و یا حذف آنها است. در این روش با افزودن خصوصیاتی به فایل میتوان حتی برای کاربر root  هم محدودیت در ایجاد تغییر یا حذف فایل مورد نظر را ایجاد نماید.

برای ایجاد این خصوصیات از دستور chattr استفاده می گردد. در فایل سیستم های پیش فرض لینوکس مانند ext2، ext3،ext4 و.. تمامی Flag های این دستور پیشتیانی می شود. مادامی که اتریبیوتی  بر روی فایل با دایرکتوری افزوده گردد امکان حذف آن حتی برای کاربرانی که دسترسی کامل به فایل دارند نیز محیا نخواهد بود.

ساختار کلی دستور به شکل زیر می باشد.

# chattr [operator] [flags] [filename]

 

Attributes and Flags

در ادامه لیستی از اتریبیوت ها وflag اختصاص داده شده به آنها را مشاهده خواهید کرد.

A یا no atime updates : اگر فایلی دارای این اتریبیوت باشد رکورد atime  آن update  نخواهد شد.

    • ctime: بیانگر آخرین زمانی است که وضعیت inode  که تغییر کرده است. (inode ها بیانگر اتریبیوت ها و محل قرار گیری بلاک های یک آبجکت است).
    • mtime: آخرین زمانی که فایل یا دایرکتوری اصلاح شده یا تغییری در آن صورت گرفته است.
    • atime: بیانگر آخرین زمانی است که کسی به فایل یا دایرکتوری دسترسی داشته است.

e یا extent format: بیانگر این است که فایل از extent  برای مپ کردن بلاک ها در دیسک استفاده خواهد کرد.

s یا secure deletion: اگر فایلی با این اتریبیوت آپدیت شود، تغییرات همزان بر روی دیسک نیز اعمال خواهد شد.

a یا append Only: فایلی که دارای این اتریبیوت باشد در حالت append mode قرار دارد. بدین معنی که اطلاعاتی که سابقا در فایل نوشته شده است قابل تغییر نمی باشد اما امکان اضافه کردن اطلاعات جدید به انتهای فایل وجود دارد.

i یا immutable: اگر فایلی دارای اتریبیوت i باشد امکان ایجاد تغییر در آن وجود نخواهد داشت. در واقع امکان تغییر نام، ایجاد سیمبولیک لینک، اجرا، نوشتن از روی فایل حذف خواهد شد. حتی کاربر root نیز قادر به انجام این کارها نخواهد بود مگر این که این اتریبیوت از روی فایل حذف گردد که این کار نیز تنها توسط کاربری با دسترسی Superuser انجام پذیر است.

j یا data journaling: تغییرات در فایل به صورت جورنال در فایل سیستم نوشته می شود حتی قبل از این که خود فایل آپدیت شود. خصوصیتی که می تواند ریسک data corruption را کاهش دهد.

t یا  no tail-merging: خصوصیت tail-merging  که با نام های tail packing  و block sub allocation  نیز شناخته می شود را بر روی فایل غیر فعال میکند. این خصوصیت امکان استفاده از فضاهای استفاده نشده از بلاک ها را تحت عنوان یک بلاک فراهم می کند.

این گزینه برای برنامه هایی که مستقیم فایل سیستم را می خوانند (مانند LILO) و tail-merging  را توجه نمی شوند استفاده از این اتریبیوت لازم است.

d یا no dump: هنگامی که پردازش پشتیبانگیری توسط  dumpدر حال اجرا باشد، از فایل هایی که دارای اتریبیوت d  باشند پشتیبانی تهیه نخواهد شد.

u یا undeletable: فایل هایی که دارای این اتریبیوت هستند پس از حذف شدن اطلاعات آنها حذف نمی شود و امکان بازبازگردانی فایل برای کاربر فراهم خواهد بود.

c یا compressed: از طریق این اتریبیوت کرنل به صورت اتوماتیک داده های نوشته شده در فایل را به صورت فشرده ذخیره میکند و در هنگام خوانده شدن فایل نیز به صورت اتوماتیک آن را از حالت فشرده خارج می نماید.

اپراتور ها:

+ : اضافه کردن اتریبیوت به اتریبیوت های موجود فایل

-: حذف یک اتریبیوت

=: نگه داشتن اتریبیوت های موجود یک فایل

در ادامه چند نمونه از این اتریبیوت ها و روش اضافه کردن آنها را باهم بررسی خواهیم کرد.

جلوگیری از حذف یک فایل با استفاده از اتریبیوت:

همانطور که در خروجی دستور مشاهده می کنید در مسیر /root/hamed دو فایل به شرح زیر وجود دارد که دارای هیچ اتریبیوتی نیستند.

[root@Hamed-LAB:~]# ls -lah hamed
total 44K
drwxr-xr-x  2 root root 4.0K Jun 18 15:41 .
drwxr-xr-x 12 root root  20K Jun 18 15:30 ..
-rw-r--r--  1 root root 5.5K Jun 15  2017 IP_list
-rw-r--r--  1 root root 9.7K Jun 15  2017 userlist.csv

 

برای اضافه کردن اتریبیوت از دستور chattr و اپراتور + استفاده می نمائیم. برای جلوگیری از حذف فایل حتی توسط کاربر root کافی است flag را +i قرار دهیم.

[root@Hamed-LAB:~]# chattr +i /root/hamed/userlist.csv

 

توجه داشته باشید که اضافه کردن این flag  تنها توسط superuser  یا کاربر با سطح دسترسی sudo  امکان پذیر خواهد بود.

حال پس از اضافه کردن flag  مربوطه با استفاده از دستور lsattr  لیستی از اتریبیوت های اضافه شده به فایل یا دایرکتوری را مشاهده خواهید کرد.

در صورتی که قصد دارید تا اتریبیوت خاصی را برای یک دایکتوری و محتویات داخل آن تنظیم نمائید کافی است از سوئیچ –R (Recursively) استفاده نمائیم.

 

[root@Hamed-LAB:~]# chattr  -R +i /root/hamed/
[root@Hamed-LAB:~]# chattr -R +i /root/hamed
[root@Hamed-LAB:~]# lsattr  /root/hamed     
----i--------e- /root/hamed/userlist.csv
----i--------e- /root/hamed/IP_list
[root@Hamed-LAB:~]# lsattr /root/hamed/userlist.csv
----i--------e- /root/hamed/userlist.csv
----i----------- ./important_file.conf

 

حال تلاش میکنیم تا فایل را حذف نمایم یا تغییری به هر نحوه در آن ایجاد نمائیم.

[root@Hamed-LAB:~]# rm -f /root/hamed/userlist.csv 
rm: cannot remove `/root/hamed/userlist.csv': Operation not permitted

 

همانطور که در بالا مشاهده می نمائید حتی نام کاربری root نیز قادر به ایجاد تغییرات نخواهد بود.

[root@Hamed-LAB:~]# mv /root/hamed/userlist.csv /root
mv: cannot move `/root/hamed/userlist.csv' to `/root/userlist.csv': Operation not permitted
[root@Hamed-LAB:~]# echo testing > /root/hamed/userlist.csv
-bash: /root/hamed/userlist.csv: Permission denied
[root@Hamed-LAB:~]# chmod 777 /root/hamed/userlist.csv
chmod: changing permissions of `/root/hamed/userlist.csv': Operation not permitted

 

حذف اتریبیوت

برای حذف اتریبیوت کافی است تا با استفاده از دستور chattr  و قرار دادن flag  برابر با –i  اتریبیوت اضافه شده را حذف نمائیم.

[root@Hamed-LAB:~]# chattr -i /root/hamed/userlist.csv 
[root@Hamed-LAB:~]# lsattr /root/hamed/userlist.csv

 

یکی از کاربرد های استفاده از این اتریبیوت محافظت از فایل های passwd یا shadow  در مسیر /etc در برابر حذف ناخواسته آنها یا جلوگیری از اضافه نمودن کاربر جدید می باشد. چرا که با اضافه نمودن این اتریبیوت سیستم عملا امکان اضافه کردن اطلاعات کاربر جدید در این فایل ها را نخواهد داشت.

[root@Hamed-LAB:~]# chattr +i /etc/passwd
[root@Hamed-LAB:~]# chattr +i /etc/shadow
[root@Hamed-LAB:~]# useradd hamed
useradd: cannot open /etc/passwd

 

 

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

تصور کنید فایل مهمی دارید که قصد دارید به سایر کاربران تنها اجازه دهید داده های خود را به انتهای فایل اضافه نمایند بدون این که محتویات قبلی فایل تحت تاثیر قرار گیرد. در این صورت با توجه به توضیحات فوق از flag a استفاده خواهیم نمود.

 [root@Hamed-LAB:~]# chattr -R +a /root/hamed/IP_list
[root@Hamed-LAB:~]# lsattr /root/hamed/IP_list
-----a-------e- /root/hamed/IP_list

 

بعد از اضافه کردن این اتریبیوت سعی میکنیم تا داده های موجود در فایل را تغییر دهیم. همانطور که میبینید امکان وارد داده جدید . جایگزین کردن  آنها وجود ندارد. در صورتی که انمکان اضافه کردن داده های جدید به انتهای فایل برای ما فراهم است.

 

echo  "192.168.1.5 mehdi" > /root/hamed/IP_list
-bash: /root/hamed/IP_list: Operation not permitted
[root@Hamed-LAB:~]# echo  "192.168.1.5 mehdi" >> /root/hamed/IP_list
[root@Hamed-LAB:~]# cat  /root/hamed/IP_list                        
192.168.1.2 hamed
192.168.1.3 saeid
192.168.1.4 mahmoud
192.168.1.5 mehdi

 

امیدوارم مفید واقع شده باشد.

حامد
اشتراک دانش رو دوست دارم برای همین سعی میکنم مطالب آموزشی ای تهیه شده دارای جزئیات خوب و به صورت کامل تهیه بشوند.استفاده از مطالب این سایت در هر جایی بلا مانع می باشد. اما ذکر منبع رفتاری حرفه ای و اخلاقی خواهد بود. من را از نظرات خود مطلع سازید. و اگر میخواهید در مورد من بیشتر بدانید سری به صفحه "در باره من" بزنید.