1. 程式人生 > >特殊權限set_uid /特殊權限set_gid/特殊權限stick_bit/軟鏈接文件/硬連接文件

特殊權限set_uid /特殊權限set_gid/特殊權限stick_bit/軟鏈接文件/硬連接文件

弊端 uid 不存在 工作 命令 可執行文件 bsp ls -l 無法創建

  • 2.18 特殊權限set_uid
  • 2.19 特殊權限set_gid
  • 2.20 特殊權限stick_bit
  • 2.21 軟鏈接文件
  • 2.22 硬連接文件

特殊權限set_uid(s權限用戶user權限

[root@centos_1 ~]# ls -l /usr/bin/passwd

-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd

權限中的s 就是特殊權限 set_uid

psswd 命令支持普通用戶改自己的密碼

[root@centos_1 ~]# ls /etc/shadow

/etc/shadow

[root@centos_1 ~]# ls -l !$

ls -l /etc/shadow

---------- 1 root root 642 11月 20 20:50 /etc/shadow

/etc/shadow 是沒有權限的

psswd有set_uid權限,當普通用戶執行passwd的時候臨時有root身份的權限;

給文件設置set_uid前提文件是二進制可執行文件

切換用戶

[root@centos_1 ~]# su - xiaobo

[xiaobo@centos_1 ~]$

給ls設置set_uid權限(s權限):

root用戶下

chmod u+s /usr/bin/ls

ls -l /usr/bin/ls

[root@centos_1 xiaobo]# ls -l /usr/bin/ls

-rwxr-xr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls

[root@centos_1 xiaobo]# chmod u+s /usr/bin/ls

[root@centos_1 xiaobo]# ls -l !$

ls -l /usr/bin/ls

-rwSr-xr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls

現在ls有s權限了

切換到xiaobo用戶

su - xiaobo

ls /root

[root@centos_1 ~]# su - xiaobo

上一次登錄:一 11月 20 23:04:33 CST 2017pts/0 上

[xiaobo@centos_1 ~]$ whoami

xiaobo

在沒有給ls設置s權限之前,普通用戶是不能查看root用戶下面的文件的

[xiaobo@centos_1 ~]$ ls /root

ls: 無法打開目錄/root: 權限不夠

給ls設置s權限後是可以臨時查看root用戶下的文件:

[xiaobo@centos_1 ~]$ ls /root

11 anaconda-ks.cfg.1

[xiaobo@centos_1 ~]$ ls -l /usr/bin/ls

-rwSr-xr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls

取消set_uid(s)權限:

chmod u-s /usr/bin/ls

root@centos_1 xiaobo]# chmod u-s !$ (其中!$的意思是上一次的路徑,這裏為了方面而省略)

chmod u-s /usr/bin/ls

[root@centos_1 xiaobo]# ls -l !$

ls -l /usr/bin/ls

-rw-r-xr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls

如果沒有x執行權限就是大寫的S

-rwSr-xr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls

如果有x權限就是小寫的s

-rwsr-xr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls

其實有沒有x權限效果都是一樣的,因為s權限包含x權限。

s權限也是能給目錄設置權限的,但是沒有意義。

特殊權限set_gid(group所屬主權限g)

給ls設置g權限

[root@centos_1 xiaobo]# chmod g+s /usr/bin/ls

[root@centos_1 xiaobo]# ls -l !$

ls -l /usr/bin/ls

-rwxr-sr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls

set_gid跟set_uid權限是一樣的,只不過換了一個角色,這裏s權限的位置放到了所屬組。

這樣普通用戶臨時有了所屬主的身份。

這樣xiaobo用戶也可以查看root目錄下的內容了。

[xiaobo@centos_1 ~]$ ls -ld /root/

dr-xr-x---. 4 root root 175 11月 20 22:21 /root/

給目錄設置set_gid權限:

[root@centos_1 ~]# chmod g+s 234

[root@centos_1 ~]# ls -ld 234

drwxr-sr-x 2 root root 6 11月 20 23:45 234

更改目錄234的所屬組:

chown :xiaobo 234

[root@centos_1 ~]# chgrp xiaobo 234

[root@centos_1 ~]# ls -ld 234

drwxrwsr-x 2 root xiaobo 6 11月 20 23:49 234

在234目錄下創建文件和目錄之後,所屬組跟目錄保持一致都是xiaobo

[root@centos_1 ~]# touch 234/file

[root@centos_1 ~]# mkdir 234/xiaobo

[root@centos_1 ~]# ls -l 234/

總用量 0

-rw-r--r-- 1 root xiaobo 0 11月 20 23:52 file

drwxr-sr-x 2 root xiaobo 6 11月 20 23:57 xiaobo

取消234目錄set_gid權限後,在目錄下創建文件,文件所屬組變回root

[root@centos_1 ~]# chmod g-s 234/

[root@centos_1 ~]# touch 234/xiao

[root@centos_1 ~]# ls -l 234/

-rw-r--r-- 1 root root 0 11月 21 00:00 xiao

總結:

set_gid 不僅作用在文件上,也作用在目錄上。

作用在文件上跟set_uid作用一樣,讓普通用戶臨時擁有所屬組的身份的權限。

當作用在目錄上,在目錄下創建的子目錄和文件的所屬組跟該目錄的所屬組一樣。

特殊權限stick_bit防刪除位

權限位中有一個t權限 就是tick_bit權限(防刪除位t)

777權限。

t權限:誰的文件誰做主;

靠父級目錄決定。

用戶xiaobo 在 /tmp/下創建myfile文件

[xiaobo@centos_1 tmp]$ touch myfile

[xiaobo@centos_1 tmp]$ vi myfile

[xiaobo@centos_1 tmp]$ chmod 777 myfile

