Linux基礎篇(12)小白如何學習Linux?權限管理之文件權限

前言小文章

《其實你離成功只差3釐米》

每一個人的人生都渴望成功 而成功的經歷每每都要經歷一段熬的過程 分別只是熬的長短 更有甚者是有的人熬過去了 有的人在半路倒下了。當你千辛萬苦完成了一個項目 一我的生的小目標的時候 反過頭來 你會發現 其實一切不過是一場厚積薄發的過程而已。
人這輩子 誰不得有那麼幾次被苦難教作人。
那種被生活一巴掌連着一巴掌呼得滿地找牙的感受特別很差 可是你要記得:不管境況多糟糕 只要不認慫 生活就沒辦法撂倒你。
再艱難的困境
走下去就是柳暗花明
關鍵是 你要挺住 不要停!node

權限管理-文件權限

把一個用戶加入了一個組 該用戶就擁有了該組的權限 當一個用戶要操做某個文件時 系統會依次檢索該用戶是不是該文件的擁有者 其次是組成員 最後是其餘人 若是掃描到是擁有者 則具有擁有者的權限 沒必要日後掃描 以此類推vim

一 文件權限管理之基本權限

1.1 基本權限介紹

基本權限類型數組

  • r:可讀=》4
  • w:可寫=》2
  • x:可執行=》1

權限的歸屬bash

  • 屬主:u
  • 屬組:g
  • 其餘人:o

例如
[root@aliyun ~]# ls -l a.txt
-rw-r--r-- 1 root root 1146 Jul 16 18:42 a.txtide

文件類型:
-:文本文檔
d:目錄
b:設備block
c:字符設備
s:套接字文件
l:軟連接ui

權限rest

硬連接個數code

屬主遞歸

屬組文檔

文件所佔用的空間(以字節爲單位)

文件(目錄)最近訪問(修改)時間

文件名

1.2 設置權限

修改屬主、屬組
[root@aliyun ~]# chown alice.hr file1 # 改屬主、屬組
[root@aliyun ~]# chown alice file1 # 只改屬主
[root@aliyun ~]# chown .hr file1 # 只改屬組

[root@aliyun ~]# chown -R /test # 遞歸修改
修改u、g、o對應的權限
加減法
chmod u+x,g-w,o+r a.txt
賦值
chmod a=rwx a.txt
chmod a=- a.txt
chmod ug=rw,o=r file1

數字
chmod 644 file1

chmod -R 777 xxx/
注意:把某一個非屬主用戶添加到文件的屬組裏,他就擁有了該組的權限,而再也不是其餘人

1.3 權限對文件or目錄的意義

文件:ls -l 文件名

  • r:能夠cat讀取文件內容
  • w:能夠修改文件
  • x:能夠執行文件代碼,若是該文件的代碼是編譯好的結果,那麼只有x權限便可執行,但若是該文件的代碼是一個解釋型的腳本程序,則須要配合r權限纔可執行

目錄:ls -dl 文件名

  • r: 能夠ls瀏覽文件下的內容
  • w:能夠在目錄下建立新文件or目錄
  • x:
    • 能夠執行目錄下的程序,除了對目錄有執行權限外,還要對程序文件有執行權限才行。
    • 能夠正常切換到目錄下
    • 涉及到多層目錄如/a/b/c,須要對每一級都有x權限才能夠正常走到下一級
    • 一:對文件夾的操做(不操做文件內容),須要當前用戶具有的權限
      一、對沿途全部文件夾有x權限
      二、對目標文件夾有r或w權限
      r-》能夠瀏覽
      w-》能夠建立、刪除、移動子文件和子目錄

二:對文件的操做(操做文件內容),須要當前用戶具有的權限
一、對沿途全部文件夾有x權限
二、對目標文件有r或w權限
r-》能夠讀取文件內容
w-》能夠修改文件內容

!!!注意!!!
儲備知識:vim修改的原理是將源文件刪掉,而後再將內容的內容覆蓋寫入了新文件,新文件名重命名爲原文件名
例子:
一、當前用戶對沿途全部文件夾都有x權限
二、而且當前用戶對目標文件夾有w權限
三、可是當前用戶對目標文件沒有w權限
此時當前用能夠vim編輯文件內容,而且能夠wq!強制保存退出完成文件修改,實際上是將源文件刪掉了,能夠經過查看先後操做的文件inode號來肯定

例1:要想在目錄下建立\刪除內容:對目錄的x權限+對目錄的w權限

一、設置權限
[root@aliyun ~]# mkdir -p /a/b/c
[root@aliyun ~]# chmod -R o=x /a # 其餘人o對當前目錄及其子目錄都有x權限
[root@aliyun ~]# chmod o+w /a/b/c # 其餘人o對/a/b/c目錄有w權限

