黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

linux權(quán)限

系統(tǒng) 2367 0

1. 更改用戶ID和組ID

1.1. 設(shè)置用戶ID和設(shè)置組ID

與進程相關(guān)聯(lián)的ID有6個或更多,如下:

?

實際用戶ID

我們實際上是誰

實際組ID

有效用戶ID

用于文件訪問權(quán)限檢查

有效組ID

附加組ID

保存的設(shè)置用戶ID

由exec函數(shù)保存

保存的設(shè)置組ID

?

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

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

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

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

1.2. 文件訪問權(quán)限

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

?

st_mode屏蔽字

意義

S_IRUSR

用戶-讀

S_IWUSR

用戶-寫

S_IXUSR

用戶-執(zhí)行

S_IRGRP

組-讀

S_IWGRP

組-寫

S_IXGRP

組-執(zhí)行

S_IROTH

其他-讀

S_IWOTH

其他-寫

S_IXOTH

其他-執(zhí)行

?

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

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

2). 如果進程的有效用戶ID等于文件的所有者ID(也就是該進程擁有此文件),那么:若所有者適當(dāng)?shù)脑L問權(quán)限位被設(shè)置,則允許訪問。

3). 如果進程的有效組ID或進程的附加組ID之一等于文件的組ID,那么:若組適當(dāng)?shù)臋?quán)限位被設(shè)置,則允許訪問。

4). 如果其他用戶適當(dāng)?shù)脑L問權(quán)限位被設(shè)置,則允許訪問。

?

1.3. setuid和setgid函數(shù)

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

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

#include <unistd.h>

int setuid(uid_t uid);

int setgid(gid_t gid);

?

關(guān)于改變用戶ID的規(guī)則:

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

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

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

?

關(guān)于內(nèi)核所維護的三個用戶ID,還要注意以下幾點:

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

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

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

注意:getuid和geteuid函數(shù)只能獲得實際用戶ID和有效用戶ID的當(dāng)前值。改變?nèi)齻€用戶ID的不同方法:

?

ID

exec

setuid(uid)

設(shè)置用戶ID位關(guān)閉

設(shè)置用戶ID位打開

超級用戶

非特權(quán)用戶

實際用戶ID

不變

不變

設(shè)為uid

不變

有效用戶ID

不變

程序文件的用戶ID

設(shè)為uid

設(shè)為uid

保存的設(shè)置用戶ID

從有效用戶ID復(fù)制

從有效用戶ID復(fù)制

設(shè)為uid

不變

?

?

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

#include <unistd.h>

int seteuid(uid_t uid);

int setegid(gid_t gid);

轉(zhuǎn)自: http://blog.csdn.net/youkuxiaobin/article/details/6876820

linux權(quán)限


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論