特殊權限set_uid、set_gid、stick_bit 軟鏈接、硬鏈接
阿新 • • 發佈:2018-03-30
258866特殊權限set_uid
以passwd(修改密碼)為例,我們演示一下set_uid
我們先查看一下passwd的權限
ls -l /usr/bin/passwd
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/038037aa3b3a26724a133b8101ae9768.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
我們做個試驗,我們給ls授權set_uid權限試一下
我們先再登錄到一個普通用戶下去
su - yang
然後ls一下/root/
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/aa17084e8982e87250061d5893493d6c.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
·
我們用root用戶給ls加一個s權限
chmod u+s /usr/bin/ls
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/fae328cc6b42dcdb525bf57ac842c883.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
·
然後我們換成普通用戶yang,再ls一下/root/
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/caf56c2e1f2dfea9e8e0dc50901377e9.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
·
現在普通用戶yang可以ls /root/了,但文件權限沒變,普通用戶還是不可讀寫執行
·
我們再把ls的s權限給去掉,再試試
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/16eb2d165c3ec7557bbdb68f17163823.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/629232bce9a6c510551b58708e72bfd8.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
·
這就是set_uid的用法,及用途
·
·
·
·
·
特殊權限set_gid
set_gid和set_uid幾乎相似,set_uid是修改文件擁有者的s權限,set_gid是修改目錄和文件所屬組的s權限
我們先給ls設置set_gid權限
set_gid g+s /usr/bin/ls
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/6e6f9de7a1a416709802ff2f1ebac9e1.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
`
我們看下用普通用戶能否擁有root組的權限
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/58251ac3ca252d0f25877629681d4624.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
·
他是可以使用root組的權限的
我們給一個目錄設置set_gid權限,修改目錄所屬組,在他下面創建文件和子目錄,是否還會是同組
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/e79f0eda617a133b378f377984b99fbb.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
·
創建子目錄和文件,並查看所屬組
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/eb6eda5f7d3cc33901425801169b109a.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
上面我們可以看到,沒添加set_gid權限前,創建的文件還都是root組的,添加完set_gid權限後添加的文件就是目錄的所屬組了
·
·
·
·
·
特殊權限stick_bit
stick_bit的作用
我們知道/tmp是系統的臨時文件目錄,所有的用戶在該目錄下擁有所有的權限,也就是說在該目錄下可以任意創建、修改、刪除文件,那如果用戶A在該目錄下創建了一個文件,用戶B將該文件刪除了,這種情況我們是不能允許的。為了達到該目的,就出現了stick bit(粘滯位)的概念。它是針對目錄來說的,如果該目錄設置了stick bit(粘滯位),則該目錄下的文件除了該文件的創建者和root用戶可以刪除和修改/tmp目錄下的stuff,別的用戶均不能動別人的,這就是粘滯位的作用
·
我們做個試驗,我們用用戶yang創建一個文件,然後切換到用戶huang,看看能不能刪除掉
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/0966601ed858b78f53212cba247de8b4.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
·
然後後我們使用用戶huang 看看是否能刪除
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/6b5d3ec80f88bdcd58ed5f1f229086c5.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
顯然是不能刪除的,但是是可以修改的
·
如何設置stick_bit權限
chmod o+t 目錄
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/0bd3216f50f8aa3eeb7cf63396cb0013.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
·
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/91c2a4e912cb59af0cbbb8013791effe.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
·
·
上三節課用法總結
chmod u+s xxx # 設置setuid權限
chmod g+s xxx # 設置setgid權限
chmod o+t xxx # 設置stick bit權限,針對目錄
·
·
·
·
·
軟鏈接文件
軟鏈接又叫符號鏈接,這個文件包含了另一個文件的路徑名。可以是任意文件或目錄,可以鏈接不同文件系統的文件。(簡單說就是一個快捷方式)
我門先看一下已經存在的軟鏈接的樣子
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/71fb9fe49bd8c4c96323053413339c58.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
·
前面淺藍色就是軟鏈接,後面綠色是原路徑/文件
·
如何制作軟鏈接
in -s xxx(原地址/文件) xxx(軟鏈接地址/文件)
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/dc4bc292cab9a442f381551779d84be7.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
·
·
·
硬鏈接
硬鏈接(hard link, 也稱鏈接)就是一個文件的一個或多個文件名。再說白點,所謂鏈接無非是把文件名和計算機文件系統使用的節點號鏈接起來。因此我們可以用多個文件名與同一個文件進行鏈接,這些文件名可以在同一目錄或不同目錄。但硬鏈接無法為目錄設置,且無法跨分區設置
·
我們制作一個一硬鏈接
in xxx(源文件) xxx(目標文件) 做好後硬鏈接是無法查看誰是原文件的,因為它們的時間,大小都是一樣的
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/b9e581ad5130e252f7d2673d3dde56af.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
·
硬鏈接好比一張皮,可刪除任意一張皮,刪除文件。刪除文件只需將相應的目錄項刪除,該文件的鏈接數減1,如果刪除目錄項後該文件的鏈接數為零,這時系統才把真正的文件從磁盤上刪除。
以passwd(修改密碼)為例,我們演示一下set_uid
我們先查看一下passwd的權限
ls -l /usr/bin/passwd
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/038037aa3b3a26724a133b8101ae9768.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
<br/>分析一下,/etc/passwd的權限為 -rw-r--r-- 也就是說:該文件的所有者擁有讀寫的權限,而用戶組成員和其它成員只有查看的權限。我們知道,在系統中我們要修改一個用戶的密碼,root用戶和普通用戶均可以用/usr/bin/passwd someuser這個命令來修改這個/etc/passwd這個文件,root用戶本身擁有對/etc/passwd的寫權限,無可厚非;那普通用戶呢,這裏就用到了setuid,setuid的作用是“讓執行該命令的用戶以該命令擁有者的權限去執行”,就是普通用戶執行passwd時會擁有root的權限,這樣就可以修改/etc/passwd這個文件了。它的標誌為:s,會出現在x的地方<br/>
我們做個試驗,我們給ls授權set_uid權限試一下
我們先再登錄到一個普通用戶下去
su - yang
然後ls一下/root/
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/aa17084e8982e87250061d5893493d6c.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
·
我們用root用戶給ls加一個s權限
chmod u+s /usr/bin/ls
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/fae328cc6b42dcdb525bf57ac842c883.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
·
然後我們換成普通用戶yang,再ls一下/root/
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/caf56c2e1f2dfea9e8e0dc50901377e9.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
·
現在普通用戶yang可以ls /root/了,但文件權限沒變,普通用戶還是不可讀寫執行
·
我們再把ls的s權限給去掉,再試試
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/16eb2d165c3ec7557bbdb68f17163823.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/629232bce9a6c510551b58708e72bfd8.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
·
這就是set_uid的用法,及用途
·
·
·
·
·
特殊權限set_gid
set_gid和set_uid幾乎相似,set_uid是修改文件擁有者的s權限,set_gid是修改目錄和文件所屬組的s權限
我們先給ls設置set_gid權限
set_gid g+s /usr/bin/ls
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/6e6f9de7a1a416709802ff2f1ebac9e1.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
`
我們看下用普通用戶能否擁有root組的權限
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/58251ac3ca252d0f25877629681d4624.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
·
他是可以使用root組的權限的
我們給一個目錄設置set_gid權限,修改目錄所屬組,在他下面創建文件和子目錄,是否還會是同組
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/e79f0eda617a133b378f377984b99fbb.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
·
創建子目錄和文件,並查看所屬組
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/eb6eda5f7d3cc33901425801169b109a.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
上面我們可以看到,沒添加set_gid權限前,創建的文件還都是root組的,添加完set_gid權限後添加的文件就是目錄的所屬組了
·
·
·
·
·
特殊權限stick_bit
stick_bit的作用
我們知道/tmp是系統的臨時文件目錄,所有的用戶在該目錄下擁有所有的權限,也就是說在該目錄下可以任意創建、修改、刪除文件,那如果用戶A在該目錄下創建了一個文件,用戶B將該文件刪除了,這種情況我們是不能允許的。為了達到該目的,就出現了stick bit(粘滯位)的概念。它是針對目錄來說的,如果該目錄設置了stick bit(粘滯位),則該目錄下的文件除了該文件的創建者和root用戶可以刪除和修改/tmp目錄下的stuff,別的用戶均不能動別人的,這就是粘滯位的作用
我們做個試驗,我們用用戶yang創建一個文件,然後切換到用戶huang,看看能不能刪除掉
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/0966601ed858b78f53212cba247de8b4.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
·
然後後我們使用用戶huang 看看是否能刪除
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/6b5d3ec80f88bdcd58ed5f1f229086c5.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
顯然是不能刪除的,但是是可以修改的
·
如何設置stick_bit權限
chmod o+t 目錄
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/0bd3216f50f8aa3eeb7cf63396cb0013.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
·
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/91c2a4e912cb59af0cbbb8013791effe.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
·
·
上三節課用法總結
chmod u+s xxx # 設置setuid權限
chmod g+s xxx # 設置setgid權限
chmod o+t xxx # 設置stick bit權限,針對目錄
·
·
·
·
·
軟鏈接文件
軟鏈接又叫符號鏈接,這個文件包含了另一個文件的路徑名。可以是任意文件或目錄,可以鏈接不同文件系統的文件。(簡單說就是一個快捷方式)
我門先看一下已經存在的軟鏈接的樣子
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/71fb9fe49bd8c4c96323053413339c58.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
·
前面淺藍色就是軟鏈接,後面綠色是原路徑/文件
·
如何制作軟鏈接
in -s xxx(原地址/文件) xxx(軟鏈接地址/文件)
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/dc4bc292cab9a442f381551779d84be7.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
·
·
·
硬鏈接
硬鏈接(hard link, 也稱鏈接)就是一個文件的一個或多個文件名。再說白點,所謂鏈接無非是把文件名和計算機文件系統使用的節點號鏈接起來。因此我們可以用多個文件名與同一個文件進行鏈接,這些文件名可以在同一目錄或不同目錄。但硬鏈接無法為目錄設置,且無法跨分區設置
·
我們制作一個一硬鏈接
in xxx(源文件) xxx(目標文件) 做好後硬鏈接是無法查看誰是原文件的,因為它們的時間,大小都是一樣的
![技術分享圖片](http://i2.51cto.com/images/blog/201803/29/b9e581ad5130e252f7d2673d3dde56af.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
·
硬鏈接好比一張皮,可刪除任意一張皮,刪除文件。刪除文件只需將相應的目錄項刪除,該文件的鏈接數減1,如果刪除目錄項後該文件的鏈接數為零,這時系統才把真正的文件從磁盤上刪除。
特殊權限set_uid、set_gid、stick_bit 軟鏈接、硬鏈接