在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux用戶身份與進程權限詳解

馬哥Linux運維 ? 來源:博客園sparkdev ? 2024-10-23 11:41 ? 次閱讀

在學習 Linux 系統(tǒng)權限相關的主題時,我們首先關注的基本都是文件的 ugo 權限。ugo 權限信息是文件的屬性,它指明了用戶與文件之間的關系。但是真正操作文件的卻是進程,也就是說用戶所擁有的文件訪問權限是通過進程來體現(xiàn)的。本文主要介紹進程的權限,并通過示例解釋用戶身份與進程權限之間的關系。說明:本文的演示環(huán)境為 ubuntu 16.04。

基本概念

用戶
對于支持多任務的 Linux 系統(tǒng)來說,用戶就是獲取資源的憑證。

權限
權限用來控制用戶對計算機資源(CPU、內存、文件等)的訪問,一般會分為認證和授權兩步。比如用戶先經(jīng)過認證機制(authentication)登錄系統(tǒng),然后由授權系統(tǒng)(authorization)對用戶的操作進行授權。

進程
進程是任何支持多道程序設計的操作系統(tǒng)中的基本概念。通常把進程定義為程序執(zhí)行時的一個實例。因此,如果有 10 個用戶同時運行 vi,就會有 10 個獨立的進程(盡管它們共享同一份可執(zhí)行代碼)。
實際上,是進程在幫助我們完成各種任務。進程就是用戶訪問計算機資源的代理,用戶執(zhí)行的操作其實是帶有用戶身份信息的進程執(zhí)行的操作。

進程權限
既然是進程在為用戶執(zhí)行具體的操作,那么當用戶要訪問系統(tǒng)的資源時就必須給進程賦予權限。也就是說進程必須攜帶發(fā)起這個進程的用戶的身份信息才能夠進行合法的操作。

從登陸過程觀察進程攜帶的用戶身份信息

在 Linux 系統(tǒng)啟動后,init 系統(tǒng)會 fork 出子進程執(zhí)行 /sbin/getty 程序等待用戶登錄。當用戶進行登錄操作時,該子進程通過 exec 函數(shù)開始執(zhí)行 /bin/login 程序(此時該進程已經(jīng)變成了 login 進程)。由 login 進程驗證我們的用戶名和密碼并查詢 /etc/passwd 和 /etc/shadow 確定其合法性。如果是合法的用戶,該進程再次通過 exec 函數(shù)執(zhí)行用戶的默認 shell 程序,此時的 login 進程就變成了 shell 進程(筆者機器上是 bash 進程)。并且該 shell 進程的有效身份被設置成為該用戶的身份,之后 fork 此 shell 進程的子進程都會繼承該有效身份。我們可以通過下圖來理解用戶從 tty 登錄系統(tǒng)的過程(此圖來自互聯(lián)網(wǎng)):

e1b32790-9081-11ef-a511-92fbcf53809c.png

上圖描述了 init 進程、getty 進程、login 進程和 shell 進程的交互。
簡單點說就是:用戶登錄后, shell 進程的有效用戶就是該用戶。下面我們來了解下進程的用戶信息。

進程的 real user id、effective user id 和 saved set user id

通過 cat /proc/status 命令,我們可以查看到進程所屬的用戶和組相關的信息:

e1cf933a-9081-11ef-a511-92fbcf53809c.png

通過 man proc 可以查詢到第一行的四個數(shù)字分別是 real user id, effective user id, saved set user id 和 filesystem UID,第二行則是對應的組 ID。這里我們只介紹第一行中的前三個 ID,即 real user id, effective user id 和 saved set user id。

real user id
real user id 是執(zhí)行進程者的 user id,一般情況下就是用戶登錄時的 user id。子進程的 real user id 從父進繼承。通常這個是不更改的,也不需要更改。比如我以用戶 nick 登錄 Linux 系統(tǒng),我接下來運行的所有命令的進程的 real user id 都是 nick 的 user id。

