大家都知道檔案和目錄的許可權最常見的有三個.可讀(r)..可寫(w)..可執行(x)..它們的層級分別是4..2..1..我們有時也會發現有些檔案所屬主的許可權上帶有一個s的標誌位.目錄的所屬組上也帶有s標誌位.很多人不理解這是為什麼....下面我們舉例來看一下...
#ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 19876 Jul 17 2006 /usr/bin/passwd
這個檔案的所屬主的x標誌位上變成了s,這時稱為set uid ..簡寫就是suid..其實這個檔案屬性也沒有特殊的含義..當這個s標誌位出現在一些指令碼上時,它就有意義了...比方說我我們有一個指令碼名為sum.sh.這個指令碼的許可權如下:
-rwsrwxr-x 1 root root 117 Feb 6 20:46 sum.sh
這個指令碼的所屬主和所屬組為root.我們當然可以以root的使用者的身份執行它..我們還可以看見它的所屬主的標誌位上有個s..其他人有讀取和執行的許可權.假如我們現在有個普通使用者名稱為redhat..現在切換到redhat..執行此指令碼..表面上我們看是執行成功了..其實我們是藉助root使用者的身份來執行它..而不是redhat..這就是suid的特性....
下滿我們來說下SGID,看了上面的SUID後很容易就知道所謂SGID就是將標誌s加到gid的x標誌位上..稱為set gid.簡稱sgid..在這強調一下SUID我們一般用在檔案上.特別是一些指令碼上...SGID用在目錄上最多...比方說我以root身份建立一個目錄a.給他加上sgid許可權
#mkdir a
#chmod 2757 a
#ls -l
drwxr-srwx 2 root root 4096 Feb 6 21:09 a
因為我們給a目錄其他人所具有的許可權是可讀,可寫,可執行...當我們以redhat使用者的身份切換到另外一個終端..進入a目錄中,我們在此目錄中建立一個目錄b和一個檔案c
[redhat@station18 a]$ mkdir b
[redhat@station18 a]$ touch c
[redhat@station18 a]$ ls -l
drwxrwsr-x 2 redhat root 4096 Feb 6 21:20 b
-rw-rw-r-- 1 redhat root 0 Feb 6 21:20 c
我們可以看到目錄b和檔案c的所屬組都為root......當你將一個a目錄置為sgid許可權時候,如果其他人有讀取,執行和寫入的許可權時,別人在此目錄中建立的任何檔案和目錄的所屬組都為a目錄的所屬組..但所屬主還是自己...這個會經常的用到....有一點大家得注意...就是任何人在a目錄中建立的東西.別人都可以刪掉...這就是我們下面要講到的SBIT....
SBIT 全稱Sticky Bit.但是它只對目錄有效,對檔案卻是無效的,它的作用就是防止別人刪除對方的資料...我們舉例來說明...
1..我用root使用者登入建立一個目錄名為test
[root@station18 ~]# mkdir test
[root@station18 ~]# chmod o+w test/
[root@station18 ~]# ls -l
drwxr-xrwx 2 root root 4096 Feb 6 21:30 test
2..我們切換到redhat使用者登入一個終端,建立一個目錄a..
[redhat@station18 test]$ mkdir a
3.我們在切換到xiaoming使用者登入一個終端,建立一個目錄b...
[xiaoming@station18 test]$ mkdir b
[xiaoming@station18 test]$ ls -l
drwxrwxr-x 2 redhat redhat 4096 Feb 6 21:32 a
drwxrwxr-x 2 xiaoming xiaoming 4096 Feb 6 21:31 b
我們可以以任何使用者的身份進入test目錄發現可以刪除a和b目錄...這樣就亂了套...別人的目錄你豈能隨便刪的...這時我們就需要將test目錄加上SBIT許可權了...
[root@station18 ~]# chmod 1757 test/
[root@station18 ~]# ls -l
drwxr-xrwt 4 root root 4096 Feb 6 21:42 test
我們在用別的使用者登入進入test目錄他就刪不掉別人的資料了,系統會提示rm: cannot remove directory `a': Operation not permitted..意思是你許可權不夠....呵呵...這樣別人就沒轍了....我測試過成功的...
下面我來說一下關於SUID SGID SBIT許可權的設定...
SUID為4
SGID為2
SBIT為1
我在上面設定一些檔案或目錄的許可權你可能看不懂,,下面我來詳細講解...
假如我們有個檔案叫file.有一個目錄叫test..file它的許可權是644..test的許可權是755
1..如果我們想把file加上suid許可權的話執行此命令
#chmod 4755 file
2..如果我們想把test目錄加上sgid的話執行此命令
#chmod 2755 test/
3.如果我們想把test目錄加上sbit許可權的話執行此命令
#chmod 1755 test/
4..大家可以看得出來s與t都是取代x許可權的...
5..如果不想讓test具備SUID和SGID許可權執行此命令
#chmod 7666 file
#ls -l
-rwSrwSrwT 1 root root 0 Feb 6 21:49 file
這裡的S和T就代表空..不具備其他人執行的許可權...7666也就是說使用者,組,以及其他的人都不具備x的許可權,除了root.任何人修改不了此檔案...
這兒我用數字代替給檔案加一些 許可權....我們也可以用別的方法.比方說..我們給file檔案加上suid許可權
#chmod u=rwxs,o=rx file
給test目錄加上SGID許可權和other可讀取寫入執行許可權
#chmod g+s,o=wrx test/
給test目錄加上SBIT許可權和other可讀取寫入執行許可權
#chmod o=rwxt test/