91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux用戶(hù)身份與進(jìn)程權(quán)限詳解

馬哥Linux運(yùn)維 ? 來(lái)源:博客園sparkdev ? 2024-10-23 11:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

基本概念

用戶(hù)
對(duì)于支持多任務(wù)的 Linux 系統(tǒng)來(lái)說(shuō),用戶(hù)就是獲取資源的憑證。

權(quán)限
權(quán)限用來(lái)控制用戶(hù)對(duì)計(jì)算機(jī)資源(CPU、內(nèi)存、文件等)的訪(fǎng)問(wèn),一般會(huì)分為認(rèn)證和授權(quán)兩步。比如用戶(hù)先經(jīng)過(guò)認(rèn)證機(jī)制(authentication)登錄系統(tǒng),然后由授權(quán)系統(tǒng)(authorization)對(duì)用戶(hù)的操作進(jìn)行授權(quán)。

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

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

從登陸過(guò)程觀察進(jìn)程攜帶的用戶(hù)身份信息

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

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

上圖描述了 init 進(jìn)程、getty 進(jìn)程、login 進(jìn)程和 shell 進(jìn)程的交互。
簡(jiǎn)單點(diǎn)說(shuō)就是:用戶(hù)登錄后, shell 進(jìn)程的有效用戶(hù)就是該用戶(hù)。下面我們來(lái)了解下進(jìn)程的用戶(hù)信息。

進(jìn)程的 real user id、effective user id 和 saved set user id

通過(guò) cat /proc/status 命令,我們可以查看到進(jìn)程所屬的用戶(hù)和組相關(guān)的信息:

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

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

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

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

saved set user id
saved set user id 相當(dāng)于是一個(gè) buffer,在 exec 函數(shù)啟動(dòng)之后,它會(huì)拷貝 effective user id 位的信息覆蓋自己。對(duì)于非 root 用戶(hù)來(lái)說(shuō),可以在未來(lái)使用 setuid() 函數(shù)將 effective user id 設(shè)置成為 real user id 或 saved set user id 中的任何一個(gè)。但是不允許非 root 用戶(hù)用 setuid() 函數(shù)把 effective user id 設(shè)置成為任何第三個(gè) user id。
對(duì)于 root 用戶(hù)來(lái)說(shuō),調(diào)用 setuid() 的時(shí)候,將會(huì)設(shè)置所有的這三個(gè) user id。

從總體上來(lái)看,進(jìn)程中 real user id, effective user id 和 saved set user id 的設(shè)計(jì)是為了讓 unprivilege user 可以獲得兩種不同的權(quán)限。同時(shí)我們也可以得出下面的結(jié)論:
Linux 系統(tǒng)通過(guò)進(jìn)程的有效用戶(hù) ID(effective user id) 和有效用戶(hù)組 ID(effective group id) 來(lái)決定進(jìn)程對(duì)系統(tǒng)資源的訪(fǎng)問(wèn)權(quán)限。

其實(shí)我們通過(guò) ps aux 查看的結(jié)果中,第一列顯示的就是進(jìn)程的 effective user:

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

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

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

內(nèi)部命令:內(nèi)建的,相當(dāng)于 shell 的子函數(shù)

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

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

Shell 通過(guò) fork() 函數(shù)建立一個(gè)新的子進(jìn)程,新的子進(jìn)程為當(dāng)前 shell 進(jìn)程的一個(gè)副本。

在新的進(jìn)程里,從 PATH 變量所列出的目錄中尋找指定的命令程序。當(dāng)命令名稱(chēng)包含有斜杠(/)符號(hào)時(shí),將略過(guò)路徑查找步驟。

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

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

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

$ cat test.log

我們先來(lái)檢查一下當(dāng)前用戶(hù)以及相關(guān)文件的權(quán)限:

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

當(dāng)前用戶(hù) nick 的 real user id 為 1000,/bin/cat 文件的所有者為 root,但是所有人都有執(zhí)行權(quán)限,test.log 文件的所有者為 nick。我們結(jié)合下圖來(lái)介紹 cat test.log 命令的執(zhí)行過(guò)程:

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

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

下面我們演示一個(gè)通過(guò)設(shè)置特殊權(quán)限 set uid ID 改變進(jìn)程 effective user ID 的例子。
創(chuàng)建文件 root.log,權(quán)限為 640,此時(shí)只有 root 有權(quán)限讀寫(xiě)該文件的內(nèi)容,用戶(hù) nick 連讀取該文件的權(quán)限都沒(méi)有:

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

然后通過(guò)設(shè)置特殊權(quán)限 set uid ID 讓運(yùn)行 cat 程序的進(jìn)程具有 root 權(quán)限:

$ sudo chmod 4755 /bin/cat 

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

現(xiàn)在可以了!因?yàn)檫\(yùn)行 cat 程序的進(jìn)程的 effective user ID 變成了 root。記得要把 /bin/cat 的權(quán)限改回去呀:

$ sudo chmod 755 /bin/cat

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

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

$ /bin/bash ./test.sh

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

總結(jié)

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

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

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

    關(guān)注

    88

    文章

    11758

    瀏覽量

    219008
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7806

    瀏覽量

    93189
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    9

    文章

    3209

    瀏覽量

    76357
  • Ubuntu
    +關(guān)注

    關(guān)注

    5

    文章

    613

    瀏覽量

    33366

原文標(biāo)題:深入解析:Linux 用戶(hù)身份與進(jìn)程權(quán)限管理

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Linux守護(hù)進(jìn)程

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

    linux權(quán)限和指令

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

    Linux如何修改用戶(hù)權(quán)限

    迅為IMX6ULL開(kāi)發(fā)板-Linux用戶(hù)權(quán)限
    發(fā)表于 12-29 06:18

    Linux 中文件權(quán)限管理的探討

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

    Linux守護(hù)進(jìn)程詳解

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

    淺談Linux權(quán)限管理的ACL權(quán)限

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

    Linux權(quán)限控制的基本原理

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

    Linux進(jìn)程權(quán)限的分析說(shuō)明

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

    Linux基礎(chǔ)的用戶(hù)權(quán)限

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

    linux文件訪(fǎng)問(wèn)權(quán)限怎么設(shè)置

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

    Linux把目錄權(quán)限給指定用戶(hù)

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

    詳解Linux中的權(quán)限控制

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

    Linux文件權(quán)限詳解

    權(quán)限的意義在于允許某一個(gè)用戶(hù)或某個(gè)用戶(hù)組以規(guī)定的方式去訪(fǎng)問(wèn)某個(gè)文件。
    的頭像 發(fā)表于 11-01 09:45 ?1277次閱讀

    linux權(quán)限管理詳解

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

    Linux權(quán)限管理基礎(chǔ)入門(mén)

    Linux的廣闊天空中,權(quán)限管理猶如一只翱翔的雄鷹,掌控著系統(tǒng)的安全與秩序。掌握Linux權(quán)限,不僅能讓你的系統(tǒng)管理更加得心應(yīng)手,還能有效防止未授權(quán)訪(fǎng)問(wèn)和數(shù)據(jù)泄露。本文將帶你深入探索
    的頭像 發(fā)表于 05-06 13:44 ?756次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>權(quán)限</b>管理基礎(chǔ)入門(mén)