<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • Linux用戶與“最小權限”原則

    時間:2024-10-02 00:00:28 Linux認證 我要投稿
    • 相關推薦

    Linux用戶與“最小權限”原則

      Linux的用戶在登錄(login)之后,就帶有一個用戶身份(user ID, UID)和一個組身份(group ID, GID)。在Linux文件管理背景知識中,我們又看到,每個文件又有九位的權限說明,用來指明該文件允許哪些用戶執行哪些操作(讀、寫或者執行)。Linux用戶與“最小權限”原則關系如何呢?下面跟yjbys小編一起來學習一下吧!

      一般來說,Linux的用戶信息保存在/etc/passwd中,組信息保存在/etc/group中,文件的每一行代表一個用戶/組。早期的Linux將密碼以名碼的形式保存在/etc/passwd中,而現在則多以暗碼(也就是加密之后的形式)的形式保存在/etc/shadow中。將密碼存儲在/etc/shadow中提高了密碼的安全性,因為/etc/passwd允許所有人查看,而/etc/shadow只允許root用戶查看。

      進程權限

      但是,在Linux中,用戶的指令是在進程的范圍內進行的。當我們向對某個文件進行操作的時候,我們需要在進程中運行一個程序,在進程中對文件打開,并進行讀、寫或者執行的操作。因此,我們需要將用戶的權限傳遞給進程,以便進程真正去執行操作。例如我們有一個文件a.txt, 文件中為一個字符串:

      Hello world!

      我以用戶Vamei的身份登錄,并在shell中運行如下命令:

      $cat a.txt

      整個運行過程以及文件讀取如下:

      我們可以看到,整個過程中我們會有兩個進程,一個是shell本身(2256),一個是shell復制自身,再運行/bin/cat (9913)。圖中的fork, exec, PID可參看Linux進程基礎。第二個進程總共對文件系統進行了兩次操作,一次是執行(x)文件/bin/cat,另外一次是讀取(r)文件a.txt。使用$ls -l 查看這兩個文件的權限:

      $ls -l /bin/cat

      -rwxr-xr-x 1 root root 46764 Apr 1 2012 /bin/cat

      $ls -l a.txt

      -rw-rw-r-- 1 Vamei Vamei 14 Oct 7 09:14 a.txt

      從上面可以看到(參考Linux文件管理背景知識),/bin/cat讓所有用戶都享有執行的權利,而Vamei作為a.txt的擁有者,對a.txt享有讀取的權利。

      讓我們進入更多的細節 (The devil is in the details)。在進行這兩次操作的時候,盡管用戶Vamei擁有相應的權限,但我們發現,真正做工作的是進程9913。我們要讓這個進程得到相應的權限。實際上,每個進程會維護有如下6個ID:

      真實身份: real UID, real GID

      有效身份: effective UID, effective GID

      存儲身份:saved UID, saved GID

      其中,真實身份是我們登錄使用的身份,有效身份是當該進程真正去操作文件時所檢查的身份,存儲身份較為特殊,我們等一下再深入。當進程fork的時候,真實身份和有效身份都會復制給子進程。大部分情況下,真實身份和有效身份都相同。當Linux完成開機啟動之后,init進程會執行一個login的子進程。我們將用戶名和密碼傳遞給login子進程。login在查詢了/etc/passwd和/etc/shadow,并確定了其合法性之后,運行(利用exec)一個shell進程,shell進程真實身份被設置成為該用戶的身份。由于此后fork此shell進程的子進程都會繼承真實身份,所以該真實身份會持續下去,直到我們登出并以其他身份再次登錄(當我們使用su成為root的時候,實際上就是以root身份再次登錄,此后真實身份成為root)。

      最小權限原則

      每個進程為什么不簡單地只維護真實身份,卻選擇費盡麻煩地去維護有效身份和存儲身份呢?這牽涉到Linux的“最小特權”(least priviledge)的原則。Linux通常希望進程只擁有足夠完成其工作的特權,而不希望賦予更多的特權給它。從設計上來說,最簡單的是賦予每個進程以super user的特權,這樣進程就可以想做什么做什么。然而,這對于系統來說是一個巨大的安全漏洞,特別是在多用戶環境下,如果每個用戶都享有無限制的特權,就很容易破壞其他用戶的文件或者系統本身。“最小特權”就是收縮進程所享有的特權,以防進程濫用特權。

      然而,進程的不同階段可能需要不同的特權。比如一個進程最開始的有效身份是真實身份,但運行到中間的時候,需要以其他的用戶身份讀入某些配置文件,然后再進行其他的操作。為了防止其他的用戶身份被濫用,我們需要在操作之前,讓進程的有效身份變更回來成為真實身份。這樣,進程需要在兩個身份之間變化。

      存儲身份就是真實身份之外的另一個身份。當我們將一個程序文件執行成為進程的時候,該程序文件的擁有者(owner)和擁有組(owner group)可以被,存儲成為進程的存儲身份。在隨后進程的運行過程中,進程就將可以選擇將真實身份或者存儲身份復制到有效身份,以擁有真實身份或者存儲身份的權限。并不是所有的程序文件在執行的過程都設置存儲身份的。需要這么做的程序文件會在其九位(bit)權限的執行位的x改為s。這時,這一位(bit)叫做set UID bit或者set GID bit。

      $ls -l /usr/bin/uuidd

      -rwsr-sr-x 1 libuuid libuuid 17976 Mar 30 2012 /usr/sbin/uuidd

      當我以root(UID), root(GID)的真實身份運行這個程序的時候,由于擁有者(owner)有s位的設定,所以saved UID被設置成為libuuid,saved GID被設置成為libuuid。這樣,uuidd的進程就可以在兩個身份之間切換。

      我們通常使用chmod來修改set-UID bit和set-GID bit:

      $chmod 4700 file

      我們看到,這里的chmod后面不再只是三位的數字。最前面一位用于處理set-UID bit/set-GID bit,它可以被設置成為4/2/1以及或者上面數字的和。4表示為set UID bit, 2表示為set GID bit,1表示為sticky bit (暫時不介紹)。必須要先有x位的基礎上,才能設置s位。

      作為一個Linux用戶來說,我們并不需要特別關心上面的機制。但是,當我們去編寫一個Linux應用程序的時候,就要注意在程序中實現以上切換(有必要的前提下),以便讓我們的程序符合"最小權限"的原則,不給系統留下可能的安全隱患。

    【Linux用戶與“最小權限”原則】相關文章:

    Linux文件權限詳解06-27

    Linux權限管理基本方法10-24

    Linux權限管理基本知識大全09-03

    linux如何給文件或目錄添加apache權限11-03

    金蝶KIS軟件用戶管理及權限授權09-23

    Linux用戶/文件系統管理詳解05-10

    2016年Linux認證基礎知識:php做權限管理09-20

    unix增加用戶和切換用戶04-12

    RBAC打造通用Web權限08-19

    如何開通淘寶直播權限07-28

    主站蜘蛛池模板: 国产精品1024在线永久免费| 华人在线精品免费观看| 国产精品特级毛片一区二区三区 | 国产区精品高清在线观看 | 亚洲第一极品精品无码久久| 91精品国产福利在线观看 | 中文字幕九七精品乱码 | 国产精品亚洲аv无码播放| 久久久精品久久久久久 | 337P亚洲精品色噜噜| 无码精品国产一区二区三区免费| 国产精品麻豆入口| 2021国产成人精品国产| 无码精品视频一区二区三区 | 中文字幕乱码中文乱码51精品| 国产69精品久久久久99| freesexvideos精品老师毛多| 亚洲精品无码专区2| 久久人人超碰精品CAOPOREN| 99精品电影一区二区免费看| 99re6这里有精品热视频| 四虎国产成人永久精品免费| 免费看一级毛片在线观看精品视频 | 亚洲欧洲自拍拍偷精品 美利坚| 国产精品亚洲高清一区二区| 日韩精品在线看| 精品一区二区久久| 国产欧美日韩精品a在线观看| 最新国产精品拍自在线观看| 久久亚洲国产精品五月天婷| 国产精品欧美亚洲韩国日本久久| 老司机国内精品久久久久| 国产99精品久久| 大伊香蕉精品一区视频在线 | 精品一区二区久久久久久久网站| 国产精品亚洲片在线| 国产在线精品一区二区在线观看| 日韩精品无码一区二区三区不卡| 亚洲精品人成无码中文毛片| 亚洲国产精品激情在线观看| 日本免费精品一区二区三区|