linux文件權限

                                                                         linux文件權限


當我們使用ll命令查看文件時,可以看到文件的一些信息,今天我們來了解下這些信息都是些什么

blob.png

-rw-r--r-- 1 root root    0 Aug  3 19:13 f2

-:指的是文件類型

rw-r–r–:權限 ==>前三位表示屬主的權限,中三位表示屬組的權限,后三位表示other用戶的權限

1:引用次數(硬鏈接次數)

root:屬主(所有者)

root:屬組(所屬組)

0:文件大小

Aug  3 19:13  :創建時間

f2:文件名

權限:


對文件

r:read  可讀取此文件的實際內容,如讀取文本文件的文字內容等

w: write  可以編輯,新增或修改該文件的內容(但是不含刪除該文件)

x:execute  該文件具有可以被系統執行的權限==>>針對二進制文件或腳本

X:針對目錄會加上x權限,如果是文件,本身沒有執行權限,那么也不會加上執行權限,對目錄不影響

    

對目錄:

x: execute  可以進入目錄,可以訪問目錄中的文件,但是看不到里面有什么文件

r:read  進不去目錄,可以看文件列表。不能訪問目錄內文件,文件的元數據不能查看

w: write 可以創建或刪除目錄中的文件,但是要匹配x權限  

X:和x等價

假如對目錄有寫和執行,就可以刪除里面的任何文件,里面文件u=,也一樣

文件權限的對象:

屬主:u

屬組:g

other:o

chown:設置文件的屬主

[root@localhost qiuwei]# ll
total 8
-rw-r---w- 1 root root    4 Aug  3 19:53 f2
drwxr-xr-x 2 root root 4096 Aug  3 20:12 fff
[root@localhost qiuwei]# chown qiuwei f2   ==>屬主改為用戶qiuwei
[root@localhost qiuwei]# ll
total 8
-rw-r---w- 1 qiuwei root    4 Aug  3 19:53 f2
drwxr-xr-x 2 root   root 4096 Aug  3 20:12 fff
[root@localhost qiuwei]# chown qiuwei:qiuwei fff ==>屬主和主組也可一起修改,用”:“隔開,也可用”.“
[root@localhost qiuwei]# ll
total 8
-rw-r---w- 1 qiuwei root      4 Aug  3 19:53 f2
drwxr-xr-x 2 qiuwei qiuwei 4096 Aug  3 20:12 fff
[root@localhost qiuwei]#

chgrp:設置文件的屬組信息

[root@localhost qiuwei]# ll
total 8
-rw-r---w- 1 qiuwei root    4 Aug  3 19:53 f2
drwxr-xr-x 2 root   root 4096 Aug  3 20:12 fff
[root@localhost qiuwei]# chgrp qiuwei fff   ==>修改目錄fff的屬組為qiuwei
[root@localhost qiuwei]# 
[root@localhost qiuwei]# ll
total 8
-rw-r---w- 1 qiuwei root      4 Aug  3 19:53 f2
drwxr-xr-x 2 root   qiuwei 4096 Aug  3 20:12 fff
[root@localhost qiuwei]# chown qiuwei fff
[root@localhost qiuwei]# ll fff
total 0
-rw-r--r-- 1 root root 0 Aug  3 20:12 abc  ==>修改了目錄fff的屬主,但是目錄里面的文件abc屬性并沒有變
[root@localhost qiuwei]# ll
total 8
-rw-r---w- 1 qiuwei root    4 Aug  3 19:53 f2
drwxr-xr-x 2 qiuwei root 4096 Aug  3 20:12 fff
[root@localhost qiuwei]# chgrp -R qiuwei fff   ==>加上-R選項,修改目錄fff的屬組,看看目錄里面的abc如何
[root@localhost qiuwei]# ll
total 8
-rw-r---w- 1 qiuwei root      4 Aug  3 19:53 f2
drwxr-xr-x 2 qiuwei qiuwei 4096 Aug  3 20:12 fff  
[root@localhost qiuwei]# ll fff
total 0
-rw-r--r-- 1 root qiuwei 0 Aug  3 20:12 abc  ==>abc文件屬組也隨之修改了
[root@localhost qiuwei]#

文件權限的修改


用八進制的數字表示

— 000 ==>0

–x 001 ==>1

-w- 010 ==>2

-wx 100 ==>3

r– 011 ==>4

r-x 101 ==>5

rw- 110 ==>6

rwx 111 ==>7

所以我們表示文件權限也可以說775(rwxrwxr-x), 620(rw–w—-)666(rw-rw-rw-)

