Uid euid gid egid關(guān)系
作者:陶寧,華清遠見嵌入式學(xué)院上海中心講師。
每個用戶有一個uid和gid, 這個記錄在/etc/passwd, /etc/group里面,每個文件有一個uid, 就是擁有這個文件的用戶的uid。每個用戶運行一個程序時是以自己的uid作為身份的,如果這個程序被設(shè)置了stick位,則這個程序以程序擁有者的uid作為身份,程序運行時的這個身份(uid)就是euid, 表示這個程序以那個用戶的身份運行(這樣就擁有那個用戶的權(quán)限,比如讀取屬于他的文件)。所以程序運行時的身份euid一般情況下都是運行這個程序的人的uid,有時會是這個程序擁有者的uid。
以passwd程序為例,這個程序要寫/etc/passwd, /etc/shadow,一般用戶對這些文件是沒有寫權(quán)限的,用戶A運行了passwd,這個passwd進程的euid就是uidA,當(dāng)要寫這兩個文件時,passwd調(diào)用了setuid(seteuid?),這樣這個passwd進程的euid就是uidRoot了,passwd就可以寫那兩個文件了,寫完之后euid再切換成uidA.這個過程就實現(xiàn)了對/etc/passwd, /etc/shadow的受控訪問:普通用戶只允許按照passwd程序定義好的方式修改這兩個文件。
下面來看下這兩個文件:
(1)/etc/passwd
功能:存放系統(tǒng)的用戶帳號信息
內(nèi)容:用戶名 密碼 UID GID 所屬組用戶主目錄 SHELL
實例: u1 : x : 0 : 0 : u1 /home/u1 :/bin/bash
注:如果采用了shadow,此處存放口令的為屏蔽字符,真正密碼保存在/etc/shadow中 。
如果不采用shadow,采用明文件顯示,如果采用md5加密的話所存放的為密文。
(2)/etc/shadow
功能:存放用戶口令(加密過的口令)
實例: u1 : bq$# : 10750: 0: 999 :7 : -1 :-1 : 12546
說明: u1 用戶名
b1$# 加密的口令
10750 從1970.1.1開始計算,該口令修改后已過去了多少天
0 需要再過多少天這個口令可以被修改
9999 密碼的有效期
7 口令失效多少天前發(fā)出警告
-1 口令失效多少天之后禁用這個賬戶
-1 口令從1970.1.1計算,該口令已經(jīng)禁用了多少天
12546 保留
linux系統(tǒng)中每個進程都有2個ID,分別為用戶ID和有效用戶ID,UID一般表示進程的創(chuàng)建者(屬于哪個用戶創(chuàng)建),而EUID表示進程 對于文件和資源的訪問權(quán)限(具備等同于哪個用戶的權(quán)限)。可以通過函數(shù)getuid()和geteuid()或者進程的兩個ID值。
當(dāng)一個用戶登陸系統(tǒng)時,系統(tǒng)會將UID和EUID都賦值為/etc/passwd文件中的UID,一般情況下2個ID是相同的,但是某些情況下會出現(xiàn)2個ID不同的情況
下面舉一個例子:
結(jié)果:
“本文由華清遠見http://www.embedu.org/index.htm提供”
華清遠見