描述:
用戶在系統上的操作受到權限的約束,例如對文件或者目錄進行查看、修改、復制、刪除等操作時,由文件或者目錄對應的操作的權限所決定的。
在root的家目錄下創建一個普通文件和目錄并查看其屬性:
[root@localhost ~]# echo 123 > file1 [root@localhost ~]# ll file1 -rw-r--r-- 1 root root 4 Aug 12 19:51 file1
[root@localhost ~]# mkdir dir1 [root@localhost ~]# ll drwxr-xr-x 2 root root 4096 Aug 12 19:53 dir1
拿文件file1來解讀下:(共有7個字段)
-rw-r--r-- 1 root root 4 Aug 12 19:51 file1
1, -rw-r–r–
– :表示文件類型
補充:Linux系統上常見的文件類型:
-: file 常規文件
d: directory 目錄文件
b: block device 快設備文件,支持以“block”為單位進行隨機訪問
c: character device 字符設備文件,支持以“character”為單位進行線性訪問
l: symbolic link 符號鏈接文件
p: pipe 命名管道
s: socket 套接字文件
rw-r–r–: 代表文件的權限(3位為一組)
左三位:rw- 定義所有者的權限(user,owner)
中三位:r– 定義所屬組的權限(group)
右三位:r– 定義其他人的權限(other)
2,數字1: 表示有多少文件名連接到此節點(i-node)
3,root: 表示文件的屬主為root
4,root:表示文件的所屬用戶組
5,0: 表示文件的容量大小,默認單位為B
6,Aug 12 19:51: 表示文件的創建日期或者是最近的修改日期
7,file1 表示文件名
其所表示的含義為:文件file1是普通文件,所有者是root,權限為可讀寫,所屬組為root,權限為可讀,其它用戶的權限為可讀,其鏈接數為1。
文件權限
文件的權限主要針對三類對象進行定義:
owner: 屬主, u
group: 屬組, g
other: 其他, o
每個文件針對每類訪問者都定義了三種權限:
r: readable
w: writable
x: excutable
權限對文件和目錄的意義
文件:
r: 可使用文件查看類工具獲取其內容
w: 可修改其內容
x: 可以把此文件提請內核啟動為一個進程
示例:1,cat命令是二進制文件,每個用戶為什么都可以使用這個命令呢?主要是其的權限決定的,對于所有者,所屬組和其他人三種身份都具有X權限位,即擁有執行權限,可執行這個命令的文件變為程序
[root@localhost ~]# ll /bin/cat -rwxr-xr-x 1 root root 48568 May 11 2016 /bin/cat
2,/etc/passwd文件是有關用戶的信息,現在ping用戶想查看下這個文件,對于這個文件來說,ping用戶是other身份,權限位顯示只有讀權限,所以可用cat命令來查看相關信息,但不能修改和刪除該文件
[ping@localhost ~]$ ll /etc/passwd -rw-r--r-- 1 root root 1769 Aug 12 18:45 /etc/passwd
[ping@localhost ~]$ echo 123 >> /etc/passwd -bash: /etc/passwd: Permission denied [ping@localhost ~]$ rm -f /etc/passwd rm: cannot remove `/etc/passwd': Permission denied
目錄:
r: 可以使用ls 查看此目錄中文件列表
w: 可在此目錄中創建文件,也可刪除此目錄中的文件
x: 可以使用ls -l 查看此目錄中文件列表,可以cd 進入此
默認情況下只給目錄x 權限,不給文件x 權限
示例:先用root身份先在/tmp下創建一個dir1目錄,接著在/tmp下創建一個file1文件,注意,目錄和文件的所有者,所屬組和屬性
[root@localhost tmp]# mkdir dir1 drwxr-xr-x 2 root root 4096 Aug 12 22:04 dir1 [root@localhost dir1]# ll
現在用普通用戶ping進入到/tmp下,該用戶對于該目錄是other身份,由于目錄在other的權限位上有r和x則,ping用戶可以進入該目錄查看文件,由于沒x權限,故不能修改文件內容或刪除文件
[ping@localhost tmp]$ cd dir1 [ping@localhost dir1]$ ls file1 [ping@localhost dir1]$ echo 11 >> file1 -bash: file1: Permission denied [ping@localhost dir1]$ rm -f file1 rm: cannot remove `file1': Permission denied
權限組合機制:
– – – 000 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
chmod命令:改變文件的權限 用戶僅能修改屬主為自己的那些文件的權限
用戶類型:屬主u 屬組g 其他人o 所有人a
1,chmod [option]… Mode[,mode]…file…
mode表示法:
賦權表示法:直接操作一類用戶的所有權限位rwx
u= g= o= a=
修改當前目錄下的file1文件的權限
-rw-r--r-- 1 root root 4 Aug 12 19:51 file1
[root@localhost ~]# chmod u=rwx,g=rw,o=rw file1 [root@localhost ~]# ll -rwxrw-rw- 1 root root 4 Aug 12 19:51 file1
授權表示法:直接操作一類用戶的一個權限位r,w,x
u+,u- g+,g- o+,g- a+,a-
[root@localhost ~]# chmod u-x,g+x,o-rw file1 [root@localhost ~]# ll file1 -rw-rwx--- 1 root root 4 Aug 12 19:51 file1
2,chmod [option]… OCTAL-mode file…
3,chmod [option]..—reference=RFILE file…
-R:遞歸修改
先將當前目錄下的dir1目錄及其包含的文件的權限改為777,然后按照/etc/fstab文件的權限將dir1目錄及其包含的文件的權限進行修改
[root@localhost ~]# ll /etc/fstab -rw-r--r--. 1 root root 921 Jul 26 2016 /etc/fstab [root@localhost ~]# chmod -R --reference=/etc/fstab dir1 [root@localhost ~]# ll;ll dir1 drw-r--r-- 2 root root 4096 Aug 13 00:21 dir1 -rw-r--r-- 1 root root 4 Aug 13 00:21 test
chown命令:改變文件所有者 僅管理員可修改文件的屬主和屬組
chown [-R] dirname/filename…
-R: 遞歸(recursive)修改,連同子目錄下的所有文件、目錄都更新成為這個用戶。常用在更改某一目錄內所有文件情況
示例:將dir1目錄及其包含的文件的所有者改為ping用戶
[root@localhost ~]# chown ping -R dir1 [root@localhost ~]# ll;ll dir1 drw-r--r-- 2 ping root 4096 Aug 13 00:21 dir1 -rw-r--r-- 1 ping root 4 Aug 13 00:21 test
chgrp命令:改變文件所屬用戶組 僅管理員可修改文件的屬主和屬組
chgrp [-R] dirname/filename…
-R: 遞歸(recursive)修改,連同子目錄下的所有文件、目錄都更新成為這個用戶組。常用在更改某一目錄內所有文件情況
示例:將dir1目錄及其包含的文件的所屬組改為ping用戶組
[root@localhost ~]# chgrp ping -R dir1 [root@localhost ~]# ll;ll dir1 drw-r--r-- 2 ping ping 4096 Aug 13 00:21 dir1 -rw-r--r-- 1 ping ping 4 Aug 13 00:21 test
chgap [option] … –reference =RFILE file…
新建文件和目錄的默認權限
umask值可以用來保留在創建文件權限
umask: 查看umask值
root 的umask 是 是 022
[root@localhost ~]# umask 0022
非特權用戶umask是 是 002
[ping@localhost ~]$ umask 0002
umask #: 設定
新建FILE 權限: 666-umask
如果所得結果某位存在執行(奇數)權限,則將其權限+1
示例:以root用戶身份先設置umask值為135,在當前目錄下創建test2文件
[root@localhost ~]# umask 135 [root@localhost ~]# touch test2 [root@localhost ~]# ll test2 -rw-r---w- 1 root root 0 Aug 13 00:50 test2
其中test2文件的權限為642,是根據新建FILE 權限: 666-umask得到的,666-135=531,由于普通文件不能擁有執行(奇數)權限,故在對應位的權限上+1,即得到的結果為642(rw-r—w-)
新建DIR 權限: 777-umask
umask –S 模式方式顯示
umask –p 輸出可被調用
: 全局設置: /etc/bashrc 用戶設置:~/.bashrc
Linux文件系統上的特殊權限
SUID, SGID, Sticky
三種常用權限:r, w, x user, group, other
安全上下文
前提:進程有屬主和屬組;文件有屬主和屬組
(1) 任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限
(2) 啟動為進程之后,其進程的屬主為發起者;進程的屬組為發起者所屬的組
(3) 進程訪問文件時的權限,取決于進程的發起者
(a) 進程的發起者,同文件的屬主:則應用文件屬主權限
(b) 進程的發起者,屬于文件屬組;則應用文件屬組權限
(c) 應用文件“其它”權限
特殊權限數字表示法
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
可執行文件上SUID權限
任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限
啟動為進程之后,其進程的屬主為原程序文件的屬主
SUID 只對二進制可執行程序有效
執行者對該程序需要具有X的可執行的權限
本權限僅在執行該程序中有效
執行者將具有該程序的所有者的權限
SUID 設置在目錄上無意義
權限設定:
chmod u+s FILE…
chmod u-s FILE..
示例:普通用戶可以修改自己的口令,可以查看/etc/passwd的內容,是因為ping用戶對于/usr/bin/passwd這個程序來說是具有x權限的,表示ping用戶可以執行passwd;passwd的擁有者是root;ping用戶在執行passwd的過程中,會‘暫時’獲得root的權限;/etc/passwd可以被ping所執行的passwd所修改。但如果ping用戶使用cat去讀取/etc/shadow時,是不能讀取該文件的內容的,因為cat不具有SUID權限
[ping@localhost ~]$ ll /usr/bin/passwd -rwsr-xr-x. 1 root root 30768 Nov 24 2015 /usr/bin/passwd
[ping@localhost ~]$ ll /etc/shadow ---------- 1 root root 1039 Aug 12 18:45 /etc/shadow
[ping@localhost ~]$ cat /etc/shadow cat: /etc/shadow: Permission denied
[root@localhost tmp]# touch test1 加入具有SUID的權限 [root@localhost tmp]# chmod 4755 test1;ll test1 -rwsr-xr-x 1 root root 0 Aug 13 01:21 test1
任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限
啟動為進程之后,其進程的屬主為原程序文件的屬組
對文件來說:
SGID對二進制程序有效
程序執行者對于該程序來說,需要具有X權限
執行者在執行的過程中將會獲得該程序用戶組的支持
對目錄來說:
用戶若對此目錄具有r與x權限時,該用戶能夠進入此目錄
用戶在此目錄下的有效組將會變成該目錄的用戶組
若用戶在此目錄下具有w權限(可以新建文件),則用戶所創建的新文件的用戶組與此目錄的用戶組相同
權限設定:
示例:
[root@localhost ~]# ll /usr/bin/locate -rwx--s--x 1 root slocate 38464 Mar 12 2015 /usr/bin/locat
[root@localhost tmp]# chmod 6755 test1;ll test1 加入具有SUID/SGID的權限 -rwsr-sr-x 1 root root 0 Aug 13 01:21 test1
目錄上的SGID
默認情況下,用戶創建文件時,其屬組為此用戶所屬的 主 組
一旦某目錄被設定了SGID ,則對此目錄有寫權限的用戶在此
目錄中創建的文件所屬的組為此目錄的屬組
通常用于創建一個協作目錄
權限設定:
chmod g+s DIR…
chmod g-s DIR.
Sticky位
具有寫權限的目錄通常用戶可以刪除該目錄中的任何
文件,無論該文件的權限或擁有權
在目錄設置Sticky 位,只有文件的所有者或root可 可
以刪除該文件
sticky 設置在文件上無意義
權限設定:
chmod o+t DIR…
chmod o-t DIR…
示例:
[root@localhost tmp]# ll -d /tmp drwxrwxrwt. 4 root root 4096 Aug 13 01:21
[root@localhost tmp]# chmod 1755 test1;ll test1 加入具有SBIT的功能 -rwxr-xr-t 1 root root 0 Aug 13 01:21 test1
[root@localhost tmp]# chmod 7666 test1;ll test1 具有空的SUID/SGID權限 -rwSrwSrwT 1 root root 0 Aug 13 01:21 test1
權限位映射
SUID: user, 占據屬主的執行權限位
s: 屬主擁有x 權限
S :屬主沒有x 權限
SGID: group, 占據屬組的執行權限位
s: group 擁有x 權限
S :group 沒有x 權限
Sticky: other, 占據other 的執行權限位
t: other 擁有x 權限
T :other 沒有x
設定文件特定屬性
chattr +i 不能刪除,改名,更改
chattr +a 只能增加
lsattr 顯示特定屬性
訪問控制列表
ACL :Access Control List ,實現靈活的權限管理
除了文件的所有者,所屬組和其它人,可以對更多的用戶設置權限
ACL 生效順序:所有者,自定義用戶,自定義組,其他
為多用戶或者組的文件和目錄賦予訪問權限rwx
? getfacl file |directory 查看文件或目錄的acl
? setfacl -m u:username:per file|directory 設置用戶的acl
? setfacl -Rm g:groupname:per directory 遞歸設置組的acl
? setfacl -m d:u:user:per directory 設置默認acl參數,只對目錄有效,在該目錄新建的數據會引用此默認值
? setfacl -x u:username file |directory 取消用戶acl
ACL 文件上的group 權限是mask 值(自定義用戶,自定義組,擁有組的最大權限), 而非傳統的組權限
getfacl 可看到特殊權限:flags
默認ACL 權限給了x ,文件也不會繼承x 權限。
base ACL 不能刪除
setfacl -k dir 刪除默認ACL 權限
setfacl -b file1 清除所有ACL 權限
getfacl file1 | setfacl –set-file=- file2 復制file1的acl 權限給file2
mask 只影響除所有者和other 的之外的人和組的最大權限
Mask 需要與用戶的權限進行邏輯與運算后,才能變成有限的權限
(Effective Permission)
用戶或組的設置必須存在于mask 權限設定 范圍內才會生效。
setfacl -m mask::rx file
–set 選項會把原有的ACL 項都刪除,用新的替代,需要注意的是一定要包含UGO 的設置,不能像-m 一樣只是添加ACL 就可以.
如:
setfacl –set u::rw,u:wang:rw,g::r,o::- file1
備份和恢復ACL
主要的文件操作命令cp 和mv 都支持ACL ,只是cp 命令需要加上-p 參數。但是tar 等常見的備份工具是不會保留目錄和文件的ACL 信息
#getfacl -R /tmp/dir1 > acl.txt
#setfacl -R -b /tmp/dir1
#setfacl -R –set-file=acl.txt /tmp/dir1
#getfacl -R /tmp/dir1
示例:普通用戶hadoop想在root創建的文件具有rw權限,可利用acl來設置其權限
[root@localhost backup]# cp /etc/inittab ./ [root@localhost backup]# getfacl inittab # file: inittab # owner: root # group: root user::rw- group::r-- other::r-- [hadoop@localhost backup]$ cd /backup [hadoop@localhost backup]$ ll total 4 -rw-r--r-- 1 root root 884 Aug 13 02:17 inittab [hadoop@localhost backup]$ echo 123 >> inittab bash: inittab: Permission denied [root@localhost backup]# setfacl -m u:hadoop:rw inittab 設置hadoop用戶的acl [root@localhost backup]# getfacl inittab # file: inittab # owner: root # group: root user::rw- user:hadoop:rw- group::r-- mask::rw- other::r-- [root@localhost backup]# su hadoop [hadoop@localhost backup]$ echo 123 >> inittab [hadoop@localhost backup]$ tail inittab id:3:initdefault: 123
[root@localhost backup]# setfacl -x u:hadoop inittab 取消hadoop用戶的acl [root@localhost backup]# getfacl inittab # file: inittab # owner: root # group: root user::rw- user:tom:rwx group::r-- group:mygroup:rw- mask::rwx other::r--
[root@localhost backup]# setfacl -m m::r inittab 設置mask值 [root@localhost backup]# getfacl inittab # file: inittab 有效權限(effective permission) # owner: root 用戶或組所設置的權限必須要存在于mask的權限范圍內才會生效 # group: root user::rw- user:tom:rwx #effective:r-- user:hadoop:rwx #effective:r-- group::r-- group:mygroup:rwx #effective:r-- mask::r-- other::r-- [root@localhost backup]# su hadoop [hadoop@localhost backup]$ echo "123" >> inittab bash: inittab: Permission denied
原創文章,作者:pingsky,如若轉載,請注明出處:http://www.www58058.com/28505
對命令的用法通過示例有了很好的展示。