CentOS系統特殊許可權詳解整理

來源:互聯網
上載者:User

CentOS系統特殊許可權詳解整理

1.什麼是特殊許可權?

我們知道許可權有r,w,x。其實除了這三個,還有特殊許可權。比如:

[root@localhost~]#ls-l/usr/bin/passwd -rwsr-xr-x1rootroot22960Jul172006/usr/bin/passwd

可以發現許可權位,有個s。特殊許可權有如下3種:

SUID

SGID

STICKY

2.關於suid

我們知道linux有一個進程安全模型的概念,比如Tom執行passwd來進行修改密碼:

第一,注意到passwd的許可權為:

[hadoop@localhost ~]$ ls -l `which passwd`

-rwsr-xr-x 1 root root 22960 Jul 17 2006 /usr/bin/passwd

第二,注意到Tom不是root使用者,也不屬於root組。

我們先不考慮什麼特殊許可權s。很顯然,此時Tom只能以other(r-x)來運行passwd。Tom可以發起一個進程,這個進程是passwd,想修改自己的密碼。

第三,使用者Tom執行完passwd修改密碼,其實就是儲存至/etc/shadow中,下面我們看看/etc/shadow檔案的許可權情況。

[hadoop@localhost ~]$ ls -l /etc/shadow

-r-------- 1 root root 2713 Jun 13 16:34 /etc/shadow

[hadoop@localhost ~]$

那個屬於Tom的修改密碼的進程應該要去修改/etc/shadow檔案,但是根據上面的/etc/shadow的許可權,除了root使用者外,誰都不可以修改的!也就是說,根據進程安全模型,普通使用者根本無法修改密碼!但事實上,是可以修改的。原因就在於那個特殊許可權s。

也就是說,suid表示運行某程式時,相應進程的屬主是程式檔案自身的屬主,而不是啟動者。也就是說普通使用者去執行passwd修改密碼,其實是發起了一個進程,這個進程的屬主是root使用者,那麼很顯然就可以修改shadow這個影子檔案了。

3.關於sgid

根據suid的理解,可知sgid表示運行某程式時,相應進程的屬組是程式檔案自身的屬組,而不是啟動者的基本組。可以舉例分析:

第一:root使用者建立了一個項目目錄

[root@localhost /]#

[root@localhost /]# ls -ld /project/cma

drwxrwxr-x 2 root develop 4096 Jun 14 22:14 /project/cma


第二:項目群組成員java01,java02,...均屬於develop組(他們的附加組),也就是說他們對/project/cma具有rwx許可權。

[java02@localhost cma]$ ls -l

total 8

-rw-rw-r-- 1 java01 java01 0 Jun 14 22:24 01.java

-rw-rw-r-- 1 java02 java02 0 Jun 14 22:25 02.java

上面看到他們可以在/project/cma中建立檔案,根據以前的理論:【誰建立的檔案,檔案的屬主就是誰,屬組就是他的基本組】,上面的沒有問題。但是,我們希望這些項目群組成員之間可以相互編輯其他人的檔案,該如何做呢?

第三:由於項目群組成員java02,並不屬於java01的私人組,顯然java02隻對01.java具有r--許可權,不可以編輯。此時我們可以使用sgid,來改變預設的這種行為~

[root@localhost cma]# pwd

/project/cma

[root@localhost cma]# chmod -R g+s /project/cma

[root@localhost cma]# ls -ld

drwxrwsr-x 2 root develop 4096 Jun 14 22:25 .

[root@localhost cma]#

注意了,出現了特殊許可權位s,但是有時候可能會顯示S。【如果是s說明這個許可權位上以前是具有x許可權的】

第四:利用sgid後,以後我們的項目群組成員便可以在此目錄下編輯其他成員的檔案了。

[java02@localhost cma]$ ls -l

total 16

-rw-rwSr-- 1 java01 java01 0 Jun 14 22:24 01.java

-rw-rw-r-- 1 java01 develop 0 Jun 14 22:33 01.txt

-rw-rwSr-- 1 java02 java02 0 Jun 14 22:25 02.java

-rw-rw-r-- 1 java02 develop 0 Jun 14 22:33 02.txt

[java02@localhost cma]$

也就是說利用sgid可以幫我們達到這樣的目的:

在目錄下建立的檔案的屬組不在是使用者的基本組,而是目錄的屬組。

4.關於sticky

此時此刻,我們的項目群組成員已經可以相互編輯/project/cma下面的檔案了,但是有個要求:我們希望使用者只能刪除自己的檔案,而不可以刪除別人的檔案。這就要使用sticky了。

[root@localhost cma]# chmod -R o+t /project/cma

[java01@localhost cma]$ id

uid=5016(java01) gid=5016(java01) groups=5016(java01),5018(develop) context=root:system_r:unconfined_t:SystemLow-SystemHigh

[java01@localhost cma]$ rm 02.txt

rm: cannot remove `02.txt': Operation not permitted


5.串聯

還記得umask嗎,umask其實就是一個XYZW,四位元,其中X表示的就是suid/sgid/striky。

chmod xyzw file,其實同理。

000 nothing

001 only striky

010 only sgid

100 only suid

......

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.