Linux上檔案的特殊許可權SUID,SGID,SBIT詳解

來源:互聯網
上載者:User

 大家都知道檔案和目錄的許可權最常見的有三個.可讀(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/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.