Centos7.5-文件權限管理

本節所講內容:

- 7.1文件的基本權限:r w x (UGO)
- 7.2文件的特殊權限:suid sgid sticky和文件擴展權限ACL
- 7.3實戰:創建一個讓root都無法刪除的文件
- 7.1 文件的基本權限
- 7.1.1 權限的作用

通過對文件設定權限可以達到以下三種訪問限制權限:

  • 只允許用戶自己訪問;
  • 允許一個預先指定的用戶組中的用戶訪問;
  • 允許系統中的任何用戶訪問。

7.1.2 查看權限

[root@xuegod63 ~]# ll /etc/passwd
-rw-r--r--. 1 root root 2053 9月  19 2017 /etc/passwd

文件權限基本解釋:

-   rw-        r--       r--.     1 root root 2053 9月  19 2017 /etc/passwd
-   rwx r-x r-x user1   user1   time    FILENAME

文件類型 擁有者的權限 所屬組的權限 其他人的權限 擁有者 屬組 最後修改時間 對象

  • 其中:文件類型,可以爲p、d、l、s、c、b和 –
  • p表示命名管道文件
  • d表示目錄文件
  • l表示符號連接文件
  • -表示普通文件
  • s表示socket套接口文件,比如我們啓用mysql時,會產生一個mysql.sock文件
  • c表示字符設備文件,例: 虛擬控制檯 或tty0
  • b表示塊設備文件 例: sda, cdrom

例:

[root@xuegod63 ~]# ll /dev/sda /dev/cdrom  /etc/passwd /dev/tty0
lrwxrwxrwx  1 root root    3 9月  19 2017 /dev/cdrom -> sr0
brw-rw----  1 root disk 8, 0 9月  19 2017 /dev/sda
crw--w----  1 root tty  4, 0 9月  19 2017 /dev/tty0
-rw-r--r--. 1 root root 2053 9月  19 2017 /etc/passwd   

如下效果圖:
在這裏插入圖片描述

7.1.3 權限說明

對於文件來說:

  • r:讀
  • w:寫
  • x:執行

對於目錄來說:

  • r:讀(看到目錄裏面有什麼) ls
  • w:在目錄裏面建文件,刪除,移動 touch mkdir rm mv cp
  • x:進入 cd cat

7.1.4 文件擁有者

  • UGO:所有者--用戶組--其它用戶
  • 所有者: 就是創建文件的用戶,這個用戶擁有對它所創建的文件的一切權限,所有者可以允許其所在的用戶組可以訪問所有者的文件。
  • 用戶組:
    用戶組是具有相同特徵用戶的邏輯集合,有時我們需要讓多個用戶具有相同的權限,比如查看、修改某一個文件的權限,一種方法是分別對多個用戶進行文件訪問授權,如果有10個用戶的話,就需要授權10次,顯然這種方法不太合理;另一種方法是建立一個組,讓這個組具有查看、修改此文件的權限,然後將所有需要訪問此文件的用戶放入這個組中,那麼所有用戶就具有了和組一樣的權限。這就是用戶組。
  • 其它用戶:系統內的其他所有者用戶就是other用戶類

7.1.5 舉例說明

7.1.5.1 常見幾種文件權限組成

  • rwx --- ---:文件所有者對文件具有讀取、寫入和執行的權限。
  • rwx r-- r--: 文件所有者具有讀、寫與執行的權限,用戶組裏用戶及其他用戶則具有讀取的權限
  • rw- rw- r-x:文件所有者與同組用戶對文件具有讀寫的權限,而其他用戶僅具有讀取和執行的權限。
  • drwx--x—x: 目錄所有者具有讀寫與進入目錄的權限,其他用戶近能進入該目錄,卻無法讀取任何數據。
  • drwx------: 除了目錄所有者具有完整的權限之外,其他用戶對該目錄完全沒有任何權限。