chmod:修改文件的權限

修改一類用戶的所有權限:

u=rwx  g=rw o=  a=rwx  ==>沒有就是默認沒有此權限

修改一類用戶的某些權限

u+x  o+w  a+r …

[root@localhost qiuwei]# ll
total 8
-rwxr-x-wx 1 qiuwei root      4 Aug  3 19:53 f2
drwxr-xr-x 2 qiuwei qiuwei 4096 Aug  3 20:12 fff
[root@localhost qiuwei]# chmod a= f2   ==>所有人對f2沒有任何權限
[root@localhost qiuwei]# ll
total 8
---------- 1 qiuwei root      4 Aug  3 19:53 f2
drwxr-xr-x 2 qiuwei qiuwei 4096 Aug  3 20:12 fff
[root@localhost qiuwei]# chmod o+r f2  ==>f2文件other增加r權限
[root@localhost qiuwei]# ll
total 8
-------r-- 1 qiuwei root      4 Aug  3 19:53 f2  
drwxr-xr-x 2 qiuwei qiuwei 4096 Aug  3 20:12 fff

-R:遞歸修改,你懂的

[root@localhost qiuwei]# ll fff
total 0
-rw-r--r-- 1 root qiuwei 0 Aug  3 20:12 abc  ==>abc原本權限644
[root@localhost qiuwei]# ll
total 8
-------r-- 1 qiuwei root      4 Aug  3 19:53 f2
drwxr-xr-x 2 qiuwei qiuwei 4096 Aug  3 20:12 fff
[root@localhost qiuwei]# chmod -R  a=rwx fff   ==>fff目錄和里面的文件abc權限都設置為777的權限
[root@localhost qiuwei]# ll
total 8
-------r-- 1 qiuwei root      4 Aug  3 19:53 f2
drwxrwxrwx 2 qiuwei qiuwei 4096 Aug  3 20:12 fff
[root@localhost qiuwei]# ll fff
total 0
-rwxrwxrwx 1 root qiuwei 0 Aug  3 20:12 abc
[root@localhost qiuwei]#

我們也可以用八進制數字來修改

[root@localhost qiuwei]# ll
total 8
-------r-- 1 qiuwei root      4 Aug  3 19:53 f2
drwxrwxrwx 2 qiuwei qiuwei 4096 Aug  3 20:12 fff
[root@localhost qiuwei]# chmod 000 fff  ==>修改為任何人對fff目錄都沒有權限
[root@localhost qiuwei]# ll
total 8
-------r-- 1 qiuwei root      4 Aug  3 19:53 f2
d--------- 2 qiuwei qiuwei 4096 Aug  3 20:12 fff
[root@localhost qiuwei]# chmod 555 fff ==>修改為任何人對fff目錄都只有r和x權限
[root@localhost qiuwei]# ll
total 8
-------r-- 1 qiuwei root      4 Aug  3 19:53 f2
dr-xr-xr-x 2 qiuwei qiuwei 4096 Aug  3 20:12 fff
[root@localhost qiuwei]#

umask:

用來設置限制新建文件夾權限的掩碼。當新文件被創建時,其最初的權限是由文件創建掩碼決定。用戶進入系統時,umask命令都會被執行,

并自動設置掩碼mode來限制新文件的權限。用戶可以通過執行umask命令來修改默認值,

查看umask配置文件

全局設置:/etc/bashrc  用戶設置:~/.bashrc

if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
    umask 002
else
    umask 022

以上表示如果uid號大于199且用戶名和組名相同,則umask默認為002,否則umask默認為022

對一般文件而言,是不需要執行(x)權限的,所以一般文件全部權限為666,目錄文件為777

umask+默認權限=666(文件)/777(目錄)

所以對root用戶,默認新建文件權限為644,目錄權限為755、

    對普通用戶,默認新建文件權限為664,目錄文件為775

umask修改默認值

我們假設umask=125,來看看新建文件權限究竟是多少

在root用戶下:

umask=125,則新建文件默認權限應為666-125=541

            新建目錄默認權限應為777-125=652

[root@localhost qiuwei]# umask 
0125
[root@localhost qiuwei]# touch a
[root@localhost qiuwei]# mkdir b
[root@localhost qiuwei]# ll
total 0
-rw-r---w- 1 root test 0 Aug  3 21:28 a  ==>a文件權限為642
drw-r-s-w- 2 root test 6 Aug  3 21:28 b  ==>b目錄權限為652

對比看來目錄權限一致,但是文件權限卻有差異