effective user id
如果要判斷一個進程是否對某個文件有操作權限,驗證的是進程的 effective user id,而不是 real user id。
通常我們是不建議直接使用 root 用戶進行操作的,但是在很多情況下,程序可能需要特殊的權限。比如 passwd 程序需要 root 權限才能夠為普通用戶修改密碼,一些 services 程序的操作也經(jīng)常需要特殊的權限。為此,Linux 中設計了一些特殊的權限,請參考《Linux 特殊權限 SUID,SGID,SBIT》一文。這里我們以 passwd 程序為例,為二進制可執(zhí)行文件 /usr/bin/passwd 設置 set-user-id bit=ON,這個可執(zhí)行文件被用 exec 啟動之后的進程的 effective user id 就是這個可執(zhí)行文件的 owner id,而并非父進程的 real user id。如果 set-user-id bit=OFF 的時候,這個被 exec 起來的進程的 effective user id 應該是等于進程的 user id 的。所以,effective user id 存在的意義在于,它可能和 real user id 不同。

saved set user id
saved set user id 相當于是一個 buffer,在 exec 函數(shù)啟動之后,它會拷貝 effective user id 位的信息覆蓋自己。對于非 root 用戶來說,可以在未來使用 setuid() 函數(shù)將 effective user id 設置成為 real user id 或 saved set user id 中的任何一個。但是不允許非 root 用戶用 setuid() 函數(shù)把 effective user id 設置成為任何第三個 user id。
對于 root 用戶來說,調用 setuid() 的時候,將會設置所有的這三個 user id。

從總體上來看,進程中 real user id, effective user id 和 saved set user id 的設計是為了讓 unprivilege user 可以獲得兩種不同的權限。同時我們也可以得出下面的結論:
Linux 系統(tǒng)通過進程的有效用戶 ID(effective user id) 和有效用戶組 ID(effective group id) 來決定進程對系統(tǒng)資源的訪問權限。

其實我們通過 ps aux 查看的結果中,第一列顯示的就是進程的 effective user:

e1dafd2e-9081-11ef-a511-92fbcf53809c.png

Shell 中外部命令的執(zhí)行方式

在 shell 中執(zhí)行的命令分為內部命令和外部命令兩種。

內部命令:內建的,相當于 shell 的子函數(shù)

外部命令:在文件系統(tǒng)的某個路徑下的一個可執(zhí)行文件

外部命令的執(zhí)行過程如下:

Shell 通過 fork() 函數(shù)建立一個新的子進程,新的子進程為當前 shell 進程的一個副本。

在新的進程里,從 PATH 變量所列出的目錄中尋找指定的命令程序。當命令名稱包含有斜杠(/)符號時,將略過路徑查找步驟。

在新的進程里,通過 exec 系列函數(shù),以所找到的新程序替換 shell 程序并執(zhí)行。

子進程退出后,最初的 shell 會接著從終端讀取并執(zhí)行下一條命令。

我們通過下面的例子來理解在 shell 中執(zhí)行外部命令的過程,例子很簡單就是通過 cat 命令查看一個文本文件 test.log:

$ cat test.log

我們先來檢查一下當前用戶以及相關文件的權限:

e1f88b14-9081-11ef-a511-92fbcf53809c.png

當前用戶 nick 的 real user id 為 1000,/bin/cat 文件的所有者為 root,但是所有人都有執(zhí)行權限,test.log 文件的所有者為 nick。我們結合下圖來介紹 cat test.log 命令的執(zhí)行過程:

e21584bc-9081-11ef-a511-92fbcf53809c.png

當我們在 shell 中執(zhí)行一個外部程序的時候,默認情況下進程的 effective user ID 等于 real user ID,進程的 effective group ID 等于 real group ID(接下來的介紹中省略 group ID)。當我們以用戶 nick 登錄系統(tǒng),并在 bash 中鍵入 cat test.log 命令并回車后。Bash 先通過 fork() 建立一個新的子進程,這個新的子進程是當前 bash 進程的一個副本。新的進程在 PATH 變量指定的路徑中搜索 cat 程序,找到 /bin/cat 程序后檢查其權限。/bin/cat 程序的所有者為 root,但是其他人具有讀和執(zhí)行的權限,所以新進程可以通過 exec 函數(shù)用 cat 程序的代碼段替換當前進程中的代碼段(把 /bin/cat 程序加載到了內存中,此時的進程已經(jīng)變成了 cat 進程,cat 進程會從 _start 函數(shù)開始執(zhí)行)。由于 cat 進程是由用戶 nick 啟動的,所以 cat 進程的 effective user ID 是 1000(nick)。同時 cat 進程的 effective user ID 和 test.log 文件的 owner ID 相同(都是 1000),所以 cat 進程擁有對此文件的 rw- 權限,那么順理成章地就可以讀寫 test.log 文件的內容了。

