国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

Linux SetUID(SUID)文件特殊權限用法詳解

2024-08-27 23:56:53
字體:
來源:轉載
供稿:網友
在講解《權限位》一節時提到過,其實除了 rwx 權限,還會用到 s 權限,例如:

[root@localhost ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 22984 Jan  7  2007 /usr/bin/passwd

可以看到,原本表示文件所有者權限中的 x 權限位,卻出現了 s 權限,此種權限通常稱為 SetUID,簡稱 SUID 特殊權限。

SUID 特殊權限僅適用于可執行文件,所具有的功能是,只要用戶對設有 SUID 的文件有執行權限,那么當用戶執行此文件時,會以文件所有者的身份去執行此文件,一旦文件執行結束,身份的切換也隨之消失。

舉一個例子,我們都知道,linux 系統中所有用戶的密碼數據都記錄在 /etc/shadow 這個文件中,通過 ll /etc/shadow 命令可以看到,此文件的權限是 0(---------),也就是說,普通用戶對此文件沒有任何操作權限。

這就會產生一個問題,為什么普通用戶可以使用 passwd 命令修改自己的密碼呢?

本節開頭已經顯示了 passwd 命令的權限配置,可以看到,此命令擁有 SUID 特殊權限,而且其他人對此文件也有執行權限,這就意味著,任何一個用戶都可以用文件所有者,也就是 root 的身份去執行 passwd 命令。

Linux 系統中,絕對多數命令的文件所有者默認都是 root。

換句話說,當普通用戶使用 passwd 命令嘗試更改自己的密碼時,實際上是在以 root 的身份執行passwd命令,正因為 root 可以將密碼寫入 /etc/shadow 文件,所以普通用戶也能做到。只不過,一旦命令執行完成,普通用戶所具有的 root身份也隨之消失。

如果我們手動將 /usr/bin/passwd 文件的 SUID 權限取消,會發生什么呢?觀察如下命令的執行過程:

[root@localhost ~]# chmod u-s /usr/bin/passwd
#屬主取消SetUID權限
[root@localhost ~]# ll /usr/bin/passwd
-rwxr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd
[root@localhost ~]# su - lamp
[lamp@localhost ~]$ passwd
Changing password for user lamp.
Changing password for user.
(current) UNIX password:
#看起來沒有什么問題
New passwor:
Retype new password:
password:Authentication token manipulation error  <--鑒定令牌操作錯誤
#最后密碼沒有生效

顯然,雖然用戶有執行 passwd 命令的權限,但無修改 /etc/shadow 文件的權限,因此最終密碼修改失敗。

注意,實驗完成后,一定要再把 /usr/bin/passwd 文件的 SetUID 權限加上。

那么,普通用戶可以使用 cat 命令查看 /etc/shadow 文件嗎?答案的否定的,因為 cat 不具有 SUID 權限,因此普通用戶在執行 cat /etc/shadow 命令時,無法以  root 的身份,只能以普通用戶的身份,因此無法成功讀取。

我們可以使用下面這張圖來描述上述過程:
SUID示意圖
圖 1 SUID示意圖
由此,我們可以總結出,SUID 特殊權限具有如下特點:
  • 只有可執行文件才能設定 SetUID 權限,對目錄設定 SUID,是無效的。
  • 用戶要對該文件擁有 x(執行)權限。
  • 用戶在執行該文件時,會以文件所有者的身份執行。
  • SetUID 權限只在文件執行過程中有效,一旦執行完畢,身份的切換也隨之消失。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 依兰县| 扎鲁特旗| 富川| 繁峙县| 琼中| 凤翔县| 麻江县| 霞浦县| 伊通| 龙泉市| 鹤庆县| 平度市| 潜江市| 古田县| 富源县| 广水市| 靖西县| 普洱| 泰兴市| 临洮县| 德清县| 淮阳县| 汉中市| 曲松县| 乌兰县| 卓尼县| 元谋县| 江陵县| 建瓯市| 樟树市| 四川省| 崇仁县| 甘德县| 利川市| 南岸区| 渑池县| 英超| 和静县| 南宁市| 墨竹工卡县| 泽库县|