這是因為我們前面有說到,我們一般系統默認文件是不需要執行(x)權限的,而我們知道541權限表示屬主有rx權限,

other有執行(x)權限,這不符合系統設定,所以這種情況下,默認的文件權限如果有奇數就自動加1,偶數就保留,

因為如果文件權限有奇數,就一定代表文件有執行(x)權限 ==>r=4 w=2 x=1

或者也可以這樣理解:

用八進制數表示

文件權限      110  110  110 ==>666 

umask設定     001  010  101 ==>125   

新建文件權限  110  100  010 ==>642

umask設置可以理解為:屏蔽掉屬主x權限,屬組w權限。other的rx權限,,所以文件權限上面有umask要屏蔽的就屏蔽了,沒有的就保留原權限,所以結果就是642

umask從目錄或文件上屏蔽掉最大權限相對應的位,從而得出默認權限

umask也可用模式發表示

[root@localhost qiuwei]# umask  u=rw,g=r,o=  ==>新建文件屬主有rw權限,屬組有r權限,other無權限
[root@localhost qiuwei]# umask 
0137
[root@localhost qiuwei]# touch aaa
[root@localhost qiuwei]# ll
total 8
-rw-r----- 1 root   root      0 Aug  4 09:24 aaa

linux文件系統的特殊權限

SUID  SGID  Sticky

屬主  屬組   other

前提:進程有屬主和屬組;文件有屬主和屬組

  1. 任何一個可執行程序文件能不能啟動為進程:取決于發起者對程序文件是否擁有執行權限

  2. 啟動為進程之后,其進程的屬主為發起者;進程的屬組為發起者所屬的組

  3. 進程訪問文件時的權限,取決于進程的發起者 

     a.進程的發起者,同文件的屬主;則應用文件屬主權限

     b.進程的發起者,屬于文件屬組;則應用文件屬組權限

     c.進程的發起者,是other,則應用文件”其他“權限

 

SUID:

執行/etc/cat文件

blob.png

qiuwei     2184  0.0  0.0 100944   548 pts/0    S+   08:10   0:00 cat

blob.png

用命令ps aux知cat命令的擁有者是用戶qiuwei,不是屬主root用戶,而且進程訪問文件的權限是用戶qiuwei的,

因為如果權限是屬主root的話,我們是可以訪問/etc/shadow文件的

/etc/shadow文件是用來管理用戶密碼的,任何人都無權限,root用戶除外,很顯然普通用戶是無法更改/etc/shadow 文件的

那么普通用戶是怎么實現密碼修改的呢

passwd是修改密碼的命令,我們就是通過執行passwd命令,來訪問修改shaodw文件的,我們來看下passwd這個可執行文件有什么特殊的

blob.png

passwd文件和cat文件區別在于屬主的權限上,passwd多了個s,少了x,看來關鍵就是這個s了,給cat文件加上s權限,看看結果

blob.png

blob.png

剛才執行cat命令訪問shadow文件時,顯示權限不夠的,但是給cat加了s權限后,可以直接訪問shadow文件了,

這個s權限就是SUID

SUID:讓本來沒有相應權限的用戶運行這個程序時,可以訪問他沒有權限訪問的資源。passwd就是一個很鮮明的例子。

      我理解為:當一個文件的屬主擁有s權限時,其他用戶執行此文件后,進程屬主將獲得此文件屬主的權限,上面的cat執行后,擁有了root的權限,所以可以訪問shadow文件了

SUID只針對二進制可執行程序有效

SUID設置在目錄上無效

s權限設定:  chmod  u+s  file

             chmod  u-s  file

用八進制數字表示為4

SGID:如果理解了上面SUID,這個SGID也是一樣的

      組的執行位加上s,普通用戶調用程序時,得到的是組的權限

      在此說明:root用戶權限很大,類似于天神,無所不能,而root組權限和普通用戶組差不多

s權限設定:chmod  g+s  file

           chmod  g-s  file

用把八進制數字表示為2   

SGID作用在目錄上時:

       對目錄加上g+s,任何人不管是不是目錄所在組的成員,在里面創建文件時,該目錄里面的文件屬組繼承目錄的屬組

       即作用在目錄上,將使在該目錄中新建目錄或文件將自動繼承該目錄所屬組

