上次整理了關于linux系統的檔案及目錄權限,其實為了系統的安全性:
linux還有一些特殊權限: set_uid:(主) set_gid:(組) stick_bit:(其他)
1、set_uid: 授權普通使用者臨時擁有檔案/目錄所有者的權限:該權限隻能授于二進制可執行檔案:
如:當普通使用者要給自己修改密碼:則需要臨時擁有root使用者對passwd的屬主權限才可以:如下:
1
2
3
4
<code>[root@localhost ~]</code><code># which passwd #檢視passwd的路徑</code>
<code>/usr/bin/passwd</code>
<code>[root@localhost ~]</code><code># ls -l /usr/bin/passwd</code>
<code>-rwsr-xr-x. 1 root root 27832 6月 10 2014 </code><code>/usr/bin/passwd</code> <code>#其所屬主為rws.擁有uid權限.</code>
1.1;那麼如何設定讓普通使用者擁有對檔案的臨時權限呢:
格式: chmod u+s filename #u表示檔案所屬主的加上s權限則表示擁有uid權限:
5
6
<code>[root@localhost ~]</code><code># chmod u+s /usr/bin/ls #給使用者添加get_uid權限:</code>
<code>[root@localhost ~]</code><code># ls -ld /usr/bin/ls #檢視get_uid權限: </code>
<code> </code><code>-rwsr-xr-x. 1 root root 117656 11月 6 2016 </code><code>/usr/bin/ls</code>
<code>[root@localhost ~]</code><code># su - yuanhh #切換到普通使用者:</code>
<code>[yuanhh@localhost ~]$ </code><code>ls</code> <code>/root/</code>
<code>anaconda-ks.cfg </code><code>#可以檢視此目錄:</code>
即一般普通使用者是不能檢視/root/的目錄的檔案:隻有加入了set_uid才可以。
1.2:如何取消普通使用者對檔案的臨時權限:
格式:chmod u-s filename #表示取消檔案的所屬主的s權限則表示取消uid:
<code>[root@localhost ~]</code><code># chmod u-s /usr/bin/ls #取消二進制檔案的uid權限:</code>
<code>[root@localhost ~]</code><code># su - yuanhh</code>
<code>上一次登入:四 10月 26 21:26:41 CST 2017pts</code><code>/0</code> <code>上</code>
<code>ls</code><code>: 無法打開目錄</code><code>/root/</code><code>: 權限不夠 </code><code>#發現會無法檢視root的目錄:</code>
另外:如果二進制檔案的所屬主有執行權限,則會顯示小s,如果沒有執行權限,隻會顯示大S權限:
2、set_gid:針對使用者組來操作,有以下兩種用法:
2.1:可以用于檔案,可以讓普通使用者臨時擁有所屬組的身份及權限,同set_uid的用法相同:
2.2:可以用于目錄,但對此目錄修改了set_gid權限後,再在此目錄下再建立檔案/目錄,其所屬組與其父目錄是一緻的。
2.3:那麼如何給目錄增加set_gid權限:
格式:chmod g+s filename/dir #給某個目錄/檔案增加set_gid權限:
[root@localhost ~]# ls -ld yuan/
drwxr-sr-x 4 root yuanhh 42 10月 27 00:18 yuan/
7
8
<code> </code><code>[root@localhost ~]</code><code># chmod g+s yuan #給yuan這個目錄增加gid權限:</code>
<code>[root@localhost ~]</code><code># ls -ld yuan</code>
<code>drwxr-sr-x 2 root yuanhh 6 10月 27 00:14 yuan</code>
<code>[root@localhost ~]</code><code># cd yuan/</code>
<code>[root@localhost yuan]</code><code># touch 1 & mkdir 2 建立檔案1和目錄2.</code>
<code>[root@localhost yuan]</code><code># ls -al</code>
<code>-rw-r--r-- 1 root yuanhh 0 10月 27 00:15 1 </code><code>#兩個檔案的所屬組都變化。</code>
<code>drwxr-sr-x 2 root yuanhh 6 10月 27 00:15 2 </code><code>#兩個檔案的所屬組都變化。</code>
2.4:那麼如何取消給目錄增加的set_gid權限呢:
格式:chmod g-s filename/dir #給某個目錄/檔案減去set_gid權限:
<code>[root@localhost ~]</code><code># chmod g-s yuan #給檔案減去gid權限:</code>
<code>[root@localhost yuan]</code><code># touch 3 & mkdir 4 #并建立檔案3和目錄4:</code>
<code>[root@localhost ~]</code><code># ls -la yuan/</code>
<code>-rw-r--r-- 1 root yuanhh 0 10月 27 00:15 1</code>
<code>drwxr-sr-x 2 root yuanhh 6 10月 27 00:15 2</code>
<code>-rw-r--r-- 1 root root 0 10月 27 00:18 3 </code><code>#取消gid後,重新建立的檔案:</code>
<code>drwxr-xr-x 2 root root 6 10月 27 00:18 4 </code><code>#取消gid後,重新建立的檔案:</code>
3、sticky_bit: 防删除位(在此目錄下各個使用者建立的檔案和目錄隻有他自己可以删除,其他使用者不能删除)
在linux下tmp就是一個sticky_bit的檔案:
3.1:那麼如何給某個目錄添加sticky_bit的權限:
格式: chmod o+t dir #給某個目錄增加t權限:
[root@localhost ~]# ls -ld /tmp/
drwxrwxrwt. 13 root root 4096 10月 26 21:49 /tmp/
9
10
11
12
13
<code>[root@localhost ~]</code><code># su - yuanhh #首先我們全切換都普通使用者yuanhh:</code>
<code>[yuanhh@localhost tmp]$ </code><code>touch</code> <code>1 & </code><code>mkdir</code> <code>2 </code><code>#并建立檔案1和目錄2.</code>
<code>[root@localhost ~]</code><code># su - user1 #然後切換到普通使用者user1.</code>
<code>[user1@localhost tmp]$ </code><code>mkdir</code> <code>3 & </code><code>touch</code> <code>4 </code><code>#并建立檔案4和目錄3.</code>
<code>[user1@localhost tmp]$ </code><code>ls</code> <code>-la</code>
<code>-rw-rw-r-- 1 yuanhh yuanhh 0 10月 27 00:27 1 </code><code>#使用者yuanhh建立的檔案</code>
<code>drwxrwxr-x 2 yuanhh yuanhh 6 10月 27 00:27 2 </code><code>#使用者yunhh建立的檔案</code>
<code>drwxrwxr-x 2 user1 user1 6 10月 27 00:28 3 </code><code>#使用者user1建立的檔案 </code>
<code>-rw-rw-r-- 1 user1 user1 0 10月 27 00:28 4 </code><code>#使用者user1建立的檔案</code>
<code>[user1@localhost tmp]$ </code><code>rm</code> <code>-fr 1 </code><code>#然後在user1使用者下,無法1檔案。</code>
<code>rm</code><code>: 無法删除</code><code>"1"</code><code>: 不允許的操作</code>
<code>[user1@localhost tmp]$ </code><code>rm</code> <code>-fr 2 </code><code>#然後在user1使用者下,無法2目錄。</code>
<code>rm</code><code>: 無法删除</code><code>"2"</code><code>: 不允許的操作</code>
3.2:那麼如何取消sticky_bit的權限:
格式:chmod o-t dir #取消目錄的stick_bit的權限:
<code>[root@localhost ~]</code><code># chmod o-t /tmp/</code>
二、硬連結和軟連接配接:
硬連接配接的作用是允許一個檔案擁有多個有效路徑名,這樣使用者就可以建立硬連接配接到重要檔案,以防止“誤删”的功能。隻删除一個連接配接并不影響節點本身和其它的連接配接,隻有當最後一個連接配接被删除後,檔案的資料塊及目錄的連接配接才會被釋放。也就是說,檔案真正删除的條件是與之相關的所有硬連接配接檔案均被删除。
硬連結等于複制了一份屬性資訊:相當于多個檔案有了同一個inode的多張皮,等于多個檔案使用同一個inode資訊,它們之間互相的為硬連結檔案:
可以删除源檔案後,硬連結不受影響:
注意:不會占雙份的空間,因為隻有一個inode.
目錄不支援硬連結:
不支援跨分區連結: 因為不同的分區有自己inode體系,inode不能重複:
硬連結可由指令 ln 建立,如:
ln ln /root/1 /tmp/2
2、軟連結又稱之為符号連接配接(Symbolic Link)。軟連結檔案類似于Windows的快捷方式。它實際上是一個特殊的檔案。在符号連接配接中,檔案實際上是一個文本檔案,其中包含的有另一檔案的位置資訊。
軟連接配接檔案删除源檔案會影響檔案本身:
如下圖:相當于在這個檔案裡存了另外一個檔案的路徑:常用在/lib64/下居多,以粉綠色顯示:
[root@localhost ~]# ls -l /bin
lrwxrwxrwx. 1 root root 7 10月 16 22:16 /bin -> usr/bin
連結檔案大小與後面的路徑有關系,
那麼如何做軟連接配接了:如下:
ln -s 源連接配接檔案 目标檔案(不存在)
ln <code>-s old.</code><code>dir</code> <code>soft.link.</code><code>dir</code>
如下實驗:我們把yum.log連結到/root/下的111目錄:
[root@localhost tmp]# ln -s /tmp/yum.log /root/111/yum1.log
[root@localhost tmp]# ls -l /root/111/
lrwxrwxrwx 1 root root 12 12月 21 14:38 yum1.log -> /tmp/yum.log
建議使用寫成絕對路徑的方式,不然容易出現問題:
軟連接配接:可用于工作中解決磁盤占用 空間的問題:
删除軟連結并不影響被指向的檔案,但若被指向的原檔案被删除,則相關軟連接配接就變成了死連結.
注意:硬連結不能連結目錄,不能跨分區連接配接:
本文轉自 芬野 51CTO部落格,原文連結:http://blog.51cto.com/yuanhaohao/2052943,如需轉載請自行聯系原作者