舉例如下:
每個用戶都擁有自己的專屬目錄,通常放置/home下

  • [root@xuegod63 home]# ll /home/
  • 總用量 0
  • drwx------. 3 mk mk 78 9月 19 2017 mk
  • 注: [rwx------]表示目錄所有者本身擁有的權限,其它用戶是無法進入的。 root可以。

例2: 你以什麼用戶身份登錄,那麼你創建的文件或目錄,自動成爲該文件的所屬主和組

  • [root@xuegod63 home]# su - mk

上一次登錄:二 9月 19 12:57:21 CST 2017:0 上

[mk@xuegod63 ~]$ 
[mk@xuegod63 ~]$ touch a.txt
[mk@xuegod63 ~]$ ll a.txt 
-rw-rw-r-- 1 mk mk 0 5月   8 20:58 a.txt

7.1.5.2 更改文件的屬主和屬組

  • 改變文件的所屬關係用到命令:
  • chown:可以用來改變文件(或目錄)的屬主
  • chgrp:可以用來改變文件(或目錄)的默認屬組
  • 如果你要對目錄進行操作,加參數 -R

chown
語法:

chown user:group filename   比如:chown hr:san a.txt  把文件的屬主和屬組改爲hr,san
chown user filename  比如:chown san a.txt  把文件的屬主改爲san用戶
chown :group filename  比如: chown :miao a.txt   把文件的屬組改爲miao這個組
chown user: filename 比如:chown san: a.txt  自動繼承這個用戶所有的組
chgrp hr filename 比如: chgrp hr f.txt  
-R :遞歸(目錄下的所有內容都更改,否則只修改目錄)

例:

[root@xuegod63 ~]# touch  {a,b,c}.txt
[root@xuegod63 ~]# ll  *.txt
-rw-r--r-- 1 root root 0 5月   8 21:03 a.txt
-rw-r--r-- 1 root root 0 5月   8 21:03 b.txt
-rw-r--r-- 1 root root 0 5月   8 21:03 c.txt

[root@xuegod63 ~]# chown mk a.txt
[root@xuegod63 ~]# ll a.txt 
-rw-r--r-- 1 mk root 0 5月   8 21:03 a.txt
[root@xuegod63 ~]# chown mk:mk a.txt
[root@xuegod63 ~]# ll a.txt 
-rw-r--r-- 1 mk mk 0 5月   8 21:03 a.txt
[root@xuegod63 ~]# chown :root  a.txt
[root@xuegod63 ~]# ll a.txt 
-rw-r--r-- 1 mk root 0 5月   8 21:03 a.txt

互動:一個文件只有讀的權限,擁有者是否可以寫這個文件?
實驗:
[root@xuegod63 ~]# su - mk

[mk@xuegod63 ~]$ touch a.txt
[mk@xuegod63 ~]$ ll a.txt 
-rw-rw-r-- 1 mk mk 0 5月   8 21:07 a.txt

在另一個終端上,以root身份登錄:

[root@xuegod63 ~]# chmod 000 /home/mk/a.txt   #修改成000權限
[root@xuegod63 ~]# ll /home/mk/a.txt  
---------- 1 mk mk 14 5月   8 21:08 /home/mk/a.txt

回到以mk身份登錄的終端:

[mk@xuegod63 ~]$ vim a.txt   # 寫入aaa  ,  :wq!  保存

在另一個終端上,以root身份登錄:

[root@xuegod63 ~]# cat /home/mk/a.txt 
aaaaa

實驗結果:文件所有者一定可以寫文件。 就像root可以對shadow強制寫。 因shadow的擁有者是root

7.1.6 修改權限

7.1.6.1 使用字符設定

修改權限用的命令:chmod

  • 作用:修改文件,目錄的權限
  • 語法:chmod [對誰操作] [操作符] [賦於什麼權限] 文件名