[xiaobo@centos_1 tmp]$ ls -l myfile

-rwxrwxrwx 1 xiaobo xiaobo 25 11月 21 01:27 myfile

用戶user1可以編輯/tmp/下的myfile但是不能刪除:

[user1@centos_1 tmp]$ vi myfile

[user1@centos_1 tmp]$ rm -rf myfile

rm: 無法刪除"myfile": 不允許的操作

這是因為 myfile 中t權限依賴於父級目錄/tmp/決定

總結:

stick_bit 作用是防止別人刪除自己的文件,但是root用戶可以刪除。

user1用戶在/tmp/下創建目錄user1

[user1@centos_1 tmp]$ mkdir user1

[user1@centos_1 tmp]$ chmod 777 user1/

[user1@centos_1 tmp]$ ls -ld user1/

drwxrwxrwx 2 user1 user1 6 11月 21 01:34 user1/

touch user1/1

mkdir user1/11

因為user1目錄沒有寫權限位t,所有user1目錄下的文件都可以刪除修改。

軟鏈接

ls -l /lib64/下面有很多類似的軟鏈接文件,兩者是相互依賴的,是一個文件。

lrwxrwxrwx. 1 root root 13 11月 9 15:58 p11-kit-trust.so -> libnssckbi.so

創建一個軟鏈接:左邊是一個原文件,右邊是鏈接文件

[root@centos_1 ~]# ln -s /tmp/yum.log /root/234/lianjie

查看創建的軟鏈接

[root@centos_1 ~]# ls -l !$

[root@centos_1 ~]# ls -l 234/lianjie

lrwxrwxrwx 1 root root 12 11月 21 01:59 234/lianjie -> /tmp/yum.log

軟鏈接閃爍,說明鏈接的文件不存在

lrwxrwxrwx 1 root root 12 11月 21 02:14 yum.log -> /tmp/yum.log

可以touch 創建一個yum.log

上面的都是絕對路徑,那麽相對路徑是在當前目錄下創建軟連接:

[root@centos_1 tmp]# ln -s 1.txt 11.txt

[root@centos_1 tmp]# ls -l

lrwxrwxrwx 1 root root 5 11月 21 02:08 11.txt -> 1.txt

使用相對路徑創建軟鏈接是有弊端的,當拷貝到其他機器上去,文件就鏈接不到了。所以不建議使用相對路徑。

工作實例:

當 /boot/分區下有一個xiaobo.log文件,文件不斷的寫日誌,快把boot分填滿了,這時候可以做一個軟鏈接,

將/boot/xiaobo.log鏈接到/根目錄下

這樣操作:

1.先拷貝一份/boot/xiaobo.log到根目錄下:cp /boot/xiaobo.log /xiaobo.log

2.刪除/boot/下的xiaobo.log : rm -f /boot/xiaobo.log

3.趕快做一個軟鏈接到跟目錄: ln -s /xiaobo.log /boot/xiaobo.log

這樣就是可以了。左邊是實際存在的原文件,右邊是不存在的鏈接文件。

鏈接路徑是/boot/xiaobo.log ,實際寫入的路徑是/xiaobo.log

總結:

軟鏈接就是一個快捷方式,不僅可以鏈接文件,也可以鏈接目錄,更可以跨分區鏈接。

硬鏈接

硬鏈接只支持對文件做,不支持對目錄做硬鏈接;

-rw-------. 1 xiaobo xiaobo 3360 11月 17 08:43 anaconda-ks.cfg.1

其中的1表示inode號,表示沒有相同的文件使用inode號(inode作用:記錄文件的屬性)

drwxr-xr-x 2 root root 6 11月 21 04:46 test

對於目錄,2表示有兩個文件使用了inode號,就是目錄下的.和..

[root@centos_1 ~]# ls -la test/

總用量 0

drwxr-xr-x 2 root root 6 11月 21 04:46 .

dr-xr-x---. 5 root root 201 11月 21 04:46 ..

給文件做一個硬鏈接:文件大小、時間、inode號跟原文件一樣(就是有兩個文件使用了相同的inode號)

[root@centos_1 ~]# ln 1.txt 1_hard.txt

-rw-r--r-- 2 root root 103 11月 21 04:51 1_hard.txt

-rw-r--r-- 2 root root 103 11月 21 04:51 1.txt

硬鏈接使用了相同的inode號:

[root@centos_1 ~]# ls -i

67246931 1_hard.txt 67246931 1.txt

刪除原文件,硬鏈接後的文件保持不變,軟連接就會顯示原文件不見了。

不能對目錄做硬鏈接:因為目錄是靠.和..串起來,如果做了硬鏈接這樣會亂套

[root@centos_1 ~]# ln 111/ xiaobo/

ln: "111/": 不允許將硬鏈接指向目錄

硬鏈接不占空間大小,可以對文件做多個硬鏈接。

不能跨分區做硬鏈接: 因為分區之間有獨立的inode號,boot/下有一個inode號,/根目錄下也有跟/boot分區下

相同的inode號,所以不能跨分區做硬鏈接。

[root@centos_1 ~]# ln /boot/symvers-3.10.0-693.el7.x86_64.gz /tmp/system

ln: 無法創建硬鏈接"/tmp/system" => "/boot/symvers-3.10.0-693.el7.x86_64.gz": 無效的跨設備連接

總結:

能對文件做硬鏈接,不能對目錄做硬鏈接;
不能跨分區做硬鏈接;

硬鏈接可以刪除,因為還有其他文件使用該inode

硬鏈接好比文件的一張皮,皮有多張,每一張皮都指向了相同的inode,這張皮可以刪掉,但是不能刪除所有的皮,

必須有一張皮留在身上。

特殊權限set_uid /特殊權限set_gid/特殊權限stick_bit/軟鏈接文件/硬連接文件