一、文件權限
我們以/etc/passwd 文件爲例,用ll長列出其屬性如下所示
[root@centos6 ~]# ll /etc/passwd -rw-r--r--. 1 root root 1619 Jan 19 10:39 /etc/passwd
--rw--r--r--:代表文件的權限。
1:代表文件的引用計數
root:代表文件所有者
root:代表文件所屬組
1619:代表文件大小
Jan 19 10:39:代表文件創建時間
/etc/passwd:代表文件名
每個文件針對每類訪問訪問者都定義了三種權限
r:Readabel
w:Writable
x:eXcutable
對於文件來說:
r:可以使用文件查看類工具獲取其內容
w:可以修改其內容
x:可以執行此文件
對於目錄來說:
r:可以使用ls查看此目錄中文件列表
w:可以在此目錄中創建,刪除文件
x:可以使用ls -l查看此目錄中文件列表,可以進入此目錄
-:代表沒有權限
文件類型中
p表示命名管道文件
d表示目錄文件
l表示符號連接文件
-表示普通文件
s表示socket文件
c表示字符設備文件
b表示塊設備文件
我們這個/etc/passwd權限爲-rw-r--r--就是644權限
二、文件屬性操作
chown
chown命令改變某個文件或目錄的所有者和所屬的組,該命令可以向某個用戶授權,使該用戶變成指定文件的所有者或者改變文件所屬的組。用戶可以是用戶或者是用戶UID,用戶組可以是組名或組id。文件名可以使由空格分開的文件列表,在文件名中可以包含通配符。
只有文件主和超級用戶纔可以便用該命令。
語法
chown(選項)(參數)
選項
-c或——changes:效果類似“-v”參數,但僅回報更改的部分;
-f或--quite或——silent:不顯示錯誤信息;
-h或--no-dereference:只對符號連接的文件作修改,而不更改其他任何相關文件;
-R或——recursive:遞歸處理,將指定目錄下的所有文件及子目錄一併處理;
-v或——version:顯示指令執行過程;
--dereference:效果和“-h”參數相同;
--help:在線幫助;
--reference=<參考文件或目錄>:把指定文件或目錄的擁有者與所屬羣組全部設成和參考文件或目錄的擁有者與所屬羣組相同;
--version:顯示版本信息。
參數
用戶:組:指定所有者和所屬工作組。當省略“:組”,僅改變文件所有者;
文件:指定要改變所有者和工作組的文件列表。支持多個文件和目標,支持shell通配符。
實例
將目錄/usr/meng及其下面的所有文件、子目錄的文件所屬人改成 liu:
chown -R liu /usr/meng
chgrp
chgrp命令
chgrp命令用來改變文件或目錄所屬的用戶組。該命令用來改變指定文件所屬的用戶組。其中,組名可以是用戶組的id,也可以是用戶組的組名。文件名可以 是由空格分開的要改變屬組的文件列表,也可以是由通配符描述的文件集合。如果用戶不是該文件的文件主或超級用戶(root),則不能改變該文件的組。
在UNIX系統家族裏,文件或目錄權限的掌控以擁有者及所屬羣組來管理。您可以使用chgrp指令去變更文件與目錄的所屬羣組,設置方式採用羣組名稱或羣組識別碼皆可。
語法
chgrp(選項)(參數)
選項
-c或——changes:效果類似“-v”參數,但僅回報更改的部分;
-f或--quiet或——silent:不顯示錯誤信息;
-h或--no-dereference:只對符號連接的文件作修改,而不是該其他任何相關文件;
-R或——recursive:遞歸處理,將指令目錄下的所有文件及子目錄一併處理;
-v或——verbose:顯示指令執行過程;
--reference=<參考文件或目錄>:把指定文件或目錄的所屬羣組全部設成和參考文件或目錄的所屬羣組相同;
參數
組:指定新工作名稱;
文件:指定要改變所屬組的文件列表。多個文件或者目錄之間使用空格隔開。
實例
將/usr/meng及其子目錄下的所有文件的用戶組改爲mengxin
chgrp -R mengxin /usr/meng
chmod
chmod命令用來變更文件或目錄的權限。在UNIX系統家族裏,文件或目錄權限的控制分別以讀取、寫入、執行3種一般權限來區分,另有3種特殊權限可供運用。用戶可以使用chmod指令去變更文件與目錄的權限,設置方式採用文字或數字代號皆可。符號連接的權限無法變更,如果用戶對符號連接修改權限,其改變會作用在被連接的原始文件。
權限範圍的表示法如下:
u User,即文件或目錄的擁有者;
g Group,即文件或目錄的所屬羣組;
o Other,除了文件或目錄擁有者或所屬羣組之外,其他用戶皆屬於這個範圍;
a All,即全部的用戶,包含擁有者,所屬羣組以及其他用戶;
s 特殊功能說明:變更文件或目錄的權限。
語法
chmod(選項)(參數)
選項
-c或——changes:效果類似“-v”參數,但僅回報更改的部分;
-f或--quiet或——silent:不顯示錯誤信息;
-R或——recursive:遞歸處理,將指令目錄下的所有文件及子目錄一併處理;
-v或——verbose:顯示指令執行過程;
--reference=<參考文件或目錄>:把指定文件或目錄的所屬羣組全部設成和參考文件或目錄的所屬羣組相同;
<權限範圍>+<權限設置>:開啓權限範圍的文件或目錄的該選項權限設置;
<權限範圍>-<權限設置>:關閉權限範圍的文件或目錄的該選項權限設置;
<權限範圍>=<權限設置>:指定權限範圍的文件或目錄的該選項權限設置;
參數
權限模式:指定文件的權限模式;
文件:要改變權限的文件。
知識擴展和實例
Linux用 戶分爲:擁有者、組羣(Group)、其他(other),Linux系統中,預設的情況下,系統中所有的帳號與一般身份使用者,以及root的相關信 息, 都是記錄在/etc/passwd文件中。每個人的密碼則是記錄在/etc/shadow文件下。 此外,所有的組羣名稱記錄在/etc/group內!
我們還拿/etc/passwd文件做來講解
[root@centos6 ~]# ll /etc/passwd -rw-r--r--. 1 root root 1619 Jan 19 10:39 /etc/passwd
這裏的第一個“-”代表這是個二進制普通文件其他的每三個是一個整體權限如:
rw-:代表的是所屬人的權限(rw:讀寫權限)
r--:代表的是所屬組的權限 (r--:只讀權限)
r--:代表的是其他人的權限 (r--:只讀權限)
示例:
[root@localhost app]#ll file1 -rw-r--r--. 1 root root 0 Jan 27 17:38 file1 [root@localhost app]#chmod u+x,g+w file1 //給文件所屬人加上執行權限,給文件所屬組加上寫權限 [root@localhost app]#ll file1 -rwxrw-r--. 1 root root 0 Jan 27 17:38 file1 [root@localhost app]#ll file1 -rwxrw-r--. 1 root root 0 Jan 27 17:38 file1 [root@localhost app]#chmod u=rwx,g=rwx,o=rw file1 //讓文件所屬人有全部權限,讓文件所屬組有全部權限,讓其他人對此文件有讀寫權限 [root@localhost app]#ll file1 -rwxrwxrw-. 1 root root 0 Jan 27 17:38 file1 [root@localhost app]#ll file1 -rwxrwxrw-. 1 root root 0 Jan 27 17:38 file1 [root@localhost app]#chmod 400 file1 //用數字方式修改文件權限,讓只有文件所屬人有讀取權限,所屬組和其他人對文件沒有權限 [root@localhost app]#ll file1 -r--------. 1 root root 0 Jan 27 17:38 file1 [root@localhost app]#ll file1 -r--------. 1 root root 0 Jan 27 17:38 file1 [root@localhost app]#chmod u+w file1 //給文件加上權限,這裏u+w表示給文件所屬人加上寫權限,同理g+w表示給所屬組叫上寫權限,o+w表示給其他人加上些權限 [root@localhost app]#ll file1 -rw-------. 1 root root 0 Jan 27 17:38 file1 [root@localhost app]#chmod a+w file1 //+w前面不跟參數時默認表示給所屬人權限位叫上寫權限,a+w表示給所有權限位都加上w權限 [root@localhost app]#ll file1 -rw--w--w-. 1 root root 0 Jan 27 17:38 file
三、新建文件和目錄默認權限
umask
用途
預設權限(權限掩碼)
我們知道, 當我們建立一個目錄或文件時,它都會帶一個默認的權限:
若使用者建立爲 '文件' 則預設 '沒有可執行 ( x ) 項目', 亦即只有 rw 這兩個項目, 用數字表示就是666或字母 –rw-rw-rw-
若使用者建立爲 '目錄', 則由於 x 與是否可以進入此目錄有關, 因此預設爲所有權限均開放, 亦即爲777 或字母d-rwx-rwx-rwx
umask就與這個默認權限有關. 那麼 umask 是在搞什麼呢? umask 就是指定 '目前用戶在建立檔案或目錄時候的權限默認值'.
用法
查看
我們可以這樣查看umask默認值
[root@localhost app]#umask -S //以字符形式顯示 u=rwx,g=rx,o=rx [root@localhost app]#umask -p //以數字形式顯示(這裏我們只看後三位) umask 0022
要注意的是,umask 的數字指的是該默認值需要減掉的權限。
因此,上面的022實際上是去掉了其他用戶的寫權限,對於文件來說也就是, 實際權限是644即:-rw-r--r-
對於目錄來說, 實際是755, 即:-rwxr-xr-x
2.設置
我們可以這樣對umask值修改
[root@localhost app]#touch file1 [root@localhost app]#ll file1 -rw-r--r--. 1 root root 0 Jan 27 17:38 file1 [root@localhost app]#umask -p umask 0022 [root@localhost app]#umask 002 //umask後跟數字可修改 [root@localhost app]#umask -p umask 0002 [root@localhost app]#touch file2 [root@localhost app]#ll file2 -rw-rw-r--. 1 root root 0 Jan 27 19:16 file2
umask後面接3個數字就可以設定了.我們可以看到本來創建的文件是默認rw-r--r--權限,但修改完umask值後默認權限就變爲rw-rw-r--
但這種修改umask值的方式只是臨時修改,若要長期修改umask的值, 可以把它寫進/etc/profile或~/.profile或~/.bash_profile中.
下面我們看幾道實例題
1、當用戶xiaoming對/testdir 目錄無執行權限時,意味着無法做哪些操作?
xiaoming對/testdir 目錄無執行權限就是對目錄/testdir沒有x權限,也就意味着xiaoming無法進入/testdir目錄
2、當用戶xiaoqiang對/testdir 目錄無讀權限時,意味着無法做哪些操作?
xiaoqing對/testdir 目錄無讀權限就是對目錄/testdir沒有r權限,也就意味着xiaoqing無法對/testdir目錄下的文件進行列出查看
3、當用戶wangcai 對/testdir 目錄無寫權限時,該目錄下的只讀文件file1是否可修改和刪除?
wangcai對/testdir 目錄無寫權限就是對目錄/testdir沒有w權限,也就意味着wangcai無法對/testdir目錄下的文件進行修改和刪除
4、當用戶wangcai 對/testdir 目錄有寫和執行權限時,該目錄下的只讀文件file1是否可修改和刪除?
wangcai對/testdir 目錄有寫和執行權限就是對目錄/testdir僅有wx權限,也就意味着wangcai可以進入/testdir目錄,也可以對目錄下的文件進行修改和刪除,但這是建立在它對文件本身有w權限,而題目中wangcai對file1文件只有只讀權限,所以它無法對file1進行修改和刪除。
5、複製/etc/fstab文件到/var/tmp下,設置文件所有者爲wangcai讀寫權限,所屬組爲sysadmins組有讀寫權限,其他人無權限
[root@localhost ~]#cp /etc/fstab /var/tmp/ [root@localhost ~]#ll /var/tmp/fstab -rw-r--r--. 1 root root 541 Jan 27 22:46 /var/tmp/fstab [root@localhost ~]#chown wangcai.sysadmins /var/tmp/fstab [root@localhost ~]#ll /var/tmp/fstab -rw-r--r--. 1 wangcai sysadmins 541 Jan 27 22:46 /var/tmp/fstab
6、誤刪除了用戶wangcai的家目錄,請重建並恢復該用戶家目錄及相應的權限屬性
[root@localhost home]#ls alice basher nologin test tom xiaoming bash lilei sh testbash wangcai [root@localhost home]# [root@localhost home]#rm -rf wangcai/ //刪除wangcai家目錄 [root@localhost home]#ls alice basher nologin test tom bash lilei sh testbash xiaoming [root@localhost home]#mkdir wangcai //創建一個叫wangcai的目錄 [root@localhost home]#ll drwx------. 3 testbash testbash 78 Jan 20 04:18 testbash drwx------. 5 tom tom 128 Jan 26 05:30 tom drwxr-xr-x. 2 root root 6 Jan 27 23:13 wangcai //但這個時候我們發現雖然這個目錄名字叫wangcai,但它的所屬人所屬組還都是root,權限也和其他用戶家目錄不一樣 drwx------. 5 xiaoming xiaoming 128 Jan 24 01:24 xiaoming [root@localhost home]#chown wangcai.wangcai wangcai/ [root@localhost home]#chmod 700 wangcai/ [root@localhost home]#ll drwx------. 3 testbash testbash 78 Jan 20 04:18 testbash drwx------. 5 tom tom 128 Jan 26 05:30 tom drwx------. 2 wangcai wangcai 6 Jan 27 23:13 wangcai //這個時候並沒有完,雖然所屬人所屬組和權限改過來了,但我們仔細看這個目錄的大小和其他用戶家目錄不一樣 drwx------. 5 xiaoming xiaoming 128 Jan 24 01:24 xiaoming [root@localhost home]#cp -r /etc/skel/.[^.]* wangcai/ //每個用戶下面都有些配置文件這些是每個用戶的一些個性化配置文件,一般都是.開頭,/etc/skel/目錄下就是模板文件,我們只需把它拷過來就行了 [root@localhost home]#ll drwx------. 3 testbash testbash 78 Jan 20 04:18 testbash drwx------. 5 tom tom 128 Jan 26 05:30 tom drwx------. 3 wangcai wangcai 78 Jan 27 23:17 wangcai drwx------. 5 xiaoming xiaoming 128 Jan 24 01:24 xiaoming
四、特殊權限
suid
suid:set uid 權限,任何一個用戶運行一個帶此權限的命令時,不是以此用戶的身份啓動,而是以文件自身的屬主訪問。
基本上SUID有這樣的限制與功能:
SUID 權限僅對二進位程序(binary program)有效, 不能用在shell script上面;
運行者對於該程序需要具有 x 的可運行權限;
本權限僅在運行該程序的過程中有效 (run-time);
運行者將具有該程序擁有者 (owner) 的權限。
用法
chmod u+s file
這個時候文件權限就變爲4xxx
我來給大家操作演示一下
[root@localhost bin]#cp /usr/bin/rm /app/rm1 //首先,我們複製rm文件到/app取名叫rm1 [root@localhost bin]#cd /app/ [root@localhost app]#touch file1 //然後,用root身份創建一個文件file1 [root@localhost app]#ll total 64 -rw-r--r--. 1 root root 0 Jan 28 00:22 file1 -rwxr-xr-x. 1 root root 62864 Jan 28 00:20 rm1 //這個時候我們看rm1現在並沒有s權限 drwxr-xr-x. 2 root root 6 Jan 27 19:11 test1 [xiaoming@localhost app]$ ./rm1 file1 //我們切換到xiaoming用戶執行rm1去刪除file1 ./rm1: remove write-protected regular empty file ‘file1’? y ./rm1: cannot remove ‘file1’: Permission denied [xiaoming@localhost app]$ ls //我們發現並沒有成功file1文件依舊存在,因爲file1屬於root用戶,其他人只有r權限不能執行刪除操作 file1 rm1 test1 [root@localhost app]#chmod u+s rm1 //我們切回root身份,給rm1所屬人權限上加一個s權限 [root@localhost app]#ll total 64 -rw-r--r--. 1 root root 0 Jan 28 00:22 file1 -rwsr-xr-x. 1 root root 62864 Jan 28 00:20 rm1 //這個時候rm1文件所屬人權限哪裏就多了一個s權限 drwxr-xr-x. 2 root root 6 Jan 27 19:11 test1 [xiaoming@localhost app]$ ./rm1 file1 //我們換回xiaoming身份再去用rm1去刪除file1 [xiaoming@localhost app]$ ls rm1 test1 //file1文件沒有了,被刪除了。這是因爲xiaoming執行rm1文件時臨時擁有了rm1所屬人身份,也就是root身份
取消權限是chmod u-s file
sgid
當對一個可執行的二進制文件作用了sgid權限之後,任何人在執行該文件時臨時擁有其所屬組的權限。這個和suid用法差不多,只不過是其他用戶在執行這個文件時臨時擁有問價所屬組的身份
用法是
chmod g+s
這裏我們着重說下對目錄執行會怎樣
對於一個目錄作用了sgid權限之後,任何人在該目錄下創建的文件的所屬組與該目錄的所屬組相同。
同樣我也給大家演示下效果
[root@localhost app]#ll total 0 drwxr-xr-x. 2 root root 6 Jan 27 19:11 test1 //首先,我們用root身份創一個目錄test1 [root@localhost app]#chmod a+w test1/ //爲了能讓普通用戶在目錄下創建文件,我們給它加上w權限 [root@localhost app]#ll total 0 drwxrwxrwx. 2 root root 6 Jan 27 19:11 test1 [xiaoming@localhost app]$ cd test1/ [xiaoming@localhost test1]$ touch file1 //我們切換到普通用戶上在test1裏創建文件file1 [xiaoming@localhost test1]$ ll total 0 -rw-rw-r--. 1 xiaoming xiaoming 0 Jan 28 00:57 file1 //file1的所屬人所屬組依舊屬於用戶本身 [root@localhost app]#chmod g+s test1/ //我們切回root身份給test1目錄組權限那裏加上s權限 [root@localhost app]#ll total 0 drwxrwsrwx. 2 root root 19 Jan 28 00:57 test1 [xiaoming@localhost test1]$ touch file2 //我們再換回普通用戶身份創建一個file2 [xiaoming@localhost test1]$ ll total 0 -rw-rw-r--. 1 xiaoming xiaoming 0 Jan 28 00:57 file1 -rw-rw-r--. 1 xiaoming root 0 Jan 28 01:00 file2 //我們發現file2 的所屬組那裏變爲了root
suid其實也能加到目錄上,但這樣其他用戶創建的文件就不再屬於創建者本身,所以我們一般都在目錄上加sgid 權限
同理取消sgid權限也是chmod g-s dir
Sticky
當對於一個目錄作用了sticky權限之後,該目錄下的文件僅其文件的所屬人,或目錄的所屬人及root才能刪除。
我們通常在目錄上設置sticky,在文件上設置沒有意義
用法是chmod o+t dir
效果如下
[xiaoming@localhost test1]$ ll total 0 -rw-rw-r--. 1 xiaoming xiaoming 0 Jan 28 00:57 file1 //我們還在test1下做實驗 -rw-rw-r--. 1 xiaoming root 0 Jan 28 01:00 file2 [xiaoming@localhost test1]$ chmod a+w file1 //我們給file1全部加上w權限 [xiaoming@localhost test1]$ ll total 0 -rw-rw-rw-. 1 xiaoming xiaoming 0 Jan 28 00:57 file1 -rw-rw-r--. 1 xiaoming root 0 Jan 28 01:00 file2 [xiaoming@localhost test1]$ su tom Password: [tom@localhost test1]$ rm -f file1 //我們切換到tom用戶刪除file1 [tom@localhost test1]$ ll total 0 -rw-rw-r--. 1 xiaoming root 0 Jan 28 01:00 file2 //刪除成功 [root@localhost app]#chmod o+t test1/ //我們切回root身份給test1目錄加上sticky權限 [tom@localhost test1]$ touch file3 //用tom身份創一個文件test3 [tom@localhost test1]$ ll total 0 -rw-rw-r--. 1 xiaoming root 0 Jan 28 01:00 file2 -rw-rw-r--. 1 tom root 0 Jan 28 01:21 file3 [tom@localhost test1]$ chmod a+w file3 //同樣給它加上w權限 [tom@localhost test1]$ ll total 0 -rw-rw-r--. 1 xiaoming root 0 Jan 28 01:00 file2 -rw-rw-rw-. 1 tom root 0 Jan 28 01:21 file3 [tom@localhost test1]$ su xiaoming //我們再切回xiaoming身份去刪除file3 Password: [xiaoming@localhost test1]$ rm -f file3 rm: cannot remove ‘file3’: Operation not permitted //刪除失敗
這些命令都是在文件x權限位添加的,權限位原本有x的,加上特殊權限後,顯示爲小寫,原本無x,顯示爲大寫。
有鎖定目錄的就有鎖定文件的,爲了防止因爲誤操作將重要文件刪除,文件使用chattr +a 後任何用戶都不能刪除(包括root)
文件特定權限:
chattr
用法
chattr +a 不能刪除,不能改名,不能修改,可以追加 chattr -a 解除限制
chattr +i 不能刪除,不能改名,不能修改,不能追加 chattr -i 解除限制
lsattr 查看權限
示例
[root@localhost test1]#ll total 0 -rw-rw-r--. 1 xiaoming root 0 Jan 28 01:00 file2 -rw-rw-rw-. 1 tom root 0 Jan 28 01:21 file3 [root@localhost test1]#chattr +a file2 //給file2加上a權限 [root@localhost test1]#lsattr file2 -----a---------- file2 [root@localhost test1]#rm -f file2 rm: cannot remove ‘file2’: Operation not permitted [root@localhost test1]#mv file2 file4 mv: cannot move ‘file2’ to ‘file4’: Operation not permitted //使用root身份也不能刪除改名 [root@localhost test1]#echo hello >> file2 //可以追加信息 [root@localhost test1]#cat file2 hello [root@localhost test1]#vim file2 "file2" E212: Can't open file for writing //無法編輯 [root@localhost test1]#chattr +i file2 //加上i權限 [root@localhost test1]#lsattr file2 ----ia---------- file2 [root@localhost test1]#echo hello >> file2 -bash: file2: Permission denied //無法追加信息 [root@localhost test1]#rm -f file2 rm: cannot remove ‘file2’: Operation not permitted [root@localhost test1]#mv file2 file4 mv: cannot move ‘file2’ to ‘file4’: Operation not permitted //無法刪除,改名,修改內容 [root@localhost test1]#chattr -i file2 //減去i權限 [root@localhost test1]#lsattr file2 -----a---------- file2 [root@localhost test1]#rm -f file2 rm: cannot remove ‘file2’: Operation not permitted //因爲還有a權限,所以不能刪除 [root@localhost test1]#chattr -a file2 //減去a權限 [root@localhost test1]#lsattr file2 ---------------- file2 [root@localhost test1]#rm -f file2 //可以刪除 [root@localhost test1]#ll total 0 -rw-rw-rw-. 1 tom root 0 Jan 28 01:21 file3