Linux程序的uid和euid

2022-01-23 04:28:25 字數 2482 閱讀 6731

對可執行檔案設定 

setuid

許可權時,將對執行該檔案的程序授予基於檔案屬主的訪問許可權。該訪問許可權不是基於正在執行可執行檔案的使用者。使用此特殊許可權,使用者可以訪問通常只有屬主才可訪問的檔案和目錄。

可以使用chmod u+s 或chmod g+s來設定二進位制的可執行檔案的euid。setuid只能對二進位制的可執行設定。

一 程序的uid和euid 

**: 

linux系統中每個程序都有2個id,分別為使用者id(uid)和有效使用者id(euid),uid一般表示程序的建立者(屬於哪個使用者建立),而euid表示程序對於檔案和資源的訪問許可權(具備等同於哪個使用者的許可權)。c語言中,可以通過函式getuid()和geteuid()來獲得程序的兩個id值。

當乙個使用者登陸系統時,系統會將uid和euid都賦值為/etc/passwd檔案中的uid,一般情況下2個id是相同的,但是某些情況下會出現2個id不同的情況。

gid和egid同理。

下面一段c**將解釋區別:"printid.c"

#include

#include

#include

#include

int main(void)

編譯之:

aguo@linux-x9rc:~> gcc -o printid printid.c 

執行:aguo@linux-x9rc:~> ./printid 

real uid        = 1000

effective uid        = 1000

real gid        = 100

effective gid        = 100

看看/etc/passwd裡uid和gid:

aguo@linux-x9rc:~> cat /etc/passwd | grep aguo | awk -f":" ''

uid:1000        gid:100

以上是相同的例子。

下面演示uid和euid不同的例子。

首先,修改一下檔案屬性,setuid或setgid

aguo@linux-x9rc:~> chmod u+s printid #這樣一來,檔案在執行階段具有檔案所有者的許可權。

還可以再補充乙個:

aguo@linux-x9rc:~> chmod g+s printid #這樣一來,檔案在執行階段具有檔案所屬組的許可權。

其次,變成其他使用者,再來試驗一下,比如變成root;

linux-x9rc:/home/aguo # ./printid 

real uid        = 0

effective uid        = 1000

real gid        = 0

effective gid        = 100

看到了吧?uid和euid是有區別的!

以上演示環境:

os:suse desktop linux 11

gcc:4.3.2

順便補充一下:

perl裡面的特殊變數$<、$>表示uid euid; $(、$)表示gid egid。

只是,$(和$)會儲存乙個列表,第一位表示的才是gid和egid,這個是perl的設定,不在本文討論範圍中。

二 passwd 例項

**:【關於linux的passwd命令】

passwd命令是用來修改使用者登陸密碼的,用來記錄使用者登陸密碼的檔案為/etc/shadow,該檔案只有root使用者具有訪問許可權,如下所示:

gaolu@gaolu-desktop:~$

gaolu@gaolu-desktop:~$ cd /etc

gaolu@gaolu-desktop:/etc$ ls -l shadow

-rw-r----- 1 root shadow 978 2009-02-22 21:25 shadow

gaolu@gaolu-desktop:/etc$

這是出現了矛盾:出於安全考慮,不允許普通使用者檢視並修改shadow檔案;但是如果這樣普通使用者就無法為自己修改密碼。

linux系統就是使用setuid來解決這個矛盾的問題:如果乙個程式被設定了setuid位,那麼它無論被哪個使用者啟用,都會具備程式所有者的許可權。而passwd程式的所有者是root使用者,passwd的許可權如下所示,那麼任何使用者執行該程式,程式的euid就會變成root使用者的euid,而不是執行該程式的uid。

gaolu@gaolu-desktop:/etc$ cd /usr/bin

gaolu@gaolu-desktop:/usr/bin$ ls -l passwd

-rwsr-xr-x 1 root root 32988 2008-06-10 02:10 passwd

gaolu@gaolu-desktop:/usr/bin$

gaolu@gaolu-desktop:/usr/bin$

因此,普通使用者可以通過passwd程式修改shadow檔案內容,完成密碼修改。

完! 

Android中UID機制和共享程序

我們經常在乙個activity中去start另乙個activity,或者與另乙個acitivity的結果進行互動 startactivityforresult 但有沒有想過可能會出現的permission問題呢?如果你遇到了permission denial的exception,那麼你需要讀讀這篇文...

Android中UID機制和共享程序

我們經常在乙個activity中去start另乙個activity,或者與另乙個acitivity的結果進行互動 startactivityforresult 但有沒有想過可能會出現的permission問題呢?如果你遇到了permission denial的exception,那麼你需要讀讀這篇文...

Linux系統修改使用者和組的uid和gid

總結linux系統修改使用者和組的uid和gid。使用者的配置檔案是在 etc passwd檔案下,先記錄下原使用者的uid,後邊有用。修改使用者配置檔案中對應使用者的uid和gid,儲存。組配置檔案是在 etc group下 修改對應使用者所屬的組的gid,儲存。其實執行完1 2兩步,用id 使用...