LINUX-文件的特殊屬性 - 使用 "+" 設置權限,使用 "-" 用於取消 ,對於一些特殊的文件,為防止用戶誤操作,可以加特殊屬性


chattr +a file1 只允許以追加方式讀寫文件 
chattr +c file1 允許這個文件能被內核自動壓縮/解壓 
chattr +d file1 在進行文件系統備份時,dump程序將忽略這個文件 
chattr +i file1 設置成不可變的文件,不能被刪除、修改、重命名或者鏈接 
chattr +s file1 允許一個文件被安全地刪除 
chattr +S file1 一旦應用程序對這個文件執行了寫操作,使系統立刻把修改的結果寫到磁盤 
chattr +u file1 若文件被刪除,系統會允許你在以后恢復這個被刪除的文件 
lsattr 顯示特殊的屬性 

 

=====================

Linux文件特殊屬性
Linux文件特殊屬性主要包括它的默認權限、隱藏屬性和特殊權限(SUID/SGID/SBIT)。
下面我們就來分別講解它的這些特殊屬性。
 
1. Linux文件默認權限:umask
我們在新建立一個文件時,它都有自己的默認屬性。它們的默認屬性是通過“umask”值來設定的。
那么如何來查看和設置umask值呢?
① 查看umask值
0022
 
上面的命令顯示出umask值的兩種表現形式。我們看到數字表現出來的有4位數字,第一位數字用來表示特殊權限,我們在后面介紹,第二三四位數字分別用來表示用戶/組/其他用戶的權限。
在默認權限的屬性上,目錄文件和普通文件是不同的。因為我們不希望普通文件具有可執行權限,所以,普通文件在默認情況下是沒有執行權限的。又因為目錄文件需要具有可執行權限才可以進入,所以普通文件的默認屬性最大為666,目錄文件的默認屬性最大為777。
 
② umask值的意義
umask值就是指“Linux文件的默認屬性需要減掉的權限”。比如Linux普通文件的最大默認屬性是666,目錄文件的最大屬性是777。但是我們不想要用戶在新建立文件時,文件的屬性是666或777,那么我們就要設置umask值。Linux系統預置的umask值是022,那么用戶在新建立普通文件時,普通文件的屬性就是666-022=644,新建立目錄文件時,目錄文件的屬性就是777-022=755。
 
③ umask值設置
我們不想要新建立的普通文件的屬性是644,目錄文件的屬性是755,我們想要新建立普通文件的屬性是664,新建立目錄文件的屬性是775。那么我們就設置umask值為002即可。設置方法就是“umask 002”。
 
2. Linux文件隱藏屬性
文件都具有隱藏屬性,隱藏屬性對於系統安全來說很重要。
① 設置文件隱藏屬性
[root@localhost /]#chattr [-R] [-+=] [AacDdijsSu] 文件名
 
常用參數意義:
-R:遞歸處理。
-:刪除某個隱藏屬性,其他原本存在的屬性不改變。
+:添加某個隱藏屬性,其他原本存在的屬性不改變。
=:將隱藏屬性設置為指定的參數,其他原本存在的屬性會被改掉。
A(atime):如果設置了A屬性,則這個文件的最后訪問時間atime不能被修改。
a(append only):如果設置了a屬性,則這個文件只能增加數據,不允許任何進程覆蓋或截斷這個文件。如果某個目錄具有這個屬性,那么只能在這個目錄下建立和修改文件,而不能刪除任何文件。
i(immutable):如果設置了i屬性,則不能對這個文件做任何修該。如果某個目錄具有這個屬性,那么只能修改該目錄下的文件,而不能建立和刪除文件。
s(secure deletion):如果設置了s屬性,則這個文件將從硬盤空間中完全刪除。
u(undeletable):與s完全相反。如果設置了u屬性,則這個文件雖然被刪除了,但是還在硬盤空間中存在,還可以用來還原恢復。
 
② 查看文件隱藏屬性
文件既然有隱藏屬性,那么我們如何查看這些文件的隱藏屬性呢?
[root@localhost /]#lsattr [-RVadlv] 文件名
 
 
[root@localhost /]#lsattr –Ra CaiWu
 
3. Linux文件特殊權限
Linux文件特殊權限主要體現在set UID、set GID、Sticky Bit這三個上面。
要理解這三個特殊權限,就要先理解賬號的ID(UID和GID)以及進程等概念。
① SUID
SUID就是Set UID。設置它是為了讓普通用戶在執行某些程序時,能夠暫時具有該程序的擁有者權限。
比如:在Linux系統中普通用戶也可以使用passwd命令來修改自己的密碼。但是密碼文件shadow只有root用戶有讀權限,其他用戶沒有任何權限,那么普通用戶是怎樣通過passwd命令來修改自己的密碼呢?我們看下/usr/bin/passwd程序的屬性就知道了。
[root@localhost /]# ll /usr/bin/passwd
-rwsr-xr-x 1 root root 22984 Jan 7 2007 /usr/bin/passwd
 
我們發現passwd程序user的x權限位變成了s。那么在這里就是這個s使普通用戶有權限來執行這個程序。它讓普通用戶在執行passwd這個程序時暫時擁有了root的權限。
因此,當某程序user的x權限位變成s時,就是進行了Set UID設置,簡稱SUID。
SUID僅可用於二進制文件,對於其他普通文件,目錄文件和腳本之類的文件是無效的。
 
