Unix權限管理

Unix權限管理

1 Unix權限管理

權限管理實際就是身份認證和訪問權限校驗,被受權的用戶可得到權限,反之,則否。 在 Unix 中用到權限管理的場合包括:less

  1. 登陸
  2. 進程對文件的存取訪問

第1點暫不予討論。函數

  • 身份認證的過程實際就是:「系統」校驗「主體」是否符合「客體」所指望的身份的過程。在「進程對文件的存取訪問」的身份認證過程當中,內核擔當「系統」角色,進程爲「主體」,文件則爲「客體」。 那麼,認證的依據是什麼?主客雙方都須要提供某種類型的身份憑證!在「進程對文件的存取訪問」的認證過程當中,進程提供的身份憑證是有效用戶ID和有效組ID;文件提供的憑證則是屬主用戶ID和屬主組ID。
  • 在提供差別化權限管理的系統中完成身份認證只是第一步,「客體」對不一樣「主體」的開放程度多是不一樣的,若是沒有訪問權限校驗的過程,則沒法提供這種特性。訪問權限校驗是指:在指定身份下,「客體」是否可知足特定類型的訪問申請。

2 進程權限

任意Unix進程可有以下「身份」:post

  • 實際用戶ID、有效用戶ID、保存的設置用戶ID
  • 實際組ID、有效組ID、保存的設置組ID

這些「身份「的訪問控制函數總結以下:ui

#include <unistd.h>

uid_t getuid( ); // 獲取實際用戶ID
uid_t geteuid( ); // 獲取有效用戶ID
int setuid( uid_t uid ); // 設置實際用戶ID和有效用戶ID
int seteuid( uid_t uid ); // 設置有效用戶ID

gid_t getgid( ); // 獲取實際組ID
gid_t getegid( ); // 獲取有效組ID
int setgid( gid_t gid ); // 設置實際組ID和有效組ID
int setegid( gid_t gid ); // 設置有效組ID

setuid 和 setgid 可按規則設置調用進程的實際和有效「身份」,這些規則以下:spa

  • 以 setuid 爲例:
    1. 若調用進程具備超級用戶特權1,則將調用進程的實際用戶ID、有效用戶ID、保存的設置用戶ID都設爲uid
    2. 若調用進程的實際用戶ID或保存的設置用戶ID等於參數uid,則將調用進程的有效用戶ID設置爲uid
  • setgid 的規則與 setuid 相似

3 文件權限

文件跟權限管理相關的兩條屬性分別是:進程

  1. 屬主,它指明瞭文件的歸屬,包括:
    • 用戶ID
    • 組ID
  2. 訪問控制權限,它指明瞭文件對不一樣身份的進程所容許的訪問操做,共包括三組:
    1. 對所屬用戶所容許的訪問操做: -rwx
    2. 對所屬組所容許的訪問操做: -—rwx
    3. 對其餘用戶所容許的訪問操做: -——rwx

4 進程對文件的存取訪問的權限校驗過程

  1. 若進程有效用戶ID爲0,則容許訪問
  2. 若進程有效用戶ID等於文件所屬者用戶ID,則按用戶訪問權限位進行訪問
  3. 若進程有效組ID等於文件所屬者組ID,則按組訪問權限位進行訪問
  4. 若以上都不匹配,則按其餘用戶訪問權限位進行訪問

Footnotes:

1 即,調用進程的有效用戶ID等於0get

Date: 2015-10-17T11:03+0800emacs

Author: rulelessit

Org version 7.9.3f with Emacs version 24io

Validate XHTML 1.0
相關文章
相關標籤/搜索