[root@localhost qiuwei]# ll
total 8
-rw-r----- 1 root   root    0 Aug  4 09:24 aaa
-------r-- 1 qiuwei root    4 Aug  3 19:53 f2
dr-xr-srwx 2 root   root 4096 Aug  4 10:29 fff  ==>目錄fff有s權限,屬組是root
[root@localhost qiuwei]# cd fff
[root@localhost fff]# su qiuwei  ==>切換到普通用戶qiuwei
[qiuwei@localhost fff]$ ll
total 0
-rw-rw-r-- 1 qiuwei root 0 Aug  4 10:29 1114
-rw-r----- 1 root   root 0 Aug  4 10:04 123
-rw-r----- 1 root   root 0 Aug  4 10:28 321
[qiuwei@localhost fff]$ touch test ==>創建新文件test
[qiuwei@localhost fff]$ ll
total 0
-rw-rw-r-- 1 qiuwei root 0 Aug  4 10:29 1114
-rw-r----- 1 root   root 0 Aug  4 10:04 123
-rw-r----- 1 root   root 0 Aug  4 10:28 321
-rw-rw-r-- 1 qiuwei root 0 Aug  4 10:30 test ==>文件的屬組為root,而不是普通用戶qiuwei

Sticky

當用戶對一個目錄擁有寫權限時,是可以刪除目錄里面的任何文件,無論該文件的權限或擁有者

為了避免這種情況,我們在目錄設置Sticky位,只有文件的所有者或root可以刪除該文件

權限設定:

      chmod  o+t DIR

      chmod  o-t DIR

[root@localhost fff]# ll
total 0
-rw-rw---- 1 root root 0 Aug  3 20:12 abc  ==>other用戶對abc文件無任何權限
[root@localhost fff]# su qiuwei
[qiuwei@localhost fff]$ ll
total 0
-rw-rw---- 1 root root 0 Aug  3 20:12 abc

[qiuwei@localhost fff]$ rm -rf abc  ==>可以刪除abc文件
[qiuwei@localhost fff]$ ll
total 0
[qiuwei@localhost fff]$

給fff目錄增加t權限后