② SGID
SGID就是Set GID。設置它用來作用於用戶組。
如果將SGID設置在二進制文件上,則不論用戶是誰,在執行該程序時,它的有效用戶組將會變成改程序的用戶組所有者;
如果將SGID設置在目錄文件上,則在該目錄文件內所建立的文件或目錄的用戶組,將會變成該目錄的用戶組。
SGID一般用於團隊的項目開發上,在系統中很少使用。如果設置了SGID,那么該二進制文件或者目錄group的x屬性位將會變成s。
 
③ SBIT
SBIT就是Sticky Bit。如果在設置了SBit屬性的目錄中,用戶在該目錄下擁有w和x權限,那么當用戶在該目錄下新建文件時,只有文件擁有者和root才有權利刪除。
比如:root在/目錄下建立了一個文件夾test,test的權限是0777。在沒有加特殊權限前,任何人都可以在test目錄下做任何事,包括刪除別人建立的文件。當我給test目錄設置了SBit屬性后,那么bobyuan這個用戶在test下新建了一個文件bobtest, 屬性是0777;bob這個用戶進入test目錄下試圖刪除bobtest,發現沒有權限刪除。
如果某個目錄設置了SBit屬性,那么該目錄other的x屬性位將會變成t。如【drwxrwxrwt】。
SBIT僅可用於目錄文件對於普通文件是不生效的。
如果某個文件的user或者group或者other沒有設置x屬性,但是設置了SUID或者SGID或者GBIT,那么,這些特殊屬性將會以大寫的S和T表現出來。
 
④ 設置SUID/SGID/SBIT
我們用數字形式來表示這三個特殊屬性,他們和r/w/x的數字表現形式類似。
SUID:4
SGID:2
SBIT:1
比如我要設置cat命令的SUID屬性,那就可以用chmod 4755來實現。
比如我要設置test目錄的SBIT屬性,那就可以用chmod 1777來實現。
注意,在設置目錄或者二進制文件的特殊屬性時,一定要給予這些目錄或者文件可執行權限。如果未給予可執行權限,即使設置了特殊屬性,也將會是空的,會用大寫的S和T表示。
      本文轉自yuanbin0710 51CTO博客,原文鏈接:http://blog.51cto.com/yuanbin/114913,如需轉載請自行聯系原作者
****************************************************************
=================================================

chattr

    對於一些特殊的文件,為防止用戶誤操作,可以加特殊屬性,示例如下:
    +i:鎖定
            示例文件:
                    [root@centos76 data]#ll test.txt -rw-r--r--. 1 root root 48 Mar 12 19:30 test.txt +i鎖定文件 [root@centos76 data]#chattr +i test.txt 查看文件屬性,發現與之前一樣 [root@centos76 data]#ll test.txt -rw-r--r--. 1 root root 48 Mar 12 19:30 test.txt 進行驗證+i功能是否生效 重定向內容: [root@centos76 data]#echo 1111 > test.txt ** -bash: test.txt: Permission denied ** 查看一下: [root@centos76 data]#cat test.txt abcdedf abcdedf abcdedf fdedcba fdedcba fdedcba 重命名: [root@centos76 data]#mv test.txt haha.txt **mv: cannot move ‘test.txt’ to ‘haha.txt’: Operation not permitted** 刪除文件: [root@centos76 data]#rm -f test.txt **mv: cannot remove ‘test.txt’: Operation not permitted** +a:只能追加 示例文件:仍然采用上次測試的test.txt文件 [root@centos76 data]#chattr +a test.txt 重定向內容: [root@centos76 data]#echo 222 > test.txt **-bash: test.txt: Operation not permitted** 重命名: [root@centos76 data]#mv test.txt haha.txt **mv: cannot move ‘test.txt’ to ‘haha.txt’: Operation not permitted** 刪除: [root@centos76 data]#rm -f test.txt **mv: cannot remove ‘test.txt’: Operation not permitted** 追加內容: [root@centos76 data]#echo 222 >> test.txt [root@centos76 data]#cat test.txt abcdedf abcdedf abcdedf fdedcba fdedcba fdedcba 222 +A:鎖定atime的時間,減少讀文件對磁盤IO的影響,以提高性能。 [root@centos76 data]#chattr +a test.txt 第一次讀取,記錄atime的時間 [root@centos76 data]#cat test.txt 333 444 555 [root@centos76 data]#stat test.txt File: ‘test.txt’ Size: 12 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 83 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:etc_runtime_t:s0 **Access: 2019-03-18 11:12:50.425400248 +0800** Modify: 2019-03-18 11:03:18.770446437 +0800 Change: 2019-03-18 11:12:42.139400918 +0800 Birth: - 第二次讀取,atime時間沒有變化,如下: [root@centos76 data]#cat test.txt 333 444 555 [root@centos76 data]#stat test.txt File: ‘test.txt’ Size: 12 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 83 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:etc_runtime_t:s0 **Access: 2019-03-18 11:12:50.425400248 +0800** Modify: 2019-03-18 11:03:18.770446437 +0800 Change: 2019-03-18 11:12:42.139400918 +0800

注意:不管是+i/a/A,都會鎖定文件的atime時間

提示:由於rm -f做了別名設置,在使用此命令時,會提示mv操作

lsattr 可以查看chattr對應的屬性


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM