setuid-setgid-sticky-bit

redhouser發表於2012-11-14

特殊許可權設定:setuid bit,setgid bit,sticky bit

VERSION:
[root@bnet95 ~]# uname -a
Linux bnet95 2.6.18-164.el5xen #1 SMP Thu Sep 3 04:47:32 EDT 2009 i686 i686 i386 GNU/Linux

1,setuid bit (octal 4000),用於檔案
*設定使檔案在執行階段具有檔案所有者的許可權(預設為程式執行者). 典型的檔案是 /usr/bin/passwd. 如果一般使用者執行該檔案, 則在執行過程中, 該檔案可以獲得root許可權, 從而可以更改使用者的密碼.
*該功能類似於Oracle中PL/SQL的invoker right 和 definer right,只不過預設值相反。
*通常該許可權僅用於設定一些superuser使用者下的程式。當普通使用者執行由root設定setuid的程式時,該程式以root使用者許可權訪問那些普通使用者無法訪問的檔案與目錄。

比如:
[root@bocnet95 ~]# ls -lrt /bin|grep rws
-rwsr-xr-x 1 root root   38936 2009-09-04 umount
-rwsr-xr-x 1 root root   58324 2009-09-04 mount
-rwsr-xr-x 1 root root   23960 2009-09-04 su
-rwsr-xr-x 1 root root   31244 2009-09-27 ping6
-rwsr-xr-x 1 root root   35832 2009-09-27 ping

[root@bocnet95 ~]# ls -lrt /usr/bin|grep rws
-rwsr-xr-x 1 root root       43976 2007-01-06 at
-rwsr-xr-x 1 root root       22984 2007-01-07 passwd
-rwsr-sr-x 1 root root      315416 2009-02-27 crontab
-rwsr-xr-x 1 root root       24588 2009-03-04 newgrp
-rwsr-xr-x 1 root root       51512 2009-03-04 gpasswd
-rwsr-xr-x 1 root root       46972 2009-03-04 chage
-rwsr-xr-x 1 root root        6604 2009-06-26 kpac_dhcp_helper
-rwsr-xr-x 1 root root        5812 2009-06-26 kgrantpty
-rws--x--x 1 root root       19096 2009-09-04 chsh
-rws--x--x 1 root root       17900 2009-09-04 chfn
-rws--x--x 1 root root     1890084 2009-09-04 Xorg
-rwsr-xr-x 1 root root        8908 2009-09-22 rsh
-rwsr-xr-x 1 root root       13108 2009-09-22 rlogin
-rwsr-xr-x 1 root root       18608 2009-09-22 rcp

*設定辦法:
chmod u+s program

 

2,setgid bit (octal 2000),,用於目錄
*該許可權只對目錄有效. 目錄被設定該位後, 任何使用者在此目錄下建立的檔案都具有和該目錄所屬的組相同的組.
*該功能可以用於一個組下的多個使用者間的共享目錄,所有使用者可以訪問所有檔案,而與使用者所屬主組無關
*設定辦法:
chmod g+s dir


3,sticky bit (octal 1000),用於目錄
*可以理解為防刪除位,阻止使用者刪除、重新命名,除非該使用者是目錄的屬組、檔案所有者、超級使用者
*場用於共享目錄,如/tmp

[root@bocnet95 ~]# ls -lrt /
total 166
drwxr-xr-x   2 root   root      4096 Mar 10  2009 srv
drwxr-xr-x   2 root   root      4096 Mar 10  2009 mnt
drwx------   2 root   root     16384 May 31  2010 lost+found
drwxr-xr-x   2 root   root      4096 May 31  2010 selinux
drwxr-xr-x  14 root   root      4096 May 31  2010 usr
drwxr-xr-x   4 root   root      1024 May 31  2010 boot
drwxr-xr-x  26 root   root      4096 May 31  2010 var
drwxr-xr-x   3 root   root      4096 May 31  2010 u01
drwxr-xr-x  13 root   root     12288 May 31  2010 lib
drwxr-xr-x   2 root   root     12288 May 31  2010 sbin
drwxr-xr-x   2 root   root      4096 May 31  2010 bin
drwxr-xr-x   3 oracle oinstall  4096 Jun  2  2010 u02
drwxr-xr-x   4 root   root      4096 Jul  8  2010 opt
drwxr-xr-x   2 root   root      4096 Aug  6  2010 media
dr-xr-xr-x 342 root   root         0 Oct 23  2012 proc
drwxr-xr-x  12 root   root         0 Oct 23  2012 sys
drwxr-xr-x   2 root   root         0 Oct 23  2012 misc
drwxr-xr-x   2 root   root         0 Oct 23  2012 net
drwxr-xr-x  12 root   root      3980 Oct 23  2012 dev
drwxr-x---  27 root   root      4096 Sep 26 17:25 root
drwxr-xr-x 119 root   root     12288 Sep 29 10:11 etc
drwxr-xr-x   9 root   root      4096 Sep 29 10:12 home
drwxrwxrwt  12 root   root      4096 Sep 30 09:20 tmp
drwxr-xr-x   3 root   root      4096 Jun 28  2015 nosql

*設定辦法:
chmod +t dir


4,下面說一下如何操作這些標誌:
操作這些標誌與操作檔案許可權的命令是一樣的, 都是 chmod. 有兩種方法來操作,
1) chmod u+s temp -- 為temp檔案加上setuid標誌. (setuid 只對檔案有效)
chmod g+s tempdir -- 為tempdir目錄加上setgid標誌 (setgid 只對目錄有效)
chmod o+t temp -- 為temp檔案加上sticky標誌 (sticky只對檔案有效)
2) 採用八進位制方式. 對一般檔案透過三組八進位制數字來置標誌, 如 666, 777, 644等. 如果設定這些特殊標誌, 則在這組數字之外外加一組八進位制數字. 如 4666, 2777等. 這一組八進位制數字三位的意義如下,
abc
a - setuid位, 如果該位為1, 則表示設定setuid
b - setgid位, 如果該位為1, 則表示設定setgid
c - sticky位, 如果該位為1, 則表示設定sticky
設定完這些標誌後, 可以用 ls -l 來檢視. 如果有這些標誌, 則會在原來的執行標誌位置上顯示. 如
rwsrw-r-- 表示有setuid標誌
rwxrwsrw- 表示有setgid標誌
rwxrw-rwt 表示有sticky標誌
那麼原來的執行標誌x到哪裡去了呢? 系統是這樣規定的, 如果本來在該位上有x, 則這些特殊標誌顯示為小寫字母 (s, s, t). 否則, 顯示為大寫字母 (S, S, T)
這三個許可權的數字位可以這麼理解
[root@server3 test]# 1 1 1
[root@server3 test]# rw s rws rwt
[root@server3 test]#
[root@server3 test]# SUID SGID Sticky
所以,可以得出
chmod 4777是設sid
chmod 2777是設定gid
chmod 1777是設sticky
常用操作
找出所有危險的目錄(設定目錄所有人可讀寫卻沒有設定sticky位的目錄)
find / -perm -0007 -type d
找出所有設定了suid的檔案
find / -perm -4000 -type f            

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18922393/viewspace-749169/,如需轉載,請註明出處,否則將追究法律責任。