Linux 下程式許可權分析

發表於2016-11-16

在linux下,關於檔案許可權,大部分人接觸比較多,也比較熟悉瞭解.但是對程式許可權一般知之甚少。本文總結一下linux系統下程式許可權問題和現象。

需要強調的是,本文是linux系統下討論,因為linux和unix有很多不同的地方,並且各個不同的unix系統也有很多不同。

先開門見山的列出本文討論物件:ruid(實際使用者id: real userid)、euid(有效使用者使用者:effective userid), suid(儲存使用者id:saved userid)、fuid(檔案系統使用者id)。

除了上面4個,還涉及到一個位 設定使用者id位(set user id bit),,即我們通常所說的處rwx之外那個s標誌位。

另外,本文主要討論userid,groupid規則基本一樣,例如rgid, egid, sgid, fgid等,本文就不做組id方面的重複討論了。

首先,檢視這幾個uid的方法有兩種方式:一是ps 命令 (ps -ax -o ruid -o euid -o suid -o fuid -o pid -o fname)列出這幾個uid;二是檢視status檔案,(cat /proc/2495/status | grep Uid)。

本文建立5個test使用者 test1~test5用來做本文中sample討論使用,代表常見普通許可權使用者。

一:檔案所有者使用者和程式執行者使用者是同一使用者的情況

上面是我們碰到最常見最多的情況,所以導致大部分技術人員很少關心這個四個uid的區別和含義。讓我們繼續看看更多場景

二、出讓許可權給其它使用者。非root使用者是無法出讓許可權給其它使用者,只有root使用者才能出讓。

許可權出讓使用最多的場景是類似apache或mysql程式,啟動的時候使用root使用者啟動,設定一些root使用者才能操作的系統配置。建立子程式時候通過setuid降級為nobody使用者。

繼續看一下s許可權位對程式許可權的影響

三、s 標誌位影響的是 euid,suid,和 fuid

s許可權位使用最經典的案例是passwd命令

下面我們看看他們對檔案許可權的影響,構建一個ruid,euid,和fuid都不同,看看建立出來的檔案所有者是哪個uid

四、影響使用者檔案許可權的是 fuid,不是 euid,該 uid 是 linux 特有的屬性,unix 系統是靠 euid 來判定使用者許可權。

五、許可權的繼承,當使用 fork 子程式的時候,子程式全部繼承父程式四個 uid,和父程式 uid 相同

當使用exec系列函式時候,會把suid置為euid。

相關文章