對誰操作:

  • u----> 用戶user,表示文件或目錄的所有者
  • g---->用戶組group,表示文件或目錄所屬的用戶組
  • o---->其它用戶others
  • a---->所有用戶all

操作符:

  • #添加權限 ; - # 減少權限 ; = #直接給定一個權限

權限:r w x
例如下在的組合:

  • u-w user 擁有者

  • g+x group 組

  • o=r other 其他人

  • a+x all 所有人

例:chmod修改權限

[root@xuegod63 ~]# touch 1.txt
[root@xuegod63 ~]# ll 1.txt 
-rw-r--r-- 1 root root 0 5月   8 21:20 1.txt
[root@xuegod63 ~]# 
[root@xuegod63 ~]# chmod u-w  1.txt
[root@xuegod63 ~]# ll 1.txt 
-r--r--r-- 1 root root 0 5月   8 21:20 1.txt
[root@xuegod63 ~]# chmod g+x  1.txt
[root@xuegod63 ~]# ll 1.txt 
-r--r-xr-- 1 root root 0 5月   8 21:20 1.txt
[root@xuegod63 ~]# chmod a+x  1.txt    # 給shell腳本加一個可執行權限
[root@xuegod63 ~]# ll 1.txt 
-r-xr-xr-x 1 root root 0 5月   8 21:20 1.txt
[root@xuegod63 ~]# 
[root@xuegod63 ~]# chmod a=rwx  1.txt
[root@xuegod63 ~]# ll 1.txt 
-rwxrwxrwx 1 root root 0 5月   8 21:20 1.txt

7.1.6.2 使用八進制(0-7)數字表示權限法

權限 二進制值 八進制值 描述

  • --- 000 0 沒有任何權限
  • --x 001 1 只有執行權限
  • -w- 010 2 只有寫入權限
  • -wx 011 3 有寫入和執行權限
  • r-- 100 4 只有讀取權限
  • r-x 101 5 有讀取和執行權限
  • rw- 110 6 有讀取和寫入權限
  • rwx 111 7 有全部權限

例1:
在這裏插入圖片描述
例2:

  • 互動:rw- 的值是多少? 答: 4+2=6
  • rwx r-x r-x 的值是多少? 答: rwx=4+2+1=7 ; r-x=4+1=5 rwx
    r-x r-x=7 5 5

語法:

chmod 755 文件或文件夾名字
chmod a=rwx b.txt  等於 chmod 777 b.txt

例:

[root@xuegod63 ~]# touch dd.txt
[root@xuegod63 ~]# ll dd.txt 
-rw-r--r-- 1 root root 0 5月   8 21:40 dd.txt
[root@xuegod63 ~]# chmod 755 dd.txt 
[root@xuegod63 ~]# ll dd.txt 
-rwxr-xr-x 1 root root 0 5月   8 21:40 dd.txt
[root@xuegod63 ~]# chmod 700 dd.txt 
[root@xuegod63 ~]# ll dd.txt 
-rwx------ 1 root root 0 5月   8 21:40 dd.txt

7.1.7 權限對文件和目錄的影響

有三種權限可以應用:讀取,寫入與執行,這些權限對訪問文件和目錄的影響如下:
權限 對文件的影響 對目錄的影響

  • r(讀取) 可以讀取文件的內容 可以列出目錄的內容(文件名)
  • w(寫入) 可以更改文件的內容 可以創建或刪除目錄中的任意文件
  • x(執行) 可以作爲命令執行文件 可以訪問目錄的內容(取決於目錄中文件的權限)

7.1.8 補碼

爲什麼我們創建的文件的權限是644呢?
我們創建文件的默認權限是怎麼來的?

umask命令允許你設定文件創建時的缺省模式,對應每一類用戶(文件屬主、同組用戶、其他用戶)存在一個相應的umask值中的數字
文件默認權限=666 ,目錄默認權限=777
我們一般在/etc/profile、$ [HOME]/.bash_profile或$[HOME]/.profile中設置umask值。
永久生效,編輯用戶的配置文件vim .bash_profile  
[root@xuegod63 ~]# vim /etc/profile