[root@localhost qiuwei]# chmod o+t fff  ==>給fff目錄增加t權限
[root@localhost qiuwei]# ll
total 8
-rw-r----- 1 root   root    0 Aug  4 09:24 aaa
-------r-- 1 qiuwei root    4 Aug  3 19:53 f2
dr-xr-xrwt 2 root   root 4096 Aug  4 09:51 fff
[root@localhost qiuwei]# touch fff/123
[root@localhost qiuwei]# cd fff/
[root@localhost fff]# ll
total 0
-rw-r----- 1 root root 0 Aug  4 10:04 123
[root@localhost fff]# su qiuwei
[qiuwei@localhost fff]$ rm -rf 123
rm: cannot remove `123': Operation not permitted  ==>給fff目錄增加t權限,其他用戶就無法刪除123文件
[qiuwei@localhost fff]$ ll
total 0
-rw-r----- 1 root root 0 Aug  4 10:04 123
[qiuwei@localhost fff]$ touch 111
[qiuwei@localhost fff]$ ll
total 0
-rw-rw-r-- 1 qiuwei qiuwei 0 Aug  4 10:18 111  ==>可以創建文件
-rw-r----- 1 root   root   0 Aug  4 10:04 123
[qiuwei@localhost fff]$ rm -rf 111   ==>可以刪除自己的文件
[qiuwei@localhost fff]$ ll
total 0
-rw-r----- 1 root root 0 Aug  4 10:04 123
[qiuwei@localhost fff]$

t權限用把八進制數字表示為1 

權限位映射:

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:不能刪除改名,更改文件,任何人

-i:取消上面設置

+A:不讓修改文件時間戳

-A:取消上面設置

+a:可以修改內容,但是不能移動改名刪除

-a:取消上面設置

lsattr:顯示特定屬性

訪問控制列表

ACL:Access Control List,實現靈活的權限管理

除了文件的屬主屬組,other,可以對更多的用戶設置權限

ACL生效順序:屬主,自定義用戶,自定義組,其他人

setfacl -m u:qiuwei:rwx file==>屬主

[root@localhost fff]# ll
total 4
-rw-r----- 1 root root 4 Aug  4 11:08 123 ==>other用戶qiuwei對文件123無任何權限
[root@localhost fff]# setfacl -m u:qiuwei:rwx 123  ==>定義用戶qiuwei對文件123特殊權限rwx
[root@localhost fff]# su qiuwei ==>切換到qiuwei用戶
[qiuwei@localhost fff]$ ll
total 4
-rw-rwx---+ 1 root root 4 Aug  4 11:08 123 ==>權限后面出現了+
[qiuwei@localhost fff]$ cat 123 ==>可正常訪問123文件
123
[qiuwei@localhost fff]$

setfacl -m g:qiuwei:rwx file==>屬組

setfacl -x u:qiuwei file刪除acl權限

setfacl -Rm g:qiuwei:rwx directory ==>遞歸設置,目錄里面的文件也一并設置

也可批量設置

setfacl -M file.acl file|directory 批量設置

setfacl -X file.acl directory 批量刪除

mask值:

當文件有acl權限時,group權限就是mask值,

[root@localhost fff]# setfacl -m u:qiuwei:r  123 ==>S設置ACL權限
[root@localhost fff]# 
[root@localhost fff]# ll
total 4
-rw-r-----+ 1 root root 4 Aug  4 11:08 123
[root@localhost fff]# getfacl 123 
# file: 123
# owner: root
# group: root
user::rw-
user:qiuwei:r--
group::r--
mask::r--  ==>只有r權限
other::---
[root@localhost fff]# chmod g+w 123
[root@localhost fff]# ll
total 4
-rw-rw----+ 1 root root 4 Aug  4 11:08 123  ==>屬組加w權限
[root@localhost fff]# getfacl 123
# file: 123
# owner: root
# group: root
user::rw-
user:qiuwei:r--
group::r--
mask::rw-  ==>也加上了w權限
other::---

它針對的是除了文件屬主和other之外的用戶的最大權限

屬組和acl特殊權限用戶的權限只能比mask的權限低,如果某權限位比mask高,也會被屏蔽,不會擁有此權限

,比mask低的保留其原權限

[root@localhost fff]# setfacl -m m::r 123 ==>設定mask權限為r
[root@localhost fff]# getfacl 123
# file: 123
# owner: root
# group: root
user::rw-
user:qiuwei:rwx			#effective:r-- ==>qiuwei用戶acl權限為rwx,但是有效權限只有r
group::r--
mask::r--
other::---
[root@localhost fff]# su qiuwei
[qiuwei@localhost fff]$ ll
total 4
-rw-r-----+ 1 root root 4 Aug  4 11:08 123
[qiuwei@localhost fff]$ echo 111 >123  ==>qiuwei用戶無法修改123文件
bash: 123: Permission denied
[qiuwei@localhost fff]$ cat 123  ==>qiuwei用戶可讀123文件
123

用戶和組的權限設置必須存在于mask權限設定范圍內才會生效

備份和恢復ACL

  1. getfacl -R  /tmp/dir1 > acl.txt

  2. setfacl -R  -b  /tmp/dir1

  3. setfacl -R –set-file=acl.txt  /tmp/dir1

  4. getfacl -R /tmp/dir1

原創文章,作者:qiuwei,如若轉載,請注明出處:http://www.www58058.com/28059

(0)
qiuweiqiuwei
上一篇 2016-08-04
下一篇 2016-08-04

相關推薦

  • linux使用yum對程序包管理相關知識

     yum客戶端:          配置文件:              /etc/yum.conf: 為所有倉庫提供公共配置              /et…

    Linux干貨 2017-01-02
  • N25第四周博客作業

    第四周博客作業 1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 2、編輯/etc/group文件,添加組hadoop。      3、手動編輯/etc/passwd文件新增一行,添加用戶hadoop,其基本組ID為hadoop組的i…

    Linux干貨 2016-12-19
  • Docker入門

    一、Docker 架構 Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和創建Docker容器。 Docker 容器通過 Docker 鏡像來創建。 容器與鏡像的關系類似于面向對象編程中的對象與類。 Docker 面向對象 容器 對象 鏡像 類 Docker 鏡像(Images) Docker 鏡像是用于創建 Docker 容器的…

    2018-01-20
  • 高級文件系統管理

    高級文件系統管理 配置配額系統 在內核中執行 以文件系統為單位啟用 對不同組或者用戶的策略不同 根據快或者節點限制,軟限制 soft 硬限制hart 初始化 分區掛載選項 usrquota,grgquota 初始化數據庫:quotacheck 執行配置 開啟或者取消 quotaon ,quotaoff 直接編輯配額 edquota username 在she…

    Linux干貨 2017-05-03
  • ?grub應用之提供單獨bash系統

    grub應用之提供單獨bash系統     1.掛載新硬盤,并創建好三個分區,第一分區為boot分區,第三分區為根分區              2.創建掛載目錄,并掛boot分區   &n…

    Linux干貨 2017-01-13

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-07 22:57

    文章整體思路清晰,從權限介紹、管理到特殊權限,都有了相應的認識和理解。

欧美性久久久久