設定使用者ID和設定組ID

2021-09-13 01:39:16 字數 1429 閱讀 7314

1.實際使用者id、實際組id

2.有效使用者id、有效組id、附屬組id

3.儲存的使用者id、儲存的組id

第一組標識我們實際的id,比如登入shell使用的id;第二組是程序執行時用於判斷檔案訪問許可權的id,這個是跟訪問許可權息息相關的;第三組是當我們的id發生變化時儲存的值,方便我們找回。

正常情況下實際id和有效id是相等的,但是如果我們配置了設定使用者id和設定組id標誌位,那麼會在exec執行後,改變對應的有效id為檔案所有者id和檔案所屬組id,並且把新id儲存起來。

linux提供了對應的修改id的api:

int setuid(uid_t uid);  //設定實際使用者id

int setgid(gid_t gid); //設定實際組id

int seteuid(uid_t uid); //設定有效使用者id

int setegid(gid_t gid); //設定有效組id

當我們具有root許可權時,上述id設定可以是任意的id,如果非root許可權執行,那麼只能設定為(實際id/儲存的id)兩者之一,否則會設定失敗。

檔案的st_mode有兩個位用來表示設定使用者id和設定組id:

s_isuid  執行時設定使用者id

s_isgid 執行時設定組id

這兩個位的關鍵作用是可以用來設定可執行檔案,當該可執行檔案被exec執行時,會以檔案所屬使用者id或者檔案所屬組id來執行該檔案,而不是當前的實際使用者id和實際組id。

比如乙個可執行程式daemon,它屬於root使用者所有,我們直接執行該程式是以當前實際使用者id來執行,如果把該文的設定使用者id標誌位配置上,那麼就會以root許可權去執行該程式。

~/work/qemu/sdk/test$ ls -l daemon

-rwxrwxr-x 1 root xiehaocheng 14090 3月 20 16:29 daemon

~/work/qemu/sdk/test$ sudo chmod +s daemon

~/work/qemu/sdk/test$ ls -l daemon

-rwsrwsr-x 1 root xiehaocheng 14090 3月 20 16:29 daemon

可以直接使用chmod命令設定對應的st_mode:

chmod +s daemon   #設定使用者id位

chmod +ss daemon #設定使用者id位和設定組id位

struct stat statbuf;

stat("daemon", &statbuf);

chmod("daemon", statbuf.st_mode | (s_isuid | s_isgid));

設定使用者ID和設定組ID

與乙個程序關聯的id有6個或更多,如下圖所示 與每個程序相關聯的使用者id和組id 實際使用者id 實際組id 我們實際是誰 有效使用者id 有效組id 附加組id 用於檔案訪問許可權檢索 儲存的設定使用者id 儲存的設定組id 由exec函式儲存 通常,有效使用者id等於實際使用者id,有效組id...

設定使用者ID和設定組ID

與乙個程序關聯的id有6個或更多,如下圖所示 與每個程序相關聯的使用者id和組id 實際使用者id 實際組id 我們實際是誰 有效使用者id 有效組id 附加組id 用於檔案訪問許可權檢索 儲存的設定使用者id 儲存的設定組id 由exec函式儲存 通常,有效使用者id等於實際使用者id,有效組id...

設定使用者ID與設定使用者組ID

當執行乙個程式檔案時,程序的有效使用者id通常就是實際使用者id,有效組id通常是實際組id。檔案的 設定使用者id 位的作用是 若為程式檔案設定了 設定使用者id 位,那麼當執行此檔案時,將程序的有效使用者id設定為檔案所有者的使用者id 檔案的 設定組id 位的作用是 若為程式檔案設定了 設定組...