注: UID大於199 且用戶的組名和用戶名一樣,那麼 umask值爲002,否則爲022.
注: -gt 在shell中表示大於; id -g 顯示用戶組ID ,id -gn顯示組名。

臨時生效: umask 權限補碼

[root@xuegod63 ~]# umask 044
[root@xuegod63 ~]# touch ss.txt
[root@xuegod63 ~]# ll ss.txt 
-rw--w--w- 1 root root 0 5月   8 21:47 ss.txt

權限的算法:一般情況是:目錄默認權限-umask 值

666-022=644  
777-022=755 
#這是一個好的記憶方法,但不嚴謹。

互動:umask掩碼爲033 創建普通文件後,權限是什麼?
互動:umask掩碼爲033 創建普通文件後,權限是什麼? 666-033=633 ( rw- -wx -wx) ?

例:[root@xuegod63 ~]# umask 033
[root@xuegod63 ~]# touch k.txt
[root@xuegod63 ~]# ll k.txt 
-rw-r--r-- 1 root root 0 5月   8 22:00 k.txt
答:結果爲: 644 

權限科學的計算方法:

  • 1、將默認權限(目錄777,文件666)和umask值都轉換爲2進制 2、對umask取反 3、將默認權限和umask取反後的值做與運算
    4、將得到的二進制值再轉換8進制,即爲權限,

例1: umask 爲022

6  6  6            umask   0  2   2
110 110 110               000 010  010    # 轉成二進制 
                           111 101  101    # umask取反的值
110 110 110    與              #第二步,默認權限和umask取反後的值做與運算
111 101 101   # umask取反的值
110 100 100
6   4   4     #轉成8進制

例2: umask 爲033 結果爲: 644

6  6  6            umask   0  3   3
110 110 110               000 011  011    # 轉成二進制
                           111 100  100    # umask取反的值
110 110 110    與              #默認權限和umask取反後的值做與運算
111 100 100   # umask取反的值
110 100 100
6   4   4    #轉成8進制

7.2 文件的特殊權限:suid sgid sticky和文件擴展權限ACL

  • 其實文件與目錄設置不止這些,還有所謂的特殊權限。由於特殊權限會擁有一些“特權”.

  • 特殊權限:

7.2.1 文件的特殊權限:suid sgid sticky

  • 1、SUID(set uid設置用戶ID):限定:只能設置在二進制可執行程序上面。對目錄設置無效

功能:程序運行時的權限從執行者變更成程序所有者的權限

  • 2、SGID:限定:既可以給二進制可執行程序設置,也可以對目錄設置
    功能:在設置了SGID權限的目錄下建立文件時,新創建的文件的所屬組會,繼承上級目錄的所屬組
  • 3、Stickybit:粘滯位權限是針對目錄的,對文件無效,也叫防刪除位 這3個特殊權限對應的數值爲

SUID SGID Stickybit

  • u+s或u=4 g+s或g=2 o+t或o=1
    SUID屬性一般用在可執行文件上,當用戶執行該文件時,會臨時擁有該執行文件的所有者權限。使用”ls -l” 或者”ll”
    命令瀏覽文件時,如果可執行文件所有者權限的第三位是一個小寫的”s”,就表明該執行文件擁有SUID屬性。比如/usr/bin/passwd文件

