權限管理:
概論:
上節,為大家介紹了用戶,和組的知識.今天為大家介紹與用戶,組息息相關的知識,權限.linux是多用戶,多任務的操作系統,面對多人的操作,安全問題就很重要,權限機制就很好的對安全進行防護,避免他人操作自己的文件.下面給大家詳細介紹權限.
首先讓我們先直觀地看下權限,對權限有個最基本的認識.以/etc/issue文件進行示例.
[root@wen-7 themes]# ll /etc/issue #ls -l,命令 以長選項的格式查看文件 -rw-r--r-- 1 root root 41 7月 27 17:10 /etc/issue
顯示信息前面有rwxrwxrwx形式的內容,這就是權限的最直接的表達方式,那每個字符分別有什么含義呢
權限標識:
rwxrwxrwx:
左三位:定義user(owner)的權限(屬主)
中三位;dingyi group的權限(屬組)
右三位:定義other的權限(普通用戶)
r:read 讀
w:write 寫
x:excute 執行
權限實際功能:(權限面對的對象不同,具體的功能不同)
對文件而言:
r:可獲取文件的數據
w:可修改文件的數據 (不可刪除文件)
x:可將此文件運行為進程(針對二進制程序或腳本)
X:不會增加X(前提本身無X權限)
對目錄而言:
r:可使用ls命令獲取其下的所有的文件列表
w:可修改此目錄下的文件列表:即創建或刪除文件 不看文件權限
x:可cd至此目錄中,且可使用ls -l來獲取所有文件的詳細屬性信息
X:不會增加X(前提本身無X權限
進程安全上下文(工作機制):
進場對文件的訪問權限應用模型
進程的屬主與文件的屬主是否相同:如果相同,則應用屬主權限;
否則,則檢查進場的屬主是否屬于文件的屬組;如果是,則應用屬組權限
否則,就只能應用other的權限
按順序匹配,匹配成功,不在進行下面的匹配
權限組合機制:
符號 | 二進制 | 八進制 |
– – – | 0 | 0 |
– – x | 001 | 1 |
– w – | 010 | 2 |
– w x | 011 | 3 |
r – – | 100 | 4 |
r – x | 101 | 5 |
r w – | 110 | 6 |
r w x | 111 | 7 |
練習: 對應說出下面權限位的八進制表示方法
rw-rw-r-- rwxrwxr-- rwxr-x--- rw-------- rwxr-xr-x 750 600 755 600 755
權限管理命令:
chmod: 改變文件的訪問權限
命令格式:
chmod [options] ..mode[,mode] file…
chmod [options] [–reference=rfile]
chmod [options] OCTAL-MODE FILE….
命令對象:
三類用戶:
u:屬主
g:屬組
o:其他
a:所有
選項:
[-R]:遞歸修改,修改目錄權限,目錄下的所有文件的權限跟目錄權限一樣 默認是只修改目錄本身 除授權表示法外,其他表示法不建議使用 注意:僅管理員可修改文件的屬主和屬組 用戶僅能修改屬主為自己的那些文件的權限 ;
[root@wen-7 tmp]# chmod -R go= skel/ [root@wen-7 tmp]# ll -d skel drwx------ 3 root root 87 7月 30 11:08 skel/ [root@wen-7 tmp]# ll -a skel/ 總用量 24 drwx------ 3 root root 87 7月 30 11:08 .drwxrwxrwt. 19 root root 4096 7月 30 11:10 ..-rw------- 1 root root 18 7月 30 11:08 .bash_logout-rw------- 1 root root 193 7月 30 11:08 .bash_profile-rw------- 1 root root 231 7月 30 11:08 .bashrcdrwx------ 4 root root 37 7月 30 11:08 .mozilla-rw------- 1 root root 658 7月 30 11:08 .zshrc [root@wen-7 tmp]# chmod -R g+r skel/ [root@wen-7 tmp]# ll -d skel/ drwxr----- 3 root root 87 7月 30 11:08 skel/ [root@wen-7 tmp]# ll -a skel/ 總用量 24 drwxr----- 3 root root 87 7月 30 11:08 .drwxrwxrwt. 19 root root 4096 7月 30 11:11 ..-rw-r----- 1 root root 18 7月 30 11:08 .bash_logout-rw-r----- 1 root root 193 7月 30 11:08 bash_profile-rw-r----- 1 root root 231 7月 30 11:08 .bashrcdrwxr----- 4 root root 37 7月 30 11:08 .mozilla-rw-r----- 1 root root 658 7月 30 11:08 .zshrc
使用方法:
(1)chmod [options] ..mode[,mode] file…
MODE表示法:
賦權表示法:直接操作一類用戶的所有權限位rwx:
u= g= o= a= 不同用戶之間用逗號分隔
[root@wen-7 shlianxi]# chmod u=r,g=r,o=r 1.sh [root@wen-7 shlianxi]# chmod ugo=rwx 1.sh [root@wen-7 shlianxi]# chmod u=rwx 1.sh [root@wen-7 shlianxi]# ll 1.sh -rwxrwxrwx 1 root root 211 7月 30 09:56 1.sh
授權表示法:直接操作一類用戶的所有權限位rwx:
u+,u- 不同用戶之間用逗號分隔
g+,g
o+,o-
a+,a-
[root@wen-7 shlianxi]# chmod u+x,g+w,o+w 1.sh [root@wen-7 shlianxi]# chmod ugo-x 1.sh [root@wen-7 shlianxi]# chmod u+x 1.sh [root@wen-7 shlianxi]# ll 1.sh -rwxrw-rw- 1 root root 211 7月 30 09:56 1.sh
(2) chmod [options] OCTAL-MODE FILE….
使用八進制權限表示方式
[root@wen-7 shlianxi]# chmod 660 1.sh [root@wen-7 shlianxi]# ll 1.sh -rw-rw---- 1 root root 211 7月 30 09:56 1.sh
必須三位數字全寫,三位不全,默認從左邊為空
[root@wen-7 shlianxi]# chmod 66 1.sh [root@wen-7 shlianxi]# ll 1.sh ----rw-rw- 1 root root 211 7月 30 09:56 1.sh [root@wen-7 shlianxi]# chmod 6 1.sh [root@wen-7 shlianxi]# ll 1.sh -------rw- 1 root root 211 7月 30 09:56 1.sh
(3) chmod [options] [–reference=rfile]
引用其他文件的權限賦權到指定文件
[root@wen-7 shlianxi]# chmod --reference=/etc/passwd 1.sh [root@wen-7 shlianxi]# ll 1.sh -rw-r--r-- 1 root root 211 7月 30 09:56 1.sh root@wen-7 shlianxi]# ll /etc/passwd -rw-r--r-- 1 root root 3406 7月 29 21:20 /etc/passwd [root@wen-7 shlianxi]# chmod --reference=./6.sh 1.sh [root@wen-7 shlianxi]# ll 1.sh -rw-r--r-- 1 root root 211 7月 30 09:56 1.sh [root@wen-7 shlianxi]# ll 6.sh -rw-r--r-- 1 root root 176 7月 30 08:56 6.sh
從屬關系管理命令:
chown: – 修改文件所有者和組別(僅管理員用戶使用)
命令格式:
chown [options] user [:group] file…
chown [options] –reference=rfile file…
選項: [-R] 遞歸修改
使用方式:
指定屬主: chown username file…
指定屬組: chown :groupname file…
指定屬主加屬組: chown username: groupname file…
[root@wen-7 tmp]# useradd docker [root@wen-7 tmp]# chown -R docker skel/ #遞歸指定屬主為docker [root@wen-7 tmp]# ll -d skel/ drwxr----- 3 docker root 87 7月 30 11:08 skel/ [root@wen-7 tmp]# ll -a skel/ 總用量 24 drwxr----- 3 docker root 87 7月 30 11:08 . .drwxrwxrwt. 19 root root 4096 7月 30 11:14 .. -rw-r----- 1 docker root 18 7月 30 11:08 .bash_logou -rw-r----- 1 docker root 193 7月 30 11:08 .bash_profile -rw-r----- 1 docker root 231 7月 30 11:08 .bashrcdrwxr ----- 4 docker root 37 7月 30 11:08 .mozilla -rw-r----- 1 docker root 658 7月 30 11:08 .zshrc [root@wen-7 tmp]# chown -R wen:gentoo skel/ #指定屬主為wen 屬組為gentoo [root@wen-7 tmp]# ll -d skel/ drwxr----- 3 wen gentoo 87 7月 30 11:08 skel/ [root@wen-7 tmp]# ll -a skel/ 總用量 24 drwxr----- 3 wen gentoo 87 7月 30 11:08 .drwxrwxrwt. 19 root root 4096 7月 30 11:15 .. -rw-r----- 1 wen gentoo 18 7月 30 11:08 .bash_logout -rw-r----- 1 wen gentoo 193 7月 30 11:08 .bash_profile -rw-r----- 1 wen gentoo 231 7月 30 11:08 .bashrc drwxr----- 4 wen gentoo 37 7月 30 11:08 .mozilla -rw-r----- 1 wen gentoo 658 7月 30 11:08 .zshrc
參考其他文件的權限修改指定文件或目錄
[root@wen-7 tmp]# chown --reference=/etc/passwd /tmp/skel/ [root@wen-7 tmp]# ll -d skel/ drwxr----- 3 root root 87 7月 30 11:08 skel/ [root@wen-7 tmp]# ll -a skel/ 總用量 24 drwxr----- 3 root root 87 7月 30 11:08 . drwxrwxrwt. 19 root root 4096 7月 30 11:17 .. -rw-r----- 1 wen gentoo 18 7月 30 11:08 .bash_logout -rw-r----- 1 wen gentoo 193 7月 30 11:08 .bash_profile -rw-r----- 1 wen gentoo 231 7月 30 11:08 .bashrc rwxr----- 4 wen gentoo 37 7月 30 11:08 .mozilla -rw-r----- 1 wen gentoo 658 7月 30 11:08 .zshrc [root@wen-7 tmp]# chown -R --reference=/etc/passwd /tmp/skel/ [root@wen-7 tmp]# ll -a skel/ 總用量 24 drwxr----- 3 root root 87 7月 30 11:08 . drwxrwxrwt. 19 root root 4096 7月 30 11:17 .. -rw-r----- 1 root root 18 7月 30 11:08 .bash_logout -rw-r----- 1 root root 193 7月 30 11:08 .bash_profile -rw-r----- 1 root root 231 7月 30 11:08 .bashrc drwxr----- 4 root root 37 7月 30 11:08 .mozilla -rw-r----- 1 root root 658 7月 30 11:08 .zshrc
chgrp: 改變文件的組所有權 (僅管理員用戶使用)
命令格式:
chgrp [options] user [:group] file…
chgrp [options] –reference=rfile file…
選項:
-R :遞歸使用
[root@wen-7 ~]# chgrp gentoo file1 [root@wen-7 ~]# ll file1 -rw-r--r-- 1 root gentoo 37 8月 1 10:47 file1
思考:用戶對目錄有寫權限,但對目錄下的文件沒有寫權限,能否修改此文件內容?能否刪除此文件?
[root@wen-7 tmp]# mkdir mytest
[root@wen-7 tmp]# cp /etc/fstab mytest/
[root@wen-7 tmp]# ll mytest/
總用量 4
-rw-r--r-- 1 root root 465 7月 30 11:28 fstab
[root@wen-7 tmp]# ll -d mytest/
drwxr-xr-x 2 root root 18 7月 30 11:28 mytest/
[root@wen-7 tmp]# chgrp gentoo mytest/
[root@wen-7 tmp]# ll -d mytest/
drwxr-xr-x 2 root gentoo 18 7月 30 11:28 mytest/
[root@wen-7 tmp]# chmod g+w mytest/
[root@wen-7 tmp]# ll -d mytest/
drwxrwxr-x 2 root gentoo 18 7月 30 11:28 mytest/
[root@wen-7 mytest]# su - gentoo
[gentoo@wen-7 ~]$ cd /tmp/mytest/
[gentoo@wen-7 mytest]$ ll
總用量 4
-rw-r--r-- 1 root root 16 7月 30 11:31 fstab
[gentoo@wen-7 mytest]$ echo sefsdf >> fstab
-bash: fstab: 權限不夠
[gentoo@wen-7 mytest]$ rm fstab
rm:是否刪除有寫保護的普通文件 "fstab"?y
[gentoo@wen-7 mytest]$ ls[gentoo@wen-7 mytest]$
練習:
1.當用戶wangcai對/testdir目錄無寫權限時,該目錄的只讀文件file1是否可修改和刪除
[root@wen-7 testdir]# chmod 754 /testdir/ [root@wen-7 testdir]# ll -d /testdir/ drwxr-xr-- 2 root root 15 8月 3 20:27 /testdir/ [root@wen-7 testdir]# su - wangcai -c "echo "fsdf" >> /testdir/file1" -bash: /testdir/file1: 權限不夠 [root@wen-7 testdir]# su - wangcai -c "rm /testdir/file1" rm: 無法刪除"/testdir/file1": 權限不夠 [root@wen-7 testdir]#
2.當用戶wangcai對/testdir目錄有寫權限時,該目錄的只讀文件file1是否可修改和刪除
[root@wen-7 testdir]# ll -d /testdir/ drwxrw-rwx 2 root root 15 8月 3 20:27 /testdir/ [root@wen-7 testdir]# su - wangcai -c "echo "fsdf" >> /testdir/file1" -bash: /testdir/file1: 權限不夠 [root@wen-7 testdir]# su - wangcai -c "rm /testdir/file1" rm:是否刪除有寫保護的普通文件 "/testdir/file1"?y [root@wen-7 testdir]# ll 總用量 0 -rw-rw-r--+ 1 root root 0 8月 3 16:58 f1
3.復制/etc/fstab 到/var/tmp/,設置文件屬主為wangcai讀寫權限,設置屬組為sysadmins讀寫權限,其他人無權限
[root@wen-7 .mozilla]# cp /etc/fstab /var/tmp/ [root@wen-7 tmp]# chown wangcai:sysadmins fstab [root@wen-7 tmp]# chmod 660 fstab [root@wen-7 tmp]# ll 總用量 4 drwxr-xr-x. 2 abrt abrt 6 7月 19 19:32 abrt -rw-rw---- 1 wangcai sysadmins 465 8月 3 14:57 fstab
4.誤刪用戶的家目錄,恢復家目錄,并權限一樣
[root@wen-7 ~]# useradd wangca [root@wen-7 ~]# ll /home/wangcai/ 總用量 0 [root@wen-7 ~]# ll -d /home/wangcai/ drwx------ 3 wangcai wangcai 87 8月 3 14:09 /home/wangcai/ [root@wen-7 ~]# rm -rf /home/wangcai/ [root@wen-7 ~]# cp -r /etc/skel/. /home/wangcai [root@wen-7 ~]# ll -d /home/wangcai/ drwxr-xr-x 3 root root 87 8月 3 14:10 /home/wangcai/ [root@wen-7 ~]# chmod 700 /home/wangcai/ [root@wen-7 ~]# chown wangcai:wangcai /home/wangcai/ [root@wen-7 ~]# ll -d /home/wangcai/ drwx------ 3 wangcai wangcai 87 8月 3 14:10 /home/wangcai/
umake:文件的權限反向掩碼;遮罩碼; 管理文件創建時的默認權限
本質:從目錄或文件上屏蔽掉最大權限相應的位,從而得出默認的權限
計算公式:
文件:
666-umake=默認權限 (三位每位奇數加1,偶數保留)
注意:之所以文件用666去減,表示文件默認不能擁有執行權限,如果減得的結果中有執行權限,則需要加1
目錄:
777-umake=默認權限
umask命令:
使用方式:
(1)umask 022 用八進制權限數 指定當期用戶的umake值
(2)umask u=rw,g=rw,o=r 用賦權表示法 指定當期用戶的umake值
(3)umake -S 顯示新建文件夾的默認權限
(4)imask -p 打印系統當前umask值,可方便輸出重定向至配置文件
(5) umask:查看當前umask值
[root@wen-7 testdir]# umask 0022 [root@wen-7 testdir]# umask -S u=rwx,g=rx,o=rx [root@wen-7 testdir]# umask 022 [root@wen-7 testdir]# umask 0022 [root@wen-7 testdir]# umask u=rw,g=rw,o=r [root@wen-7 testdir]# umask 0113 [root@wen-7 testdir]# touch qwe.sh [root@wen-7 testdir]# ll 總用量 0 -rw-rw-r--+ 1 root root 0 8月 3 16:58 f1 -rw-rw-r-- 1 root root 0 8月 3 20:39 qwe.sh
umask 命令設置 僅對當前用戶進程有效
永久生效: 局部修改用戶自己bash的配置文件,.bahsrc #umask 002|022 ,謹慎修改全部bash配置文件
root的umask值是022. root創建的文件權限越小,對用戶的限制越大
[wen@wen-7 ~]$ umask0002 [wen@wen-7 ~]$ umask 027 [wen@wen-7 ~]$ touch fil1 [wen@wen-7 ~]$ ll fil1-rw-r----- 1 wen wen 0 7月 30 11:42 fil1 [wen@wen-7 ~]$ mkdir file [wen@wen-7 ~]$ ll file 總用量 0 [wen@wen-7 ~]$ ll -d filed rwxr-x--- 2 wen wen 6 7月 30 11:42 file
install命令:復制文件并設置屬性
命令格式:
單源復制:
install [options] -t
多源復制:
install [options] [-s] [–strip] source dest
install [options] [-s] [–strip] source… directory
創建目錄:
install [options] [-d] directory…
選項:
-m: 設定目標文件權限,默認為755
-o:設定目標文件屬主
-g:設定目標文件屬組
[root@wen-7 ~]# install -o gentoo -g gentoo -m 640 /etc/inittab /tmp/init [root@wen-7 ~]# ll /tmp/init -rw-r----- 1 gentoo gentoo 511 7月 30 12:30 /tmp/init
-d:創建目錄
[root@wen-7 ~]# install -d qwe [root@wen-7 ~]# ls ad passwd.bak qwe shell shlianxi
mktemp命令: 創建臨時文件或目錄
命令格式:
mktemp [options] template
root@wen-7 ~]# mktemp /tmp/mysq.XXXXX/ tmp/mysq.iQZDU [root@wen-7 ~]# mktemp /tmp/mysq.XXXXX /tmp/mysq.eXRRU [root@wen-7 ~]# mktemp /tmp/mysq.XXXXX /tmp/mysq.kZtAV [root@wen-7 ~]# mktemp /tmp/mysq.XXXXXXXXXXX /tmp/mysq.6zqQ5nLxlRR [root@wen-7 ~]# mktemp /tmp/mysq.XXXXXXXXXXX /tmp/mysq.ROygQ5RFLOa [root@wen-7 ~]# mktemp /tmp/mysq.XXXXXXXXXXX /tmp/mysq.8ST1lOItKUy [root@wen-7 ~]# myfile=$(mktemp /tmp/ds.XXXXXX) [root@wen-7 ~]# echo $myfile /tmp/ds.8qKqpU
選項:
-d:創建目錄
-u:測試,但不創建文件
[root@wen-7 ~]# mktemp -d /tmp/mysq.XXXXX /tmp/mysq.8aKkM [root@wen-7 ~]# ls /tmp/ ds.8qKqpU mysq.6zqQ5nLxlRR mysq.8ST1lOItKUy mysq.iQZDU mysq.ROygQ5RFLOa /tmp/mysq.8aKkM/ [root@wen-7 ~]# mktemp -u /tmp/mysq.XXXXX/ tmp/mysq.3fgo1 [root@wen-7 ~]# ls /tmp/ds.8qKqpU mysq.6zqQ5nLxlRR mysq.8ST1lOItKUy mysq.iQZDU mysq.ROygQ5RFLOa mytestinit
注意,mktemp會將創建的臨時文件名直接返回,因此,可直接通過命令引用保存起來.
特殊權限: SUID,SGID,STICKY
在系統中,上面提到的三個權限,我們稱之為普通權限.在普通權限外,還有一些特殊的權限,提供各樣的功能,下面進行詳解.
先看下特殊權限與普通先的對比
[root@wen-7 ~]# ls -l /bin/passwd #特殊權限 rwsr-xr-x. 1 root root 27832 6月 10 2014 /bin/passwd [root@wen-7 ~]# ll -d /tmp #普通權限 rwxrwxrwt. 12 root root 4096 7月 30 12:45 /tmp
在這里我們有提到了安全上下文,可見這是特別重要的.必須了解權限的運行機制.
安全上下文:
1.進程以某用戶的身份運行,進程是發起此進程用戶的代理,因此以此用戶的身份和權限完成所有操作
2.權限匹配模型:
(1)判斷進程的屬主,是否為被訪問的屬主,如果是,則應用屬主的權限,否則進去第2步.
(2)判斷進程的屬主,是否屬于被訪問的文件屬組;如果是,則應用屬性的權限;否則進去第3步
(3)應用other的權限
第一種特殊權限: SUID
系統默認情況下,用戶發起的進程,進程的屬主是其發起者,因此,進程是以其發起者的身份在運行
[wen@wen-7 ~]$ whoami wen [wen@wen-7 ~]$ cat /etc/issue #\S #Kernel \r on an \m #$hostname #date [wen@wen-7 ~]$ ps aux | grep cat wen 12757 0.0 0.0 112660 960 pts/1 R+ 20:52 0:00 grep --color=auto cat #cat 進程是wen 這個用戶在運行
SUID 功用: 用戶運行某程序時,如果此程序擁有SUID權限,那些二進制程序運行為進程時,其屬主不是發起者,而是程序文件自己的屬主(讓普通用戶運行部分root權限)
管理SUID權限:
chmod u+|u-s FIle..
展示位置:屬主的執行權限位,如果屬主原本有執行權限,顯示為小寫s;否則,顯示為大寫S
[root@wen-7 ~]# cp /usr/bin/cat /tmp [root@wen-7 ~]# ll /tmp/cat -rwxr-xr-x 1 root root 54048 8月 3 21:37 /tmp/cat [root@wen-7 ~]# chmod u+s /tmp/cat [root@wen-7 ~]# su - wen 上一次登錄:三 8月 3 20:57:07 CST 2016pts/1 上 [wen@wen-7 ~]$ /tmp/cat /etc/shadow root:$6$aetYyxyt$7KPPYdtBGaFY2yRne/aL8ECDEl9zLNW7jQsp3p1MAlHhZH7o1fI.ah1R2EcnzgZNXpgVylXR8joNLQZ0Qtha/.:17009:0:99999:7::: bin:*:16659:0:99999:7:::
第二種權限:SGID:
展示位置:屬組的執行權限位,如果屬組原本有執行權限,顯示為小寫s;否則,顯示為大寫S
功用:當某目錄屬組有寫權限,且有SGID權限時,那么所有屬于此目錄的屬組的用戶,且以屬組身份再此目錄中新建文件或目錄時,新文件的屬組不是用戶的基本組,而是此目錄是屬組;
通常用于創建一個寫作目錄
管理文件的SGID權限:
chmod g+|-s FILE…
[root@wen-7 testdir]# ll -d /testdir/ drwxr-xr-- 2 root root 28 8月 3 20:39 /testdir/ [root@wen-7 testdir]# chgrp sysadmins /testdir/ [root@wen-7 testdir]# chmod 774 /testdir/ [root@wen-7 testdir]# ll -d /testdir/ drwxrwxr-- 2 root sysadmins 28 8月 3 20:39 /testdir/ [root@wen-7 testdir]# gpasswd -a wangcai sysadmins 正在將用戶“wangcai”加入到“sysadmins”組中 [root@wen-7 testdir]# gpasswd -a wen sysadmins 正在將用戶“wen”加入到“sysadmins”組中 [root@wen-7 testdir]# groupmems -l -g sysadmins wangcai wen wangcai@wen-7 testdir]$ touch wang.sh [wangcai@wen-7 testdir]$ ll -rw-rw-r-- 1 wangcai wangcai 0 8月 3 21:45 wang.sh [wangcai@wen-7 testdir]$ su - wen [wen@wen-7 ~]$ cd /testdir/ [wen@wen-7 testdir]$ touch wen.sh [wen@wen-7 testdir]$ ll -rw-rw-r-- 1 wangcai wangcai 0 8月 3 21:45 wang.sh -rw-rw-r-- 1 wen wen 0 8月 3 21:46 wen.sh [root@wen-7 testdir]# !chm chmod g+s /testdir/ [root@wen-7 testdir]# ll -d /testdir/ drwxrwsr-- 2 root sysadmins 67 8月 3 21:47 /testdir/ [wen@wen-7 testdir]$ touch qwewq [wen@wen-7 testdir]$ ll 總用量 0 -rw-rw-r--+ 1 root root 0 8月 3 16:58 f1 -rw-rw-r-- 1 root root 0 8月 3 20:39 qwe.sh -rw-rw-r-- 1 wen sysadmins 0 8月 3 21:47 qwewq -rw-rw-r-- 1 wangcai wangcai 0 8月 3 21:45 wang.sh -rw-rw-r-- 1 wen wen 0 8月 3 21:47 wen.sh [wangcai@wen-7 testdir]$ touch wang2 [wangcai@wen-7 testdir]$ ll 總用量 0 -rw-rw-r-- 1 wen wen 0 8月 3 21:47 wen.sh -rw-rw-r-- 1 wen sysadmins 0 8月 3 21:47 qwewq -rw-rw-r-- 1 wangcai sysadmins 0 8月 3 21:53 wang2 -rw-rw-r-- 1 wangcai wangcai 0 8月 3 21:45 wang.sh
第三個特殊權限:Stlcky
功用:對于屬組或全局可寫的目錄,組內所有用戶或系統上的所有用戶對在此目錄中都能創建新文件或刪除所有的已有文件;如果為此類目錄設置Sticky權限,則每個用戶都能創建新文件,且只能刪除自已的文件
在目錄設置Sticky位,只有文件的所有者或root可以刪除該文件
sticky設置在文件上無意義
管理文件的Sticky權限:
chmod o+|-t FILE…
展示位置:其他用戶的執行權限位,如果屬組原本有執行權限,顯示為小寫t;否則,顯示為大寫T
系統上的/tmp和/bar/tmp目錄默認均有Sticky權限
wangcai@wen-7 testdir]$ rm qwewq [wangcai@wen-7 testdir]$ ll -rw-rw-r-- 1 wangcai sysadmins 0 8月 3 21:53 wang2 -rw-rw-r-- 1 wangcai wangcai 0 8月 3 21:45 wang.sh -rw-rw-r-- 1 wen wen 0 8月 3 21:47 wen.sh [root@wen-7 testdir]# chmod o+t /testdir/ [root@wen-7 testdir]# ll -d /testdir/ drwxrwsr-T 2 root sysadmins 67 8月 3 21:54 /testdir/ [wangcai@wen-7 testdir]$ rm qwewq [wangcai@wen-7 testdir]$ ll 總用量 0 -rw-rw-r--+ 1 root root 0 8月 3 16:58 f1 -rw-rw-r-- 1 root root 0 8月 3 20:39 qwe.sh -rw-rw-r-- 1 wangcai sysadmins 0 8月 3 21:53 wang2 -rw-rw-r-- 1 wangcai wangcai 0 8月 3 21:45 wang.sh -rw-rw-r-- 1 wen wen 0 8月 3 21:47 wen.sh [wangcai@wen-7 testdir]$ rm wen.sh rm:是否刪除有寫保護的普通空文件 "wen.sh"?y rm: 無法刪除"wen.sh": 不允許的操作
管理特殊權限的另一種方式:
采用八進制標識方法:
SUID | SGID | STICKY | 八進制表示 |
0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 |
0 | 1 | 0 | 2 |
0 | 1 | 1 | 3 |
1 | 0 | 0 | 4 |
1 | 0 | 1 | 5 |
1 | 1 | 0 | 6 |
1 | 1 | 1 | 7 |
基于八進制方式賦權時,可于默認的三位八進制數字左側在加一位八進制數字
例: chmod 1777
[root@wen-7 testdir]# ll -d /testdir/ d--------- 2 root sysadmins 67 8月 3 21:54 /testdir/ [root@wen-7 testdir]# chmod 1777 /testdir/ [root@wen-7 testdir]# ll -d /testdir/ drwxrwxrwt 2 root sysadmins 67 8月 3 21:54 /testdir/
第四種特殊權限:隱藏特殊權限
lsattr:查看文件被添加的特殊權限
[root@wen-7 testdir]# lsattr ---------------- ./f1 ---------------- ./qwe.sh ---------------- ./wang.sh ---------------- ./wen.sh ---------------- ./wang2
chattr: 增加特殊權限, 功用是為了避免讓你的文件誤操作,
+A:鎖定時間戳
+i:不能刪除,更改,改名
+a : 只能修改
[root@wen-7 testdir]# chattr +i /testdir/qwe.sh [root@wen-7 testdir]# lsattr ---------------- ./f1 ----i----------- ./qwe.sh ---------------- ./wang.sh ---------------- ./wen.sh ---------------- ./wang2 [root@wen-7 testdir]# rm qwe.sh rm:是否刪除普通空文件 "qwe.sh"?y rm: 無法刪除"qwe.sh": 不允許的操作 [root@wen-7 testdir]# chattr +A /testdir/wen.sh [root@wen-7 testdir]# lsattr ---------------- ./f1 ----i----------- ./qwe.sh ---------------- ./wang.sh -------A-------- ./wen.sh ---------------- ./wang2 [root@wen-7 testdir]# touch -a 1607022213.05 wen.sh [root@wen-7 testdir]# stat wen.sh 文件:"wen.sh" 大?。? 塊:0 IO 塊:4096 普通空文件 設備:fd00h/64768d Inode:9969 硬鏈接:1 權限:(0664/-rw-rw-r--) Uid:( 1000/ wen) Gid:( 1000/ wen) 最近訪問:2016-08-03 22:16:00.569677511 +0800 最近更改:2016-08-03 21:47:15.398196128 +0800 最近改動:2016-08-03 22:16:00.569677511 +0800 創建時間:- [root@wen-7 testdir]# lsattr -----a---------- ./f1 ----i----------- ./qwe.sh ---------------- ./wang.sh -------A-------- ./wen.sh ---------------- ./wang2 ---------------- ./1608032213.05 ---------------- ./1608022213.05 ---------------- ./1607022213.05 ---------------- ./非 [root@wen-7 testdir]# echo "fdsf" >> f1 [root@wen-7 testdir]# cat f1 fdsf [root@wen-7 testdir]# rm f1 rm:是否刪除普通文件 "f1"?y rm: 無法刪除"f1": 不允許的操作
第五種特殊權限: acl訪問控制列表
ACL:Access Control List 實現靈活的權限管理
facl: file access control llsts 訪問控制列表
針對特定文件系統, vfat文件系統不支持(沒有權限機制)
除了文件的所有者,所屬組和其他人,可以對更多的用戶設置權限
CentOS7.0默認創建的xfs和ext4文件系統有ACL功能。
CentOS7.X之前版本,默認手工創建的ext4文件系統無ACL功能。需手動增加:
tune2fs –o acl /dev/sdb1
mount –o acl /dev/sdb1 /mnt
ACL生效順序:所有者,自定義用戶,自定義組,其他人
文件的額外賦權機制
在原來的u,g,o之外,另一層讓普通用戶能控制賦權給另外用戶或組的賦權機制;
使用方法:
顯示訪問控制列表:
getfacl FILE…
user:USERNAME:MODE
group:GROUPNAME:MODE
[root@wen-7 testdir]# getfacl f1 # file: f1 # owner: root # group: root user::rw- user:wen:rwx #effective:rw- group::r-- group:sysadmins:rwx #effective:rw- mask::rw- other::r--
管理訪問控制列表:
setfacl命令: 賦權
授權給目錄:
setfacl -m d:u:USERNAME:MODE FILE… 對以后在目錄下的新建的文件有跟目錄設置的defaul默認權限有相同的acl權限(默認文件ACL權限)
[root@wen-7 testdir]# setfacl -m d:u:wen:rw wen [root@wen-7 testdir]# getfacl wen # file: wen # owner: root # group: root user::rwx group::r-x other::r-x default:user::rw- default:user:wen:rw- default:group::r-x default:mask::rwx default:other::r-x [root@wen-7 testdir]# getfacl wen/f1 # file: wen/f1 # owner: root # group: root user::rw- group::r-- other::r-- [root@wen-7 testdir]# touch wen/f2 ;getfacl wen/f2 # file: wen/f2 # owner: root # group: root user::rw- user:wen:rw- group::r-x #effective:r-- mask::rw- other::r--
賦權給用戶:
setfacl -m u:USERNAME:MODE FILE…
賦權給組
setfacl -m g:GROUPNAME:MODE FILE…
[root@wen-7 ~]# setfacl -m d:u:wangcai:rx /testdir #授權用戶對該目錄讀執行權限 [root@wen-7 ~]# getfacl /testdir/ getfacl: Removing leading '/' from absolute path names # file: testdir/ # owner: root # group: sysadmins # flags: --t user::rwx group::rwx other::rwx default:user::rwx default:user:wangcai:r-x default:group::rwx default:mask::rwx default:other::rwx [root@wen-7 testdir]# setfacl -m u:wen:rw wang.sh #授權用戶對該文件讀寫 [root@wen-7 testdir]# setfacl -m g:sysadmins:rw wang.sh #授權組隊該文件讀寫 [root@wen-7 testdir]# getfacl wang.sh # file: wang.sh # owner: wangcai # group: wangcai user::rw- user:wen:rw- #顯示wen用戶的權限 group::rw- group:sysadmins:rw- #顯示組sysadmins的權限 mask::rw- other::r--
批量授權:
[root@wen-7 testdir]# cat acl.sh u:rooter:rw u:wangcai:rwx g:gentoo:rw g:user3:rx [root@wen-7 testdir]# setfacl -M acl.sh wen.sh [root@wen-7 testdir]# getfacl wen.sh # file: wen.sh # owner: wen # group: wen user::rw- user:root:rw- user:wangcai:rwx group::rw- group:gentoo:rw- group:user3:r-x mask::rwx other::r--
遞歸授權:
setfacl -Rm g:sales:rwX directory
撤銷賦權:
setfacl -x u:USERNAME FILE…
setfacl -x g:GROUPNAME FILE…
[root@wen-7 testdir]# getfacl wen.sh # file: wen.sh # owner: wen # group: wen user::rw- user:root:rw- user:wangcai:rwx group::rw- group:gentoo:rw- group:user3:r-x mask::rwx other::r-- [root@wen-7 testdir]# setfacl -x u:wangcai wen.sh [root@wen-7 testdir]# setfacl -x g:gentoo wen.sh [root@wen-7 testdir]# getfacl wen.sh # file: wen.sh # owner: wen # group: wen user::rw- user:root:rw- group::rw- group:user3:r-x mask::rwx other::r--
批量撤銷授權:
[root@wen-7 testdir]# setfacl -X acl.sh wen.sh [root@wen-7 testdir]# getfacl wen.sh # file: wen.sh # owner: wen # group: wen user::rw- group::rw- mask::rw- other::r-- [root@wen-7 testdir]# cat acl.sh u:rooter u:wangcai g:gentoo g:user3
清空facl全部信息
setfacl -b FIle….
[root@wen-7 testdir]# setfacl -b qwe.sh [root@wen-7 testdir]# getfacl qwe.sh # file: qwe.sh # owner: root # group: root user::rw- group::rw- other::r--
make權限設置:
當設置acl權限后,原屬組的權限位更改為mask的權限位,除了所有者和other的權限,其他的權限(組,添加的其他用戶)都不能高過mask的權限,mask的權限是高壓線 高過mask的權限會自動屏蔽. #effective:rw- 表示屏蔽后的實際可執行權限.
設置mask權限: setfacl -m m::rw filename
[root@wen-7 testdir]# cat acl.sh u:rooter:rw u:wangcai:rwx g:gentoo:rwx g:user3:rwx [root@wen-7 testdir]# setfacl -M acl.sh wang2 [root@wen-7 testdir]# getfacl wang2 # file: wang2 # owner: wangcai # group: sysadmins user::rw- user:root:rw- user:wangcai:rwx group::rw- group:gentoo:rwx group:user3:rwx mask::rwx other::r-- [root@wen-7 testdir]# setfacl -m m:rw wang2 [root@wen-7 testdir]# getfacl wang2 # file: wang2 # owner: wangcai # group: sysadmins user::rw- user:root:rw- user:wangcai:rwx #effective:rw- group::rw- group:gentoo:rwx #effective:rw- group:user3:rwx #effective:rw- mask::rw- other::r--
acl注意事項:
(1)ACL文件上的group權限是mask 值(自定義用戶,自定義組,擁有組的最大權限) ,而非傳統的組權限
(2) getfacl 可看到特殊權限: flags
(3)默認ACL權限給了x,文件也不會繼承x權限。
(4)base ACL 不能刪除
(5)setfacl -k dir 刪除默認ACL權限
(6)setfacl -b file1清除所有ACL權限
(7) getfacl file1 | setfacl –set-file=- file2 復制file1的acl權限給f
備份和恢復ACL
主要的文件操作命令cp和mv都支持acl,只是cp命令需要加上-p參數.但是tar等常見的備份工具是不會保留目錄文文件的ACL信息,需要我們手動備份ACL,備份后,也可以手動恢復.
#getfacl -R /tmp/dir > acl.txt
#setfacl -R -b /tmp/dir1
#setfacl -R –set-file=acl.txt /tmpdir1
#getfacl -R /tmp/dir1
[root@wen-7 testdir]# getfacl -R wang2 > acl.txt [root@wen-7 testdir]# cat acl.txt # file: wang2 # owner: wangcai # group: sysadmins user::rw- user:root:rw- user:wangcai:rwx #effective:rw- group::rw- group:gentoo:rwx #effective:rw- group:user3:rwx #effective:rw- mask::rw- other::r-- [root@wen-7 testdir]# setfacl -R -b wang2 [root@wen-7 testdir]# ll 總用量 28 -rw-r--r-- 1 root root 51 8月 3 22:39 acl.sh -rw-r--r-- 1 root root 202 8月 4 10:50 acl.txt -rw-rw-r--+ 1 root root 5 8月 3 22:17 f1 -rw-rw-r-- 1 root root 0 8月 3 20:39 qwe.sh -rw-rw-r-- 1 wangcai sysadmins 0 8月 3 21:53 wang2 -rw-rwxr--+ 1 wangcai wangcai 9 8月 3 23:02 wang.sh -rw-rw-r--+ 1 wen wen 0 8月 3 21:47 wen.sh -rw-rw-rw-+ 1 root root 0 8月 4 09:24 zxc.sh -rw-r--r-- 1 root root 5 8月 3 22:17 非 [root@wen-7 testdir]# getfacl wang2 # file: wang2 # owner: wangcai # group: sysadmins user::rw- group::rw- other::r-- [root@wen-7 testdir]# setfacl -R --set-file=acl.txt wang2 [root@wen-7 testdir]# getfacl wang2 # file: wang2 # owner: wangcai # group: sysadmins user::rw- user:root:rw- user:wangcai:rwx #effective:rw- group::rw- group:gentoo:rwx #effective:rw- group:user3:rwx #effective:rw- mask::rw- other::r--
原創文章,作者:wencx,如若轉載,請注明出處:http://www.www58058.com/28187
文章整體思路清晰,從普通權限到特殊權限都有了完整的總結與對應的模擬實現,后面排版如果能認真點就更好了。