二、查看權限
[root@aliyun ~]# ls -dl /a
drwxr-x--x 3 root root 4096 Aug 11 16:24 /a
[root@aliyun ~]# ls -dl /a/b
drwxr-x--x 3 root root 4096 Aug 11 16:24 /a/b
[root@aliyun ~]# ls -dl /a/b/c
drwxr-x-wx 2 root root 4096 Aug 11 16:25 /a/b/c

三、驗證
[root@aliyun ~]#
[root@aliyun ~]# su - gg
Last login: Tue Aug 11 16:17:28 CST 2020 on pts/2
[gg@aliyun ~]$ touch /a/b/c/1.txt
[gg@aliyun ~]$ exit
logout
[root@aliyun ~]# ls /a/b//c/
1.txt

例2:要瀏覽目錄下內容:對目錄的x權限+對目錄的r權限

[root@aliyun ~]# mkdir -p /a/b/c
[root@aliyun ~]# chmod -R o=x /a
[root@aliyun ~]# chmod o+r /a/b/c
[root@aliyun ~]#
[root@aliyun ~]# touch /a/b/c/{1..3}.txt
[root@aliyun ~]#
[root@aliyun ~]# su - gg
Last login: Tue Aug 11 16:27:33 CST 2020 on pts/2
[gg@aliyun ~]$ ls /a/b/c
1.txt 2.txt 3.txt

例3:要執行目錄下程序:對目錄的x權限+對文件的x權限,若是文件是解釋型語言的腳本程序,還須要對文件有r權限

[root@aliyun ~]# mkdir -p /a/b/c
[root@aliyun ~]# chmod -R o=x /a/b/c
[root@aliyun ~]# cp /bin/echo /a/b/c
[root@aliyun ~]# chmod o=x /a/b/c/echo
[root@aliyun ~]#
[root@aliyun ~]# su - gg
Last login: Tue Aug 11 16:30:17 CST 2020 on pts/2
[gg@aliyun ~]$ /a/b/c/echo "hello fly"
hello fly

二 文件權限管理之特殊權限

2.1 SUID

普通用戶不是root也不屬於root組,因而它對/etc/shadow文件沒有任何權限
[root@aliyun ~]# ll /etc/shadow
---------- 1 root root 1109 Aug 11 16:11 /etc/shadow
可是普通用戶卻能夠用passwd命令修改密碼,而修改密碼都是在修改/etc/shadow文件,如何實現的???
[root@aliyun ~]# ll which passwd
-rwsr-xr-x 1 root root 27856 Aug 9 2019 /bin/passwd
能夠看到一個s權限,s權限的特殊之處

  • SUID 權限僅對二進制可執行文件有效
  • 若是執行者對於該二進制可執行文件具備 x 的權限,執行者將具備該文件的全部者的權限
  • 本權限僅在執行該二進制可執行文件的過程當中有效

示例

[root@localhost ~]# ll which cat
-rwxr-xr-x. 1 root root 54160 10月 31 2018 /usr/bin/cat
[root@localhost ~]# chmod 4755 which cat # 或者 chmod u+s which cat
[root@localhost ~]# ll which cat
-rwsr-xr-x. 1 root root 54160 10月 31 2018 /usr/bin/cat

[root@localhost ~]# su - egon
[egon@localhost ~]$ cat /etc/shadow # 能夠看到內容

瞭解:

一、在沒有設置suid的狀況下,咱們登陸了一個用戶,來執行操做目標文件的命令
會依次比對當前登陸用戶是不是目標文件的屬主、屬組、其餘人來肯定是否擁有操做權限

二、在設置了suid的狀況下,咱們登陸了一個用戶,來執行操做目標文件的命令
當前用戶會轉換成命令文件的屬主身份,而後拿着該身份去對應目標文件,若是該身份不是目標文件的主人,那麼就直接被歸爲其餘人一欄,不會檢索組
sgid同樣

準備
mkdir /test
chmod 777 /test/
echo 1111 > /test/a.txt
chmod 000 /test/a.txt
chown user1.group1 /test/a.txt
chown egon.devops /usr/bin/cat
chmod u+s /usr/bin/cat

