欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Linux用戶與最小權(quán)限原則解析

 更新時間:2017年04月13日 11:31:24   作者:Vamei  
這篇文章主要為大家解析了Linux用戶與最小權(quán)限原則,具有一定的參考價值,感興趣的小伙伴們可以參考一下

Linux的用戶在登錄(login)之后,就帶有一個用戶身份(user ID, UID)和一個組身份(group ID, GID)。在Linux文件管理背景知識中,我們又看到,每個文件又有九位的權(quán)限說明,用來指明該文件允許哪些用戶執(zhí)行哪些操作(讀、寫或者執(zhí)行)。

(參考Linux文件管理背景知識)

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

進程權(quán)限

但是,在Linux中,用戶的指令是在進程的范圍內(nèi)進行的。當(dāng)我們向?qū)δ硞€文件進行操作的時候,我們需要在進程中運行一個程序,在進程中對文件打開,并進行讀、寫或者執(zhí)行的操作。因此,我們需要將用戶的權(quán)限傳遞給進程,以便進程真正去執(zhí)行操作。例如我們有一個文件a.txt, 文件中為一個字符串:

Hello world!

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

$cat a.txt

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

 

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

$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讓所有用戶都享有執(zhí)行的權(quán)利,而Vamei作為a.txt的擁有者,對a.txt享有讀取的權(quán)利。

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

真實身份:real UID,  real GID

有效身份: effective UID,  effective GID

存儲身份:saved UID,  saved GID

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

最小權(quán)限原則

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

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

存儲身份就是真實身份之外的另一個身份。當(dāng)我們將一個程序文件執(zhí)行成為進程的時候,該程序文件的擁有者(owner)和擁有組(owner group)可以被,存儲成為進程的存儲身份。在隨后進程的運行過程中,進程就將可以選擇將真實身份或者存儲身份復(fù)制到有效身份,以擁有真實身份或者存儲身份的權(quán)限。并不是所有的程序文件在執(zhí)行的過程都設(shè)置存儲身份的。需要這么做的程序文件會在其九位(bit)權(quán)限執(zhí)行位的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

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

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

$chmod 4700 file

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

作為一個Linux用戶來說,我們并不需要特別關(guān)心上面的機制。但是,當(dāng)我們?nèi)ゾ帉懸粋€Linux應(yīng)用程序的時候,就要注意在程序中實現(xiàn)以上切換(有必要的前提下),以便讓我們的程序符合"最小權(quán)限"的原則,不給系統(tǒng)留下可能的安全隱患。給你的程序過度的權(quán)限的話,就像是吃下去下面的漢堡:

 

容易讓人吃傷的漢堡: 過度的“權(quán)限” 

總結(jié)

real/effective/saved UID/GID

saved UID/GID bit

“最小權(quán)限”原則

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Linux Shell里面生成隨機數(shù)的一些思路分析

    Linux Shell里面生成隨機數(shù)的一些思路分析

    這篇文章主要介紹了Linux Shell里面生成隨機數(shù)的一些思路分析,需要的朋友可以參考下
    2016-07-07
  • linux kernel 打印函數(shù)指針對應(yīng)的函數(shù)名方法

    linux kernel 打印函數(shù)指針對應(yīng)的函數(shù)名方法

    下面小編就為大家?guī)硪黄猯inux kernel 打印函數(shù)指針對應(yīng)的函數(shù)名方法。小編覺得挺不錯的?,F(xiàn)在就分享給大家。也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • linux memcache安裝配置方法

    linux memcache安裝配置方法

    這篇文章主要介紹了linux memcache安裝配置方法,需要的朋友可以參考下
    2014-07-07
  • 搭建阿里云ecs服務(wù)器之安裝圖形化界面的方法

    搭建阿里云ecs服務(wù)器之安裝圖形化界面的方法

    這篇文章主要介紹了搭建阿里云ecs服務(wù)器之安裝圖形化界面的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • 詳解CentOS的SVN服務(wù)器搭建與自動部署全過程

    詳解CentOS的SVN服務(wù)器搭建與自動部署全過程

    最近因為工作需要,花了一個晚上時間折騰svn,網(wǎng)上的教程太亂太雜,還有很多是錯誤的,終于搞定了,所以想著把過程記錄下來。這篇文章主要介紹了CentOS的SVN服務(wù)器搭建與自動部署全過程,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • Linux中的tcpdump命令示例詳解

    Linux中的tcpdump命令示例詳解

    這篇文章主要給大家介紹了關(guān)于Linux中tcpdump命令的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • linux(ubuntu)用戶連續(xù)N次輸入錯誤密碼進行登陸時自動鎖定X分鐘

    linux(ubuntu)用戶連續(xù)N次輸入錯誤密碼進行登陸時自動鎖定X分鐘

    這篇文章主要介紹了linux(ubuntu)用戶連續(xù)N次輸入錯誤密碼進行登陸時,自動鎖定X分鐘,需要的朋友可以參考下
    2019-09-09
  • 在 Linux 系統(tǒng)中手動滾動日志的方法

    在 Linux 系統(tǒng)中手動滾動日志的方法

    使用 logrotate 命令可以手動執(zhí)行日志滾動的操作。本文將要介紹的就是手動進行日志滾動的方法,通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-03-03
  • Linux文件系統(tǒng)之inode與軟硬鏈接詳解

    Linux文件系統(tǒng)之inode與軟硬鏈接詳解

    這篇文章討論的話題是沒有被打開的文件,文件等于文件內(nèi)容加文件屬性,沒打開的文件一定是存儲在磁盤上的,文件內(nèi)容以數(shù)據(jù)塊的形式進行存儲,文件屬性以 inode 的形式進行存儲,文中通過圖文給大家介紹的非常詳細,需要的朋友可以參考下
    2024-03-03
  • Linux之操作文件的系統(tǒng)調(diào)用

    Linux之操作文件的系統(tǒng)調(diào)用

    大家好,本篇文章主要講的是Linux之操作文件的系統(tǒng)調(diào)用,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12

最新評論