下面我們演示一個通過設置特殊權限 set uid ID 改變進程 effective user ID 的例子。
創(chuàng)建文件 root.log,權限為 640,此時只有 root 有權限讀寫該文件的內容,用戶 nick 連讀取該文件的權限都沒有:

e22b8a1e-9081-11ef-a511-92fbcf53809c.png

然后通過設置特殊權限 set uid ID 讓運行 cat 程序的進程具有 root 權限:

$ sudo chmod 4755 /bin/cat 

e243c6c4-9081-11ef-a511-92fbcf53809c.png

現(xiàn)在可以了!因為運行 cat 程序的進程的 effective user ID 變成了 root。記得要把 /bin/cat 的權限改回去呀:

$ sudo chmod 755 /bin/cat

Shell 腳本的執(zhí)行方式

在 shell 中執(zhí)行腳本的方式和執(zhí)行外部命令的方式差不多,比如我們要執(zhí)行下面的腳本:

$ /bin/bash ./test.sh

這時同樣會 fork 出一個子進程。只不過腳本與程序相比沒有代碼段,也沒有 _start 函數(shù),此時 exec 函數(shù)就會執(zhí)行另外一套機制。比如我們在 test.sh 文件的第一行通過 #!/bin/bash 指定了一個解釋器,那么解釋器程序的代碼段會用來替換當前進程的代碼段,并且從解釋器的 _start 函數(shù)開始執(zhí)行,而這個文本文件被當作命令行參數(shù)傳給解釋器。所以上面的命令執(zhí)行過程為:Bash 進程 fork/exec 一個子 bash 進程用于執(zhí)行腳本,子 bash 進程繼承父進程的環(huán)境變量、用戶信息等內容,父進程等待子 bash 進程終止。

總結

文件上的權限信息和用戶的信息都是靜態(tài)的,而進程是動態(tài)的,它把自身攜帶的用戶信息和將要進行的操作結合起來,從而實現(xiàn)權限管理。至此我們也基本上搞明白了 Linux 權限系統(tǒng)的工作原理

鏈接:https://www.cnblogs.com/sparkdev/p/9694103.html

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11479

    瀏覽量

    213026
  • 計算機
    +關注

    關注

    19

    文章

    7638

    瀏覽量

    90348
  • 內存
    +關注

    關注

    8

    文章

    3115

    瀏覽量

    75057
  • Ubuntu
    +關注

    關注

    5

    文章

    589

    瀏覽量

    30944