實驗
[root@egon ~]# ll /test/a.txt # 目標文件的屬主:user1,屬組:group1
----------. 1 user1 group1 4 10月 29 18:31 /test/a.txt
[root@fly ~]#
[root@fly ~]#
[root@fly ~]# ll /usr/bin/cat # 命令文件的屬主:fly
-rwxr-xr-x. 1 egon devops 54160 10月 31 2018 /usr/bin/cat
[root@fly ~]#
[root@fly ~]#
[root@fly ~]# su - lili -c "cat /test/a.txt" # lili切換爲fly用戶執行,fly用戶沒有對上a.txt的屬主,因此直接被當成其餘人,沒有任何權限
cat: /test/a.txt: 權限不夠
[root@fly ~]# chmod o+r /test/a.txt
[root@fly ~]# su - lili -c "cat /test/a.txt"
111
[root@fly ~]#
[root@fly ~]#
[root@fly ~]# chmod o-r,g+r /test/a.txt
[root@fly ~]# ll /test/a.txt
----r-----. 1 user1 group1 4 10月 29 18:31 /test/a.txt
[root@fly ~]# usermod -a -G group1 egon
[root@fly ~]# ll /usr/bin/cat # 確保suid還在
-rwsr-xr-x. 1 fly devops 54160 10月 31 2018 /usr/bin/cat
[root@fly ~]# id fly
uid=1005(fly) gid=1005(fly) 組=1005(fly),1003(group1)
[root@fly ~]#
[root@fly ~]# su - lili -c "cat /test/a.txt" # lili--->fly,fly用戶沒有對上a.txt的屬主,因此直接被當成其餘人,雖然此時egon屬於文件a.txt的屬組group1的成員,可是對suid來講那沒用
cat: /test/a.txt: 權限不夠
[root@fly ~]#

[root@fly ~]# su - fly -c "cat /test/a.txt" # 若是當前用戶與suid的用戶重疊,那麼就無所謂用戶轉換,一樣會按照:屬主、屬組、其餘人的次序依次對照
1111

注意:
sgid規則同suid
同時設置suid與sgid的狀況下,suid優先級高於sguid

2.2 SGID

  • 當SGID 做用於普通文件時,和 SUID 相似,在執行該文件時,用戶將得到該文件所屬組的權限。

  • 當 SGID 做用於目錄時,意義就很是重大了:
    當一個用戶對某一目錄有寫和執行權限時,該用戶就能夠在該目錄下創建文件
    若是該目錄同時用 SGID 修飾,則該用戶在這個目錄下創建的文件都是屬於這個目錄所屬的組
    [root@localhost ~]# mkdir /test
    [root@localhost ~]# chmod g+s /test/ # 等同於chmod 2755 /test/
    [root@localhost ~]# ll -dl /test/
    drwxr-sr-x 2 root root 6 8月 11 17:06 /test/
    [root@localhost ~]#
    [root@localhost ~]# chown .fly /test/ # 後期任何人在該目錄下建立的文件or目錄的屬組都是fly

2.3 SBIT

其實 SBIT 與 SUID 和 SGID 的關係並不大。
SBIT 是 the restricted deletion flag or sticky bit 的簡稱,有時也稱爲Sticky
SBIT 目前只對目錄有效,用來阻止非文件的全部者刪除文件。比較常見的例子就是 /tmp 目錄:
[root@localhost ~]# ls -dl /tmp/
drwxrwxrwt. 13 root root 4096 8月 11 17:09 /tmp/
[root@localhost ~]# chmod o+t /test/ # 或者 chmod 1755 /test
權限信息中最後一位 t 代表該目錄被設置了 SBIT 權限。SBIT 對目錄的做用是:當用戶在該目錄下建立新文件或目錄時,僅有本身和 root 纔有權力刪除,主要做用於一個共享的文件夾。

三 文件權限管理之umask

新建文件、目錄的默認權限是由umask決定的

一、uid>199而且屬主與數組相等的用戶下,umask: 0002

  • 文件 664
  • 目錄 775

二、除1以外的其餘用戶下,好比root用戶,umask: 0022

  • 文件 644
  • 目錄 755

inux中文件默認權限爲66六、目錄權限默認爲777,在umask的影響下
文件權限計算方法:偶數位直接相減,奇數位相減後加1

文件的起始權限值 umask值 操做 計算後文件權限
666 022 (每位若是都是偶數) 直接相減便可 644
666 033 (每位若是有奇數或偶數 相減(奇數位相減後在其原奇數位加1 644
666 325(每位若是有奇數或偶數) 相減(奇數位相減後在其原奇數位加1) 442

目錄權限計算方法:直接相減便可

文件的起始權限值 umask值 操做 計算後文件權限
777 022 相減 755
777 033 相減 744
777 325 相減 452

總結:umask設置的越小,權限越大,慎用

臨時設置umask
[root@localhost ~]# umask 000 //設置umask權限
永久設置umask
[root@localhost tmp]# vim /etc/profile # 或者/etc/bashrc內容同樣
......
if [ $UID -gt 199 ] && [ "id -gn" = "id -un" ]; thenumask 002 //表示uid大於等於199的默認umask值,表示普通用戶elseumask 022 //表示uid小於199的默認umask值,表示rootfi

相關文章
相關標籤/搜索