1. 程式人生 > >權限分析之SUID、SGID、sticky

權限分析之SUID、SGID、sticky

linux、網絡

SUID

UID我們都知道是用戶標識,可以使用命令查看當前用戶id

id -u username  //顯示當前用戶的id,其中0表示管理員(一般為root)


/etc/shadow文件。對任何人都不開放權限,除了root用戶

[[email protected] ~]#ll /etc/shadow
----------. 1 root root 1309 Jul 29 11:32 /etc/shadow //rwx權限全部為空


我們以普通用戶身份修改密碼時,會用到passwd命令,我們都知道shadow是專門存放用戶密碼的地方,普通用戶根本沒有權限進入。

那麽問題來了,既然shadow文件無法對普通用戶開放,那為什麽我們還能夠修改本用戶密碼呢?

這就要用到SUID的功能了,我們來看passwd這個程序文件

[[email protected] app]#ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd //在屬主對應權限中有個s權限


s權限,作用就是當某一用戶執行調用passwd這個程序時,其身份會臨時切換為本程序所屬主,也就是root,然後再以root身份執行此程序

舉例說明:

當用戶wang想修改自己的密碼,會執行passwd命令,這條命令對應的其實是一份文件/usr/bin/passwd,而此文件具有s權限,所以會將普通用戶wang的身份臨時切換成root,

然後再以root身份來對shadow文件進行修改,命令執行結束,root切換回普通用戶wang的身份。

[[email protected] ~]$ls -l /etc/shadow
----------. 1 root root 1405 Jul 29 16:01 /etc/shadow //密碼修改完成之後,我們會看到shadow文件時間更新了,說明此文件已經被修改了


SUID的這個特性只是應用在二進制可執行程序上,我們平時接觸的文件、目錄不會出現所屬主具有s權限的

SUID只能在文件所有者權限範圍做修改,要想修改文件所屬組對應權限,可以參考SGID


SGID

SGID跟SUID功能有些相似,在針對二進制文件時,都會臨時切換進程所有者身份,只不過SGID是將所有者身份切換到對應的組裏,然後執行組所對應的權限;

另外SGID還可以針對目錄設置,指定目錄所屬組然後將組權限加上s,表示此目錄內新建文件默認的屬組就是其一級目錄的所屬組

舉例說明

[[email protected] app]#chmod g+s dir1/  //新建目錄dir1,並將組權限加上s
[[email protected] app]#chgrp wang dir1/ //將所屬組改為wang
[[email protected] app]#ll -d dir1/
drwxr-sr-x. 2 root wang 6 Jul 29 16:34 dir1/
[[email protected] app]#touch dir1/f1
[[email protected] app]#ll dir1/f1
-rw-r--r--. 1 root wang 0 Jul 29 16:35 dir1/f1 //dir1下新建的文件f1默認所屬組就是wang
[[email protected] app]#ll -d dir1/dir2/ //在dir1下新建子目錄dir2,在dir2下新建文件f2,其所屬組都跟一級目錄一樣
drwxr-sr-x. 2 root wang 16 Jul 29 16:39 dir1/dir2/
[[email protected] app]#ll dir1/dir2/f2
-rw-r--r--. 1 root wang 0 Jul 29 16:39 dir1/dir2/f2


通過上述分析,我們知道,SGID會將一級目錄所屬組一直傳遞給其目錄下的各級文件

SGID只能在文件所屬組對應的權限範圍進行修改


sticky粘滯位

用戶創建的文件,有時候不想讓其他人修改、刪除

sticky可以幫助解決這個問題

[[email protected] tmp]$ll -d /tmp
drwxrwxrwt. 17 root root 4096 Jul 29 16:52 /tmp ///tmp目錄具有sticky位,即other對應的權限是t
[[email protected] tmp]$ll wang.txt
-rw-rw-r--. 1 wang wang 15 Jul 29 16:48 wang.txt //wang用戶創建了文件,並進行過編輯
[[email protected] tmp]$id //切換成用戶gao,然後執行刪除和修改操作,系統提示拒絕
uid=1000(gao) gid=1000(gao) groups=1000(gao) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[[email protected] tmp]$rm -f wang.txt
rm: cannot remove ‘wang.txt’: Operation not permitted
[[email protected] tmp]$echo "linux" >> wang.txt
bash: wang.txt: Permission denied


設置了sticky位的文件,只有所有者自己和root可以編輯、刪除,其他人是不能做任何修改的


我們知道文件的權限有兩種表示方法:

模式法:rwx

數字法:666

同樣SUID、SGID和sticky也有這兩中表示方法

模式法:sst

數字法:421

其中

SUID對應數字4

SGID對應數字2

sticky對應數字1


加入要修改文件f1具有SUID權限,且傳統權限位744,那麽可以這樣做

chmod 4764 f1

即f1具有的權限是rwsrw-r--

本文出自 “a_pan” 博客,請務必保留此出處http://panpangao.blog.51cto.com/10624093/1951975

權限分析之SUID、SGID、sticky