Linux是多用戶多任務的分時操作系統,如果每個人都對文件和目錄都是隨便訪問的話,難么你的文件很有可能會被他人刪除或修改,從而丟失數據。為此系統對文件增加了權限的機制來防止這種事情的發生。對文件而言,用戶被分為三類:屬主(onwer)、屬組(group)、和其他(other)。常規的權限分為:讀(r readable)、寫(w writable)、執行(x excutable)。使用ls -l 可以列出文件的權限。
[root@localhost boot]# ls -l
total 107008
-rw-r--r--. 1 root root 126426 Nov 20 2015 config-3.10.0-327.el7.x86_64
以上為例最左邊的-為文件的類型,-表示普通文件、d表示目錄等。后面9位以三個為一種,分別代表了屬主、屬組、和其他 三個權限是 rwx。如果沒有就用-表示。文件和目錄對應的rwx權限是不一樣的。用八進制表示r=4、w=2、x=1。
管理員可以使用chmod和chown來更改用戶的權限和文件的屬主和屬組等操作。
對目錄來說
r:表示可以用ls命令查看此目錄下的文件列表,但它要跟目錄的x權限一起是用
w:可在此目錄中創建文件,也可刪除此目錄中的文件,也許x權限一起使用
x:目錄最基本的權限,如果沒有x目錄將無法正常使用。
對文件來說
r:可是使用文件類查看器查看。如cat、head等
w:可以對文件內容進行修改,它沒有刪除文件的權限。刪除文件的權限看父目錄是否有w的權限
x:可以把此文件提請內核啟動為一個進程 一般文件不加x權限,除二進制命令文件
chmod 更改目錄或文件的權限
權限范圍
u 屬主
g 屬組
o 其他
a 所有人
r讀取權限 數字表示 "4"
w寫入權限 數字表示 "2"
x執行權限 數字表示 "1"
s 特殊權限
t 特殊權限
語法
chmod [OPTION]... MODE[,MODE]... FILE... chmod [OPTION]... OCTAL-MODE FILE... #使用八進制模式 chmod [OPTION]... --reference=RFILE FILE... #參照其他文件或目錄
常用選項
-c, --changes #顯示改變信息 -R, --recursive #遞歸改變,如改變目錄是,其子目錄和文件的權限一起干煸 --reference=RFILE #參數其他文件或目錄
例如
[root@localhost testdir]# ll total 0 -rw-rw-r-- 1 root root 0 Aug 6 11:37 file #源文件權限 [root@localhost testdir]# chmod ug=rwx file #ug一起更改權限 [root@localhost testdir]# ll total 0 -rwxrwxr-- 1 root root 0 Aug 6 11:37 file#更改結果 [root@localhost testdir]# chmod g-x file #g去掉x權限 [root@localhost testdir]# ll total 0 -rwxrw-r-- 1 root root 0 Aug 6 11:37 file #更改結果 [root@localhost testdir]# touch file #創建空文件 [root@localhost testdir]# ll total 0 -rw-r--r-- 1 root root 0 Aug 6 11:39 file #默認權限 [root@localhost testdir]# chmod 777 file #按八進制法更改權限 [root@localhost testdir]# ll total 0 -rwxrwxrwx 1 root root 0 Aug 6 11:39 file #更改結果 [root@localhost testdir]# ll /etc/issue ./file #列出文件詳細信息 -rw-r--r--. 1 root root 79 Jul 26 16:27 /etc/issue -rwxrwxrwx 1 root root 0 Aug 6 11:39 ./file [root@localhost testdir]# chmod --reference=/etc/issue file #參照文件更改權限 [root@localhost testdir]# ll total 0 -rw-r--r-- 1 root root 0 Aug 6 11:39 file #權限更改結果
文件和目錄的默認權限和隱藏權限
當我們創建一個新文件時,文件的權限已經分配好了,為什么會這樣呢,那就是因為與umask(遮罩碼)這個玩意有關。umask是什么呢? 基本上,umask就是指定"目前用戶在新建文件或目錄時候的權限默認值",管理員和普通用戶的umask是不一樣的。我們可以使用umask查看。目錄的默認權限等于777減去umask的022。前面的0是特殊權限位。文件的默認權限為666減去umask的022.但因為文件默認是不允許有執行權限的,所有單結果為奇數是向前進一位。
全局設置:/etc/bashrc用戶設置:~/.bashrc。
umask 用來設置限制新文件權限的掩碼
umask# #設定掩碼 umask–S 模式方式顯示 umask–p 輸出可被調用 [root@localhost testdir]# umask #管理員的umask 0022 [linux@localhost ~]$ umask #普通用戶的umask 0002
Linux的特殊權限
任何一個可執行程序文件能不能啟動為進程取決發起者對程序文件是否擁有執行權限。啟動為進程之后,其進程的屬主為發起者;進程的屬組為發起者所屬的組。進程訪問文件時的權限,取決于進程的發起者。
一 :SUID特殊權限能讓用戶使用文件屬主的權限來運行此命令。當有SUID權限時,文件的所有者x會替換成s權限 ,如果屬主沒有x權限將會以S報錯。 例如-rwsrwxrwx 1 root root 48568 May 11 16:59 /bin/cat 文件顏色呈紅色狀態。 使用chmod命令更改
1、SUID權限只對二進制程序有效。
2、程序執行者對于該程序來說,需要具備x的權限。
3、執行者在執行的過程中將會獲得該程序屬主的權限
[root@localhost /]# ll /usr/bin/tail #顯示tail原來的權限屬性 -rwxr-xr-x 1 root root 61496 May 11 16:59 /usr/bin/tail [root@localhost /]# chmod 4755 /usr/bin/tail #設置SUID權限,也可u+s方式 [root@localhost /]# ll /usr/bin/tail #顯示更改后 -rwsr-xr-x 1 root root 61496 May 11 16:59 /usr/bin/tail #屬主的x權限被s占用了 [root@localhost /]# tail /etc/shadow #用tail打開shadow,默認情況下shadow只有管理員能打開。 apache:!!:17008:::::: saslauth:!!:17008:::::: postfix:!!:17008:::::: rpcuser:!!:17008:::::: nfsnobody:!!:17008:::::: gdm:!!:17008:::::: pulse:!!:17008:::::: sshd:!!:17008:::::: tcpdump:!!:17008:::::: Alan:!!:17019:0:99999:7:::
二 : SGID能讓其他用戶以文件的屬組權限來運行此命令。當有SGID權限時,文件的屬組x會替換為r權限,如果屬組沒有x權限將會以S報錯。 文件背景顏色為黃色。使用chmod命令更改
1、SGID對二進制文件有限
2、程序執行者對于該程序來說,需要具備x的權限
3、執行者在執行的過程中將會獲得該程序的屬組的權限
4、可以針對文件和目錄使用
[root@localhost /]# mkdir /testdir #創建目錄 [root@localhost /]# chmod 2757 /testdir #更改權限 包括增加GID [root@localhost /]# su Cloud #切換到普通用戶 [Cloud@localhost /]$ cd /testdir/ #進入root創建的用戶 [Cloud@localhost testdir]$ touch file #創建空文件 [Cloud@localhost testdir]$ touch fiel2 #創建空文件 [Cloud@localhost testdir]$ mkdir dir #創建空目錄 [Cloud@localhost testdir]$ ll #顯示目錄下的文件發現組依然是root total 0 drwxrwsr-x 2 Cloud root 6 Aug 6 14:57 dir #屬組是root -rw-rw-r-- 1 Cloud root 0 Aug 6 14:57 fiel2 -rw-rw-r-- 1 Cloud root 0 Aug 6 14:56 file
三 :SBIT只對目錄有效,對文件卻無效,它的作用就是防止別人刪除對方的資料。心細的同學可能發現/tmp就是此類文件
1、當用戶對此目錄有w,x權限時,即具有寫入的權限時;
2、當用戶在該目錄下創建文件或目錄時,僅有子與root才有權利刪除該文件
[Cloud@localhost tmp]$ ll -d #查看tmp目錄屬性 最后為權限位t drwxrwxrwt. 9 root root 4096 Aug 6 15:10 . [Cloud@localhost tmp]$ mkdir dir1 dir2 #Cloud用戶創建目錄 [Cloud@localhost tmp]$ touch fi1 f2 #Cloud用戶創建文件 [Cloud@localhost tmp]$ ll #顯示詳細信息 total 0 drwxrwxr-x 2 Cloud Cloud 6 Aug 6 15:10 dir1 drwxrwxr-x 2 Cloud Cloud 6 Aug 6 15:10 dir2 -rw-rw-r-- 1 Cloud Cloud 0 Aug 6 15:10 f2 -rw-rw-r-- 1 Cloud Cloud 0 Aug 6 15:10 fi1 [root@localhost tmp]# su linux #切換其他用戶 [linux@localhost tmp]$ ll #查看目錄下文件信息 total 0 drwxrwxr-x 2 Cloud Cloud 6 Aug 6 15:10 dir1 drwxrwxr-x 2 Cloud Cloud 6 Aug 6 15:10 dir2 -rw-rw-r-- 1 Cloud Cloud 0 Aug 6 15:10 f2 -rw-rw-r-- 1 Cloud Cloud 0 Aug 6 15:10 fi1 [linux@localhost tmp]$ rm fi1 #刪除fi1 rm: remove write-protected regular empty file ‘fi1’? yes rm: cannot remove ‘fi1’: Operation not permitted #權限拒絕,雖然目錄有w的權限,但是加了t就無法刪除他人文件 [linux@localhost tmp]$ rm difr1#權限拒絕,雖然目錄有w的權限,但是加了t就無法刪除他人目錄 rm: cannot remove ‘difr1’: No such file or directory
原創文章,作者:ladsdm,如若轉載,請注明出處:http://www.www58058.com/29971
文章思路清晰,從權限模型到特殊權限管理都有了詳細的認識。