文件特殊權限suid、sgid、stick_bit、硬連接、軟連接

第二章 文件、目錄管理

2.18 特殊權限之 suid

SUID的做用就是:讓原本沒有相應權限的用戶運行這個程序時,能夠訪問沒有權限訪問的資源。passwd是一個很鮮明的例子。
suid=set uidnode

# umask
0022

umask的數值0022中第一位表明的就是特殊權限,包括有suid、sgid、sticky_bit。ui

該權限針對二進制可執行文件(x),是文件在執行階段具備文件全部者的權限。spa

[root@3 ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd

passwd這個命令就有該權限,當普通用戶執行passwd命令時,能夠臨時得到root權限,從而能夠更改密碼。
passwd屬性找那個顯示的是rws,並不是傳統的rwx,用數字表示爲4755。
4是如何計算來的呢?
當有特殊權限時,第一位數字能夠是0,1(--t),2(-s-),3(-st),4(s--),5(s-t),6(ss-),7(sst)。passwd是s--,因此數值爲4。code

  • 自定義一個set uid權限:
[root@3 ~]# su - 2  臨時切換到用戶2
[2@3 ~]$ ls -l /root/
ls: 沒法打開目錄/root/: 權限不夠   **此時做爲普通用戶,沒有查看(ls)/root/目錄的權限因此報錯
[2@3 ~]$ exit
登出
[root@3 ~]# chmod u+s /bin/ls  給ls命令增長set uid權限
[root@3 ~]# ls -l /bin/ls
-rwsr-xr-x. 1 root root 117656 11月  6 2016 /bin/ls
[root@3 ~]# su - 2
上一次登陸:三 6月  7 21:31:56 CST 2017pts/0 上
[2@3 ~]$ ls -l /root/  ls得到查看root的權限
總用量 4
-rw-------. 1 root root 1422 5月  22 01:30 anaconda-ks.cfg
[2@3 ~]$ exit
登出
[root@3 ~]# chmod u-x /bin/ls  去除全部者執行(x)權限
[root@3 ~]# ls -l /bin/ls  當全部者沒有x權限以後s會變成S
-rwSr-xr-x. 1 root root 117656 11月  6 2016 /bin/ls
[root@3 ~]# chmod u-s /bin/ls
[root@3 ~]# ls -l /bin/ls
-rwxr-xr-x. 1 root root 117656 11月  6 2016 /bin/ls

注: 普通文件必須有x權限s權限才生效。索引

2.19 特殊命令之 sgid

sgid=set gid
該權限能夠用於文件也能夠用於目錄。設置於可執行二進制文件時,做用和suid相似,即執行改文件的用戶會臨時得到改文件所屬組的權限。設置在目錄時,任何用戶在此目錄下建立的文件或目錄都具備和該目錄相同的所屬組。
eg:資源

[root@2 ~]# mkdir /tmp/test
[root@2 ~]# chmod 777 !$
chmod 777 /tmp/test
[root@2 ~]# ls -ld !$
ls -ld /tmp/test
drwxrwxrwx 2 root root 6 6月   8 07:18 /tmp/test
[root@2 ~]# chmod g+s !$  給/tmp/test所屬組增長s權限
chmod g+s /tmp/test
[root@2 ~]# ls -ld /tmp/test
drwxrwsrwx 2 root root 6 6月   8 07:18 /tmp/test
[root@2 ~]# useradd user1
[root@2 ~]# su - user1  臨時切換到user1用戶
[user1@2 ~]$ cd /tmp/test/  切換至test目錄
[user1@2 test]$ mkdir adai001  在test目錄下建立新目錄
[user1@2 test]$ touch adai.txt  在test目錄下建立新文件
[user1@2 test]$ ls -l
總用量 0
drwxrwsr-x 2 user1 root 6 6月   8 07:20 1
-rw-rw-r-- 1 user1 root 0 6月   8 07:21 2.txt
在test目錄下新建立的目錄或文件均和test有相同的所屬組

2.20 特殊權限之 stick_bit

stick_bit能夠理解爲防刪除位,當前只針對目錄有效。一個文件是否能夠被某用戶刪除,主要取決於該文件所在目錄是否對該用戶具備寫權限。若是沒有寫權限,則這個目錄下的全部文件都不能被刪除,同時也不能添加新文件。若是但願用戶可以添加文件但同時不能刪除該目錄下的其餘用戶的文件,則能夠對其父目錄增長該權限。it

語法: chmod [o] [+,-] t filename
eg: /tmp/目錄就設有該權限test

[root@2 ~]# useradd user2
[root@2 ~]# su - user2
[user2@2 ~]$ touch /tmp/user1.txt 在user2用戶的/tmp/目錄下建立文件user1.txt
[user2@2 ~]$ echo "121">!$  向user1.txt寫入文件
echo "121">/tmp/user1.txt
[user2@2 ~]$ exit
登出
[root@2 ~]# useradd user3
[root@2 ~]# su - user3  切換到user3用戶下
[user3@2 ~]$ rm -f /tmp/user1.txt  在user3用戶下對user2用戶在/tmp/目錄下建立的文件實施刪除工做
rm: 沒法刪除"/tmp/user1.txt": 不容許的操做    操做沒法完成

說明: 一個文件可否被刪除,取決於該文件父目錄的權限,/tmp/目錄是777,任何人均可以寫的,因此理論上任何人均可以刪除/tmp/下的因此文件,可是剛纔咱們作的實驗卻代表,user3是不能夠刪除user2的文件的,就是由於/tmp/目錄有stick bit權限。登錄

2.21 軟連接文件

軟連接: 跟硬連接不一樣,這個是創建一個獨立的文件,而這個文件的做用是當讀取這個連接文件時,它會把讀取的行爲轉發到該文件所 link 的文件上。file

那麼就來舉一個例子:如今有文件 a,咱們作了一個軟連接文件 b(只是一個連接文件,很是小), b 指向了文件 a。當讀取 b 時,那麼b 就會把讀取的動做轉發到 a 上,這樣就讀取到了文件 a。因此,當咱們刪除文件 a 時,文件 b 並不會被刪除,可是再讀取 b 時,會提示沒法打開文件。然而,當咱們刪除 b 時, a 是不會有任何影響的。(b文件相似Windows的快捷方式,可是是二級快捷方式,inode硬連接是一級)

這就用到了 ln 命令:

語法 : ln [-s] [來源文件] [目的文件(快捷方式)]
ln 經常使用的選項就一個-s,若是不加就是創建硬連接,加上就創建軟連接。

 

2.22 硬連接

>硬鏈接指經過索引節點來進行鏈接。在Linux的文件系統中,保存在磁盤分區中的文件不論是什麼類型都給它分配一個編號,稱爲索引節點號(Inode Index)。在Linux中,多個文件名指向同一索引節點是存在的。通常這種鏈接就是硬鏈接。硬鏈接的做用是容許一個文件擁有多個有效路徑名,這樣用戶就能夠創建硬鏈接到重要文件,以防止「誤刪」的功能。進行硬連接的時候該文件的內容並無任何變化,只是指定了相同的inode index。

  • 硬連接有兩個限制:
    1)不能跨文件系統建立硬連接,由於不一樣的文件系統有不一樣的inode index;
    2)目錄不能建立硬連接。
  • 建立硬連接: ln [源文件] [目標文件]

軟連接和硬連接的區別

1)硬連接就是同一個文件使用了多個別名(他們有共同的 inode)。軟連接就是一個普通文件,只是數據塊內容有點特殊(文件用戶數據塊中存放的內容是另外一文件的路徑名的指向,相似於Windows下的快捷方式)。 2)因爲硬連接是有着相同 inode 號僅文件名不一樣的文件,所以,刪除一個硬連接文件並不影響其餘有相同 inode 號的文件。刪除軟連接並不影響被指向的文件,但若被指向的原文件被刪除,則相關軟鏈接就變成了死連接。 3)硬連接不能對目錄進行建立,只可對文件建立。軟連接可對文件或目錄建立。

相關文章
相關標籤/搜索