Linux的特殊權限

  linux中除了有常見的讀寫執行三種常見的權限外,還有3中特殊的權限,分別是SUID,SGID,Striky。在瞭解特殊權限以前,先解釋一下安全上下文的概念。linux

  安全上下文:進程運行時可以訪問那些資源或文件,不取決與進程文件的屬主屬組,而取決與運行該命令的用戶身份的UID和GID,以該身份獲取各類系統資源。安全

  特殊權限位:  oop

  SUID:對一個可執行文件,不是以發起者身份來獲取資源,而是以可執行文件的屬主身份來執行,也就是說不管誰來執行這個文件,他都有文件全部者的特權。若是全部者是 root 的話,那麼執行人就有超級用戶的特權了。ui

  SUID: 運行某程序是,相應進程的屬主是程序文件自身的屬主,而不是啓動者。spa

    chmod u+s FILE
    chmod u-s FILE
    若是FILE自己原來就有執行權限,則顯示爲s;不然顯示Scode

    eg.blog

       -r--------. 1 root root 865 7月  26 02:17 /etc/shadow     -rwxr-xr-x. 1 root root 54048 6月  10 2014 /bin/cat      有一個叫hadoop的用戶,在hadoop用戶下     [hadoop@RedHat ~]$ cat /etc/shadow     cat: /etc/shadow: Permission denied     cat進程啓動起來之後,是以hadoop的身份運行的。而hadoop沒有訪問/etc/shadow這個文件的權限。因此訪問不到。     [root@RedHat data]# chmod u+s /bin/cat        [root@RedHat data]# ll /bin/cat
    -rwsr-xr-x. 1 root root 54048 Jun 10 2014 /bin/cat     再切換到hadoop用戶下,     [hadoop@RedHat ~]$ cat /etc/shadow      
    root:$6$DotZtyMiripQ.7bt$d171YFkJIRCfK/9G3A1qBLfOo4/ya6zZWxqyU5qEgaqE0hcM89Ig61:16585:0:99999:7:::     bin:*:16231:0:99999:7:::     daemon:*:16231:0:99999:7:::     adm:*:16231:0:99999:7:::     lp:*:16231:0:99999:7:::     ....     訪問成功,在設置SUID後,cat進程起來之後,不在以hadoop的身份運行,而是以cat文件自身的屬主root來運行,而root用戶對/etc/shadow具備訪問權限。

  應用場景:進程

    寫一個腳本獲取某些系統的屬性的時候,就必須給SUID權限。   ip

    [root@RedHat data]# ll /usr/bin/passwd
    -rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwdhadoop

    普通用戶也要能修改自身的登陸密碼,因此必須給SUID權限。

 

  SGID:對於一個可執行文件,不是以發起者身份來獲取資源,而是以可執行文件的屬組的身份來執行。也就是說該文件具備所屬組的特權,任意存取這個組所能使用的系統資源。若一個目錄設置了SGID,則全部被複制到這個目錄下的文件,其所屬組都會被重設爲和這個目錄同樣,除非在複製時文件時加上-p參數,才能保留原來所屬組的羣組設置。

  SGID:運行某程序是,相應進程的屬組是程序文件自身的屬主,而不是啓動者的基本組。
    chmod g+s FILE
    chmod g-s FILE

  eg.

   假設有develop, team, hadoop, hbase, hive幾個用戶要在一個公共目錄/tmp/project/下,建一個文件,相互都能訪問,相互並且能編輯。

