亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

linux權限

系統 1924 0

1. 更改用戶ID和組ID

1.1. 設置用戶ID和設置組ID

與進程相關聯的ID有6個或更多,如下:

?

實際用戶ID

我們實際上是誰

實際組ID

有效用戶ID

用于文件訪問權限檢查

有效組ID

附加組ID

保存的設置用戶ID

由exec函數保存

保存的設置組ID

?

實際用戶ID和實際組ID標識我們是誰。這兩個字段在登錄時取自口令文件中的登錄項。

有效用戶ID、有效組ID和附加組ID決定了我們的文件訪問權限。

保存的設置用戶ID和保存的設置組ID在執行一個程序時包含了有效用戶ID和有效組ID的副本。

當執行一個程序文件時,進程的有效用戶ID通常就是實際用戶ID,有效組ID就是實際組ID。但是如果在文件模式字(st_mode)中設置一個特殊標志,其含義是"當執行此文件時,將進程的有效用戶ID設置為文件所有者的用戶ID(se_uid)"。與此類似,如果在文件模式字(st_mode)中設置另一位,它使得將執行此文件的進程的有效組ID設置為文件組所有者ID(se_gid)。在文件模式字中的這兩位被稱為設置用戶ID位(set-user-ID)和設置用戶組位(set-group-ID)。

1.2. 文件訪問權限

st_mode值也包含了針對文件的訪問權限位。9個權限位,取自<sys/stat.h>

?

st_mode屏蔽字

意義

S_IRUSR

用戶-讀

S_IWUSR

用戶-寫

S_IXUSR

用戶-執行

S_IRGRP

組-讀

S_IWGRP

組-寫

S_IXGRP

組-執行

S_IROTH

其他-讀

S_IWOTH

其他-寫

S_IXOTH

其他-執行

?

命令chmod用于修改這9個權限位。該命令允許用u表示用戶(所有者),用g表示組,用o表示其他。進程每次打開、創建或刪除一個文件時,內核就進行文件訪問權限測試,而這種涉及文件的所有者(st_ui和st_gid)、進程的有效ID(有效用戶ID和有效組ID)以及進程的附加組ID(若支持的話)。兩個所有者ID是文件的性質,而兩個有效ID和附加組ID是進程的性質。內核順序進行的測試是:

1). 如果進程的有效用戶ID是0(超級用戶),則允許訪問。

2). 如果進程的有效用戶ID等于文件的所有者ID(也就是該進程擁有此文件),那么:若所有者適當的訪問權限位被設置,則允許訪問。

3). 如果進程的有效組ID或進程的附加組ID之一等于文件的組ID,那么:若組適當的權限位被設置,則允許訪問。

4). 如果其他用戶適當的訪問權限位被設置,則允許訪問。

?

1.3. setuid和setgid函數

在UNIX系統中,特權是基于用戶和組ID的。當程序需要增加特權,或需要訪問當前并不允許訪問的資源時,我們需要更換自己的用戶ID或組ID,使得新ID具有合適的特權或訪問權限。與此類似,當程序需要降低其特權或阻止對某些資源的訪問時,也需要更換用戶ID或組ID,從而使新ID不再具有相應的特權或訪問這些資源的能力。

一般而言,在設計應用程序時,我們總是試圖使用最小特權(least privilege)模型。函數setuid設置實際用戶ID和有效用戶ID;函數setgid設置實際組ID和有效組ID。

#include <unistd.h>

int setuid(uid_t uid);

int setgid(gid_t gid);

?

關于改變用戶ID的規則:

1). 如果進程具有超級用戶特權,則setuid函數將實際用戶ID、有效用戶ID、以及保存的設置用戶ID設置為uid。

2). 如果進程沒有超級用戶特權,但是uid等于實際用戶ID或保存的設置用戶ID,則setuid只將有效用戶ID設置為uid。不改變實際用戶ID和保存的設置用戶ID。

3). 如果上面兩個條件都不滿足,則將errno設置為EPERM,并返回-1。

?

關于內核所維護的三個用戶ID,還要注意以下幾點:

1). 只有超級用戶進程可以更改實際用戶ID。實際用戶ID實是用戶登錄時,由login程序設置的,而且永遠不會改變它。因為login是一個超級用戶進程,當它調用setuid時,會設置所有三個用戶ID。

2). 僅僅當對程序文件設置了設置用戶ID位時,exec函數才會設置有效用戶ID。任何時候都可以調用setuid,將有效用戶ID設置為實際用戶ID或保存的設置用戶ID。

3). 保存的設置用戶ID是由exec復制有效ID而得到的。如果設置了程序文件的設置用戶ID位,則在exec根據文件的用戶ID設置了進程的有效用戶ID以后,就將這個副本保存起來。

注意:getuid和geteuid函數只能獲得實際用戶ID和有效用戶ID的當前值。改變三個用戶ID的不同方法:

?

ID

exec

setuid(uid)

設置用戶ID位關閉

設置用戶ID位打開

超級用戶

非特權用戶

實際用戶ID

不變

不變

設為uid

不變

有效用戶ID

不變

程序文件的用戶ID

設為uid

設為uid

保存的設置用戶ID

從有效用戶ID復制

從有效用戶ID復制

設為uid

不變

?

?

POIX.1包含了兩個函數setuid和setegid。它們類似setuid和setgid,但只更改有效用戶ID和有效組ID。

#include <unistd.h>

int seteuid(uid_t uid);

int setegid(gid_t gid);

轉自: http://blog.csdn.net/youkuxiaobin/article/details/6876820

linux權限


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产精品久久久久久久伊一 | 国产v欧美v日本v精品 | 亚洲综合视频在线 | 蜜桃日本一道无卡不码高清 | 国产高清精品久久久久久久 | 欧美操人视频 | 日本爽快片100色毛片 | 欧美一级高清在线观看 | 羞羞视频免费网站 | 四虎影院观看视频在线观看 | 欧美视频在线视频 | 在线中文字幕视频 | 日本午夜免费理论片 | 欧美成人高清免费大片观看 | 特黄特级a级黄毛片免费观看多人 | 婷婷亚洲综合五月天在线 | 看一下毛片 | 99视频免费播放 | 一级成人毛片免费观看 | 日本中文字幕在线播放 | 九九热精彩视频 | 久久精品视频免费 | 一本伊大人香蕉久久网手机 | 欧美一级毛片香蕉网 | 九九热免费视频 | 婷婷激情片 | 精品久久网 | 中文字幕亚洲欧美日韩高清 | 丰满放荡岳乱妇91www | 久久精品国产丝袜 | 夜夜夜网站| 久久99国产综合色 | 99视频全部看免费观 | av大片| 久久免费网 | 韩国高清不卡一区二区 | 欧美色大成网站www永久男同 | 欧美一级毛片不卡免费观看 | 在线精品国产第一页 | 激情影院a | 美美女高清毛片视频黄的一免费 |