**互動: 普通用戶mk,沒有對shadow文件寫入的權限, 但是mk用戶使用passwd修改自己密碼時,可以修改shadow文件中的內容,這是什麼原因
[root@xuegod63 ~]# ll /etc/shadow
----------. 1 root root 1179 9月 19 2017 /etc/shadow
[root@xuegod63 ~]# su - mk
上一次登錄:二 5月 8 21:07:24 CST 2018pts/0 上
[mk@xuegod63 ~]$ passwd
更改用戶 mk 的密碼 。
爲 mk 更改 STRESS 密碼。
(當前)UNIX 密碼:123456
新的 密碼:Xuegod666
重新輸入新的 密碼:Xuegod
666
passwd:所有的身份驗證令牌已經成功更新。
[root@xuegod63 ~]# vim /etc/shadow #查看shadow文件已經被mk用戶修改成功。
因爲mk用戶執行passwd命令時,權限會提升成root用戶,所以可以修改成功。**

例2:

[root@xuegod63 ~]# useradd mk
[root@xuegod63 ~]# su - mk
[root@xuegod63 ~]$less /etc/shadow  #看不到內容
[root@xuegod63 ~]# su - root
[root@xuegod63 ~]# chmod u+s /usr/bin/less  #切換到root,給一個suid權限
[root@xuegod63 ~]# su - mk
[mk@xuegod63 ~]$ less /etc/shadow  #看到

查看u+s後的效果:

[root@xuegod63 ~]# ll /usr/bin/less
-rwsr-xr-x 1 root root 154536 Sep 26  2011 /usr/bin/less
[root@xuegod63 ~]# ps -axu | grep less
root     43407  0.0  0.0 110260   980 pts/0    S+   22:30   0:00 less /etc/shadow

另外:

[root@xuegod63 ~]# chmod 4755 /usr/bin/less  # 等同於 chmod u+s /usr/bin/less

SGID:

  • 限定:既可以給二進制可執行程序設置,也可以給目錄設置。
  • 功能:在設置了SGID權限的目錄下建立文件時,新創建的文件的所屬組會繼承上級目錄的權限。

    [root@xuegod63 ~]# mkdir test
    [root@xuegod63 ~]# ll -d test
    drwxr-xr-x 2 root root 4096 Jan 24 20:14 test
    [root@xuegod63 ~]# chmod g+s test
    [root@xuegod63 ~]# !ll
    ll -d test
    drwxr-sr-x 2 root root 4096 Jan 24 20:14 test

測試:sgid效果

 -[root@xuegod63 ~]# chown :bin test/ [root@xuegod63 ~]# touch
   test/a.txt [root@xuegod63 ~]# ll !$ ll test/a.txt
   -rw-r--r-- 1 root bin 0 Jan 24 20:15 test/a.txt

Stickybit
限定:只作用於目錄
功能:目錄下創建的文件只有root、文件創建者、目錄所有者才能刪除。
例: 系統中的tmp目錄就是這樣

[root@xuegod63 ~]# ll -d /tmp/
drwxrwxrwt. 11 root root 4096 Jan 24 19:41 /tmp/

用法:

chmod o+t /tmp/test/

7.2.1 文件擴展權限ACL

擴展ACL :access control list
例:設置用戶mk對文件a.txt擁有的rwx權限 ,mk不屬於a.txt的所屬主和組,mk是other。怎麼做?

[root@xuegod63 ~]# touch /tmp/a.txt
[root@xuegod63 ~]# getfacl  /tmp/a.txt
getfacl: Removing leading '/' from absolute path names

# file: tmp/a.txt
# owner: root
# group: root

user::rw-
group::r--
other::r--
#setfacl -m u:mk:rwx   /tmp/a.txt     u : 設置某個用戶擁有的權限
[root@xuegod63 ~]# getfacl  /tmp/a.txt
getfacl: Removing leading '/' from absolute path names
...
user::rw-
user:mk:rwx
[mk@xuegod63 ~]$ vim /tmp/a.txt 
[mk@xuegod63 ~]$ ll /tmp/a.txt 
-rw-rwxr--+ 1 root root 8 5月   8 22:42 /tmp/a.txt

例2: 給目錄加擴展權限

[root@xuegod63 ~]# mkdir /tmp/test 
#setfacl -m d:u:mk:rwx    /tmp/test   # -d  default    設置默認acl,對目錄有效,此目錄下新建的目錄或文件都繼承此acl權限

