setuid-setgid-sticky-bit
特殊許可權設定: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/,如需轉載,請註明出處,否則將追究法律責任。