首頁 > 軟體

Linux特殊許可權詳述

2020-06-16 18:04:57

   Linux引入suid、sgid、sticky這三種特殊許可權,能夠更加方便、有效和安全地控制檔案。

    當在一個目錄或檔案上加入suid特殊許可權時,如過原來目錄或檔案的屬主具有x(執行)許可權,就會用小寫的s來替代x;如果原來檔案或目錄不具有x(執行)許可權,就會用大寫的S來代替x。

同樣,sgid和suid相同,如過原來目錄或檔案的屬組具有x(執行)許可權,就會用小寫的s來替代x;如果原來檔案或目錄不具有x(執行)許可權,就會用大寫的S來代替X。

    同樣,如果在一個檔案或目錄上加入sticky許可權時,若原檔案或目錄的其他使用者有x(可執行)許可權時,就用小寫t代替x;如果原檔案或目錄沒有x許可權時,就用大寫T替代x許可權。下例說明。

    可以chmod的字元或數位的方式修改特殊許可權,下例以數位方式實現。

 # -rw-r--r-- 1 root root 0 Nov  6 07:40 test1  ugo都沒執行許可權
# chmod 7644 test1                            原許可權是644,都加上特殊許可權
# -rwSr-Sr-T 1 root root 0 Nov  6 07:43 test1  屬主、屬組、其他使用者執行許可權變為S、S、T.
 
# -rwxr-xr-x 1 root root 0 Nov  6 07:43 test2  ugo都有執行許可權
# chmod 7755 test2                            原許可權是655,都加上特殊許可權
# -rwsr-sr-t 1 root root 0 Nov  6 07:49 test2  屬主、屬組、其他使用者執行許可權變為s、s、t.
 
特殊許可權對可執行檔案的作用:
suid特殊許可權是以可執行檔案的所有者的許可權來執行這一檔案,不是以執行者的許可權執行該命令。
sgid特殊許可權是以可執行檔案的群組的許可權來執行這一檔案。下例說明:
ls -l /bin/ping
-rwsr-xr-x 1 root root 35832 Apr 24  2009 /bin/ping
可見ping命令有suid特殊許可權。ping可以測試網路是否連通。切換到yaoyao使用者,ping一下可見網路確實連通。
[yaoyao@localhost test2]# ping www.baidu.com -c4
PING www.linuxidc.com (61.135.169.121) 56(84) bytes of data.
64 bytes from 61.135.169.121: icmp_seq=1 ttl=47 time=10.0 ms
64 bytes from 61.135.169.121: icmp_seq=2 ttl=46 time=14.3 ms
64 bytes from 61.135.169.121: icmp_seq=3 ttl=46 time=17.7 ms
64 bytes from 61.135.169.121: icmp_seq=4 ttl=46 time=23.9 ms
 
--- www.linuxidc.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3000ms
rtt min/avg/max/mdev = 10.090/16.539/23.938/5.067 ms
切換到root使用者,用chmod命令去掉ping命令的suid許可權,再切換到yaoyao使用者,測試一下是否能ping通。
# chmod u-s /bin/ping
# ls -l /bin/ping
# -rwxr-xr-x 1 root root 35832 Apr 24  2009 /bin/ping
$ $ ping www.baidu.com
  ping: icmp open socket: Operation not permitted
這次就無法ping通,由此可見,suid特殊許可權是以可執行檔案的所有者的許可權來執行這一檔案,不是以執行者的許可權執行該命令。
 
特殊許可權對目錄的作用:
在一個目錄上設定了sticky特殊許可權,只有檔案的所有者和使用者才能刪除該目錄的檔案,而不理會屬組和其他使用者的寫許可權。
在一個目錄上設定sgid特殊許可權,則只要是同組成員,都可以在此目錄檢視、建立、刪除檔案。
經常會對目錄設定sticky和suid許可權以方便管理。即同組成員可以檢視和寫入本目錄下的各個檔案,卻不能刪除。如下:
首先建立兩個使用者xiaoyao和linuxidc用於測試,再建立一個house目錄。建立一個love分組,於是xiaoyao和linuxidc便相愛了...將這對戀人xiaoyao和linuxidc加入love分組,house目錄屬組設定為love,再給house目錄設定sgid和sticky這兩個特殊許可權。
 
# useradd xiaoyao
# useradd linuxidc
# mkdir house
# groupadd love
 
將xiaoyao和linuxidc加入love組內。
# usermod -G love xiaoyao
# usermod -G love linuxidc 
 
#id xiaoyao;id linuxidc 
 uid=503(xiaoyao) gid=504(xiaoyao) groups=504(xiaoyao),506(love) context=root:system_r:unco nfined_t:SystemLow-SystemHigh
 uid=504(linuxidc) gid=505(linuxidc) groups=505(linuxidc),506(love) context=root:system_r:u nconfined_t:SystemLow-SystemHigh    可以看到使用者xiaoyao和linuxidc都在love組內。
 
將house目錄屬組改為love組
# chown :love house
# ls -l
  drwxr-xr-x 2 root love 4096 Nov  6 09:34 house
 
新增sgid和sticky特殊許可權,並且屬組具有寫許可權(屬組內使用者可以建立檔案,否則不能)。
# chmod 3775 house
  drwxr-sr-t 2 root love 4096 Nov  6 09:34 house
 
切換到使用者linuxidc,並建立檔案xiaoming,寫入一句話"I love you"
$ echo "I love you xiaoyao." > linuxidc 
 
切換到使用者xiaoyao,建立檔案xiaoyao,且寫入"Me too."
$ echo "Me too" > xiaoyao
 
檢視house目錄內容,可發現所建立檔案屬組都是love。
ls -l
 -rw-rw-r-- 1 linuxidc love 19 Nov  6 09:40 linuxidc 
 -rw-rw-r-- 1 xiaoyao  love  6 Nov  6 09:41 xiaoyao
 
使用者xiaoyao嘗試刪除house目錄下的linuxidc,這時提示不允許,但可以寫入,這就是共用資訊吧。
[xiaoyao@localhost house]$ rm linuxidc
rm: cannot remove `linuxidc': Operation not permitted
$ echo "Baby." >> linuxidc
$ cat linuxidc 
  Me too.
  Baby.

Linux ACL許可權規劃:getfacl,setfacl使用 http://www.linuxidc.com/Linux/2013-07/88049.htm

Linux許可權補充:rwt rwT rws rwS 特殊許可權 http://www.linuxidc.com/Linux/2013-07/87537.htm

Linux使用者及使用者組許可權 http://www.linuxidc.com/Linux/2013-05/84980.htm

Linux三個特殊許可權 setuid setgid stick bit http://www.linuxidc.com/Linux/2013-08/88587.htm


IT145.com E-mail:sddin#qq.com