在root用戶下 [root@RedHat tmp]# mkdir project [root@RedHat tmp]# groupadd developteam [root@RedHat tmp]# chown -R :developteam /tmp/project/ [root@RedHat tmp]# usermod -a -G developteam hadoop [root@RedHat tmp]# usermod -a -G developteam hive [root@RedHat tmp]# usermod -a -G developteam hbase [root@RedHat tmp]# id hadoop uid=1002(hadoop) gid=1002(hadoop) groups=1002(hadoop),1005(development),1007(developteam) hadoop有developteam組權限 在hadoop用戶下 [hadoop@RedHat project]$ touch a.hadoop [hadoop@RedHat project]$ ll -rw-rw-r--. 1 hadoop hadoop 0 7月  26 03:05 a.hadoop 在hbase用戶下 [hbase@RedHat project]$ touch a.hbase [hbase@RedHat project]$ ll -rw-rw-r--. 1 hadoop hadoop 0 7月  26 03:05 a.hadoop -rw-rw-r--. 1 hbase  hbase  0 7月  26 03:06 a.hbase 新建的文件a.hadoop a.hbase都是屬於用戶的基本組,相互之間沒有寫權限。 給/tmp/project目錄添加SGID權限 [root@RedHat project]# chmod g+s /tmp/project/ [root@RedHat project]# ls -ld . drwxrwsr-x. 2 root developteam 4096 Jul 26 03:06 . 在hadoop用戶下 [hadoop@RedHat project]$ touch b.hadoop [hadoop@RedHat project]$ ll -rw-rw-r--. 1 hadoop hadoop      0 7月  26 03:05 a.hadoop -rw-rw-r--. 1 hbase  hbase       0 7月  26 03:06 a.hbase -rw-rw-r--. 1 hadoop developteam 0 7月  26 03:07 b.hadoop 在hbase用戶下 [hbase@RedHat project]$ touch b.hbase [hbase@RedHat project]$ ll -rw-rw-r--. 1 hadoop hadoop      0 7月  26 03:05 a.hadoop -rw-rw-r--. 1 hbase  hbase       0 7月  26 03:06 a.hbase -rw-rw-r--. 1 hadoop developteam 0 7月  26 03:07 b.hadoop -rw-rw-r--. 1 hbase  developteam 0 7月  26 03:07 b.hbase 發現新建的文件b.hadoop和b.hbase都屬於developteam組。hadoop和hbase能夠訪問修改對方建立的文件。可是這樣又有個缺陷,那就是hadoop和hbase可以刪除對方創建的文件。

  

  STICKY:粘滯位,一般對於目錄而言。一般對於全局公共目錄來講,讓該目錄具備Sticky後,刪除只屬於本身的文件有效(可是仍能編輯修改別人的文件,除了root)。不能根據安全上下文獲取對別人的文件的寫權限。
  Sticky:在一個公共目錄,每一個均可以建立文件,刪除本身的文件,但不能刪除別人的文件;
    chmod o+t DIRECTORY
    chmod o-t DIRECTORY

給/tmp/project目錄添加Sticky權限 [root@RedHat project]# chmod o+t /tmp/project/ [root@RedHat project]# ls -ld . drwxrwsr-t. 2 root developteam 4096 Jul 26 03:15 .

  這三位特殊權限組成一個八進制的權限位s,u,t,用二進制表示:

  SUID SGID STICKY 最靠前的權限位
  000
  001
  ...
  110
  111

  chmod 1755 /backup/test,標紅的表示特殊權限位。

練習:新建一個公司的開發組developteam。有三個成員hadoop hbase hive,在工程目錄/tmp/projct下,能夠建立文件,能夠訪問修改其餘組員建立的文件,能夠
刪除本身建立的文件,可是不能刪除其餘組員建立的文件
useradd hadoop
useradd hbase
useradd hive
groupadd developteam

usermod -a -G developteam hadoop
usermod -a -G developteam hive
usermod -a -G developteam hbae

mkdir /tmp/project/
#chmod g+w /tmp/project
chomd g+s /tmp/project
drwxrwsr-x. 2 root development 4096 6月 29 23:10 /tmp/project/
chomd o+t /tmp/project
drwxrwsr-t. 2 root development 4096 6月 29 23:10 /tmp/project/

su hbase
cd /tmp/project
touch a.habse
ls -l a.habse
-rw-rw-r--. 1 hbase development 0 6月 29 23:10 a.hbase

su hadoop
cd /tmp/project
touch a.hadoop
ls -l a.hadoop
-rw-rw-r--. 1 hadoop development 0 6月 29 23:10 a.hadoop

相關文章
相關標籤/搜索