原文標題:深入解析:Linux 用戶身份與進程權限管理

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    Linux守護進程

    就是daemon的意思)。 由于在Linux中,每一個系統(tǒng)與用戶進行交流的界面稱為終端,每一個從此終端開始運行的進程都會依附于這個終端,這個終端稱為這些進程的控制終端,當控制終端被關閉
    發(fā)表于 08-22 09:17

    linux權限和指令

    進程的 PID。它只有一個參數(shù)就是pid。 su:是切換用戶權限的命名,當我們從普通用戶切換至超級用戶時使用該命令 sudo命令用來以其他
    發(fā)表于 07-04 06:58

    Linux如何修改用戶權限

    迅為IMX6ULL開發(fā)板-Linux用戶權限
    發(fā)表于 12-29 06:18

    Linux 中文件權限管理的探討

    Linux 是一種多用戶的操作系統(tǒng),其文件權限管理在文件管理中占有重要的地位。為了更好地把握Linux 的文件權限的相關內容,本文以多種
    發(fā)表于 06-11 09:37 ?11次下載

    Linux守護進程詳解

    分享到:標簽:進程控制 Linux 守護進程進程 7.3 Linux守護進程 7.3.1 守
    發(fā)表于 10-18 14:24 ?0次下載
    <b class='flag-5'>Linux</b>守護<b class='flag-5'>進程</b><b class='flag-5'>詳解</b>

    淺談Linux權限管理的ACL權限

    Linux權限管理是Linux很重要的一項內容,重則引起用戶信息泄露,輕則導致文件錯亂和丟失。企業(yè)服務器里有些目錄下面的東西暫時保密,不希望別人可以進入目錄并查看。有些文件希望別人可以
    的頭像 發(fā)表于 08-18 11:13 ?9185次閱讀

    Linux權限控制的基本原理

    ,我們將講述 Linux 系統(tǒng)中的 DAC 安全模型。DAC 安全模型DAC 的核心內容是:在 Linux 中,進程理論上所擁有的權限與執(zhí)行它的用戶
    發(fā)表于 04-02 14:40 ?433次閱讀

    Linux進程權限的分析說明

     在linux下,關于文件權限,大部分人接觸比較多,也比較熟悉了解。但是對進程權限一般知之甚少。本文總結一下linux系統(tǒng)下
    發(fā)表于 07-17 10:55 ?973次閱讀

    Linux基礎的用戶權限

    sudo是一種權限管理機制,其權限管理記錄在/etc/sudoers文件中,約定普通用戶可以以管理員的身份執(zhí)行命令。
    的頭像 發(fā)表于 02-15 11:08 ?918次閱讀

    linux文件訪問權限怎么設置

    Linux 文件訪問權限是操作系統(tǒng)中一個非常重要的概念。正確地設置文件訪問權限可以保護系統(tǒng)的安全性,防止未經(jīng)授權的人員對文件進行修改、刪除或執(zhí)行。本文將詳細介紹 Linux 文件訪問
    的頭像 發(fā)表于 11-23 10:20 ?2005次閱讀

    Linux把目錄權限給指定用戶

    Linux是一個開放源代碼的操作系統(tǒng),它基于Unix的設計原則,提供了豐富的權限管理功能,允許用戶對系統(tǒng)中的文件和目錄進行精確的控制。在Linux中,每個文件和目錄都有相應的
    的頭像 發(fā)表于 11-23 10:30 ?9230次閱讀

    詳解Linux中的權限控制

    本章將和大家分享Linux中的權限控制。廢話不多說,下面我們直接進入主題。
    的頭像 發(fā)表于 08-05 15:32 ?953次閱讀
    <b class='flag-5'>詳解</b><b class='flag-5'>Linux</b>中的<b class='flag-5'>權限</b>控制

    Linux文件權限詳解

    權限的意義在于允許某一個用戶或某個用戶組以規(guī)定的方式去訪問某個文件。
    的頭像 發(fā)表于 11-01 09:45 ?602次閱讀

    linux權限管理詳解

    權限:在計算機系統(tǒng)中,權限是指某個計算機用戶具有使用軟件資源的權利。
    的頭像 發(fā)表于 12-25 09:43 ?532次閱讀

    Linux權限管理基礎入門

    Linux的廣闊天空中,權限管理猶如一只翱翔的雄鷹,掌控著系統(tǒng)的安全與秩序。掌握Linux權限,不僅能讓你的系統(tǒng)管理更加得心應手,還能有效防止未授權訪問和數(shù)據(jù)泄露。本文將帶你深入探索
    的頭像 發(fā)表于 05-06 13:44 ?194次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>權限</b>管理基礎入門
    主站蜘蛛池模板: 成人一级网站 | 黄色w站| 99热99操99射| 四虎网址 | 91色视| 窝窝午夜在线观看免费观看 | 日韩福利一区 | 日本三级日本三级日本三级极 | 国产农村妇女毛片精品久久 | 性生生活三级视频在线观看 | 视频在线观看高清免费大全 | 五月婷婷丁香在线 | 三级毛片在线免费观看 | 五月丁香 | 色综合久久综合 | 国产午夜在线观看视频播放 | 日韩成人毛片高清视频免费看 | 久久黄色毛片 | 91精品久久久久含羞草 | 高清不卡毛片免费观看 | 亚洲第一区精品日韩在线播放 | 手机在线一区二区三区 | 小泽玛利亚在线观看123 | 欧美性色欧美a在线观看 | 亚洲啪啪 | 色综网| 亚洲成人免费在线 | 伊人狼人综合网 | 午夜视频精品 | 日本三浦理惠子中文字幕 | 人人草人人澡 | 日日噜噜噜噜人人爽亚洲精品 | 国模私拍福利一区二区 | 在线免费观看视频你懂的 | 人人爱天天做夜夜爽毛片 | 轻点灬大ji巴太粗太长了啊h | 一区免费视频 | 国产夜夜爽 | 国产精品国产三级在线高清观看 | 在线免费你懂的 | 国产成人综合欧美精品久久 |