SUID權限簡介
SUID權限是Linux里的一種特殊權限,具體的體現為文件擁有者
的執行權限x
被替換為了s
。
- 只有二進制程序文件才可以設定SUID,其他類型的文件設置沒有意義。
- 在賦予SUID權限后,該文件的
執行者
僅在程序運行時將擁有該文件擁有者
的權限。 執行者
必須要擁有該文件的執行權限(x)。
如何查找Linux中具有SUID的文件?
可以用以下三個命令查找(效果差不多):
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;
下面以/usr/bin/passwd為例介紹:
Linux 系統中用戶的密碼信息被存儲在/etc/shadow
文件中,只有 root 用戶擁有權限,其他用戶沒有任何權限。
普通用戶想要修改密碼,就是要修改/etc/shadow
這個文件。這時系統提供了passwd這個命令來修改密碼,也就是/usr/bin/passwd
這個二進制文件。該文件就是一個擁有SUID的文件。
那么根據前面對SUID的介紹,普通用戶在運行passwd命令時,相當於作為該程序的執行者
,在運行passwd這個文件的時候,該用戶會具有該文件的擁有者
的權限,也就是root的權限。以此來完成了對/etc/shadow
文件的修改,也就是對自己密碼的修改。
這里我們以cat文件來實際操作一下:
cat命令通常用來查看文件內容。其權限如下圖所示:
首先我們使用root用戶創建一個測試文件:suid.txt,並使用chmod命令將其權限修改為000。
這時只有root用戶可以對該文件進行操作,使用普通用戶查看該文件會提示Permission denied。
接下來我們將賦予cat文件SUID權限,之后觀察其變化。
第一步先復制一個cat文件到當前目錄來供我們操作:
cp /bin/cat .
接下來,我們給這個文件SUID權限:
chmod u+s cat
可以看到這里擁有者權限里的x
變為了s
。
如果這里的屬主位沒有x權限,會顯示為大寫S,表示有故障(權限無效)
此時我們再切換回普通用戶,用修改后的cat文件來查看suid.txt:
可以看到,此時該用戶並沒有該文件的權限,但依然成功查看了文件內容,這就是suid權限的作用。