1. 程式人生 > >Linux第二周學習筆記(12)

Linux第二周學習筆記(12)

dai 二進制可執行文件 更改密碼 bsp -- roo 超級 ado conda

Linux第二周學習筆記(12)


2.18 特殊權限set_uid

set_uid:這個權限是針對二進制可執行文件,使文件在執行階段具有文件所有者的的權限。

--------------------------------------------------------------------------------------------

例如passwd命令:

[root@daizhihong01 ~]# which passwd

/usr/bin/passwd

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

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

首先我們分析不同點:/usr/bin/passwd這個文件是一個紅色的文件,-rwsr-xr-x.在它的權限位上多了一個“s”

這個“s”就是set_uid的權限:windows系統裏一個普通的用戶也是可以給自己的賬號更改密碼,在Linux系統裏passwd也是可以支持普通用戶更改自己的密碼,但是在Linux系統裏面普通用戶是不能更改密碼文件的,我們來看一下密碼文件的一個權限:

[root@daizhihong01 ~]# ls -l /etc/shadow

---------- 1 root root 677 1 30 23:11 /etc/shadow

/etc/shadow文件權限都是零,連超級用戶root都沒有權限更改,普通用戶是更加改不了密碼文件的。在

root用戶下是可以授權一個可寫的權限給這個文件那就可以直接更改了,但是普通用戶就不可能更改密碼文件的。要想讓普通用戶更改自己的密碼但是這個密碼文件又不能讓它寫,這個就是比較矛盾的地方。那我們怎麽來實現這個問題呢?為了能夠實現這個問題我們就要使用特殊權限set_uid來完解決普通用戶更改密碼的問題,set_uid特殊權限可以讓普通用戶在執行/usr/bin/passwd 命令的時候賦予普通用戶臨時擁有所有者的權限,進行密碼的更改,更改完了以後權限就會被收回。這個就是set_uid特殊權限的作用。

set_uid特殊權限:保證普通用戶臨時擁有該命令所有者的身份,使用set_uid特殊權限的文件必須是一個二進制的文件,並且是一個可執行文件。在

Linux系統當中只有/usr/bin/passwd 命令用到這個權限

----------------------------------------------------------------------------------------------

文件授權set_uid特殊權限:

ls –l /usr/bin/ls, 授予set_uid特殊權限

先查看權限:

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

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

然後切換一個普通用戶:

[root@daizhihong01 ~]# su - yngndzh1

[yngndzh1@daizhihong01 ~]$ whoami

yngndzh1(切換到yngndzh1用戶)

普通用戶查看/root/時權限不夠:

[yngndzh1@daizhihong01 ~]$ ls /root/

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

[yngndzh1@daizhihong01 ~]$ ls -ld /root/

dr-xr-x---. 3 root root 203 1 30 20:53 /root/(普通用戶是沒有權限的)

ls命令設置一個set_uid特殊權限使普通用戶臨時擁有root用戶的權限:

切換到root用戶下進行修改:

[root@daizhihong01 ~]# chmod u+s /usr/bin/ls

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

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

這時-rwsr-xr-x權限位加上了“s”

切換到yngndzh1普通用戶下運行ls命令:

[yngndzh1@daizhihong01 ~]$ ls -l /root/

總用量 12

-rwx------ 1 root root 0 1 30 20:53 123.txt

-rw-------. 1 root root 1418 1 22 08:19 anaconda-ks.cfg

-rw-r--r-- 1 root root 4358 1 29 23:24 anaconda-ks.cfg.1

[yngndzh1@daizhihong01 ~]$ ls -ld /root/

dr-xr-x---. 3 root root 203 1 30 20:53 /root/(權限依舊是普通用戶不能執行)

授權set_uid特殊權限以後就能查看/root/目錄下的內容了

去掉set_uid特殊權限:

[root@daizhihong01 ~]# chmod u-s /usr/bin/ls

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

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

[root@daizhihong01 ~]#

--------------------------------------------------------------------------------------------

[root@daizhihong01 ~]# chmod u=rws /usr/bin/ls

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

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

[root@daizhihong01 ~]#

這時變成了大“S”-rwSr-xr-x,這時因為沒有X權限,少了一個x所以就變成了一個大寫的“S”,設置成小“s”的話加入x權限即可,如下:

[root@daizhihong01 ~]# chmod u+x /usr/bin/ls

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

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

“S”和小“s”區別不大,因為我們授予ls這個命令特殊權限的時候ls這個命令本身普通戶就擁有X權限,所以執行時不受限制

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

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

---------------------------------------------------------------------------------------------

目錄授權set_uid特殊權限:

目錄是可以加入set_uid特殊權限,但是用處不大


Linux第二周學習筆記(12)