例:測試一下 -d 參數:

[root@xuegod63 ~]# mkdir /tmp/test 
[root@xuegod63 ~]# setfacl -m d:u:mk:rwx    /tmp/test 
[root@xuegod63 ~]# getfacl  /tmp/test/
getfacl: Removing leading '/' from absolute path names
# file: tmp/test/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:mk:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

[root@xuegod63 ~]# touch /tmp/test/a.txt
[root@xuegod63 ~]# mkdir /tmp/test/data
[root@xuegod63 ~]# getfacl /tmp/test/a.txt   #因爲-d參數,所以test下所有創建的文件和目錄都繼承了默認的acl權限
getfacl: Removing leading '/' from absolute path names
# file: tmp/test/a.txt
# owner: root
# group: root
user::rw-
user:mk:rwx         #effective:rw-
group::r-x          #effective:r--
mask::rw-
other::r--

[root@xuegod63 ~]# getfacl /tmp/test/data
getfacl: Removing leading '/' from absolute path names
# file: tmp/test/data
# owner: root
# group: root
user::rwx
user:mk:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:mk:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

例3:給目錄下所有文件都加擴展權限

[root@xuegod63 ~]# setfacl -R -m u:lee:rw- testdirectory/    #-R一定要在-m前面,表示目錄下所有文件
[root@xuegod63 ~]# setfacl -x u:mk /tmp/a.txt          # 去掉單個權限
[root@xuegod63 ~]# setfacl -b  /tmp/a.txt              # 去掉所有acl權限

7.3實戰:創建一個讓root都無法刪除的文件

發現windows中 有文件刪除不了,怎麼辦? 使用360 強制刪除,粉碎文件
那麼在Linux下怎麼辦?

[root@xuegod63 ~]# touch hack.sh aa.sh 
[root@xuegod63 ~]# ll hack.sh aa.sh 
-rw-r--r-- 1 root root 0 May 24 21:29 aa.sh
-rw-r--r-- 1 root root 0 May 24 21:29 hack.sh
[root@xuegod63 ~]# rm -rf aa.sh
***使用xshell悄悄執行在後臺添加attr擴展屬性:(這個別讓學員看到^_^)
[root@xuegod63 ~]# chattr  +i hack.sh

刪除文件:

[root@xuegod63 ~]# rm -rf  hack.sh  #發現刪除不了

爲什麼刪除不了?

從REHL6 開始,新增加文件系統擴展屬性:
命令:chattr

  • 參數: a 只能追加內容 ; i 不能被修改
  • +a: 只能追加內容 如: echo aaa >> hack.sh
  • +i:即Immutable,系統不允許對這個文件進行任何的修改。如果目錄具有這個屬性,那麼任何的進程只能修改目錄之下的文件,不允許建立和刪除文件。

注:immutable [ɪˈmju:təbl] 不可改變的 ; Append [əˈpend] 追加

  • -i :移除i參數。 -a :移除a參數

解決:

[root@xuegod63 ~]# lsattr hack.sh
----i----------- hack.sh
[root@xuegod63 ~]# chattr -i hack.sh
[root@xuegod63 ~]# echo aa >> hack.sh
[root@xuegod63 ~]# lsattr hack.sh   #查看擴展屬性
---------------- hack.sh
[root@xuegod63 ~]# chat
chat    chattr  
[root@xuegod63 ~]# chattr +a hack.sh
[root@xuegod63 ~]# rm -rf hack.sh
rm: 無法刪除"hack.sh": 不允許的操作
[root@xuegod63 ~]# echo aaa >> hack.sh

總結:

  • 7.1文件的基本權限:r w x (UGO)
  • 7.2文件的特殊權限:suid sgid sticky和文件擴展權限ACL
  • 7.3實戰:創建一個讓root都無法刪除的文件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章