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

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條評論
主站蜘蛛池模板: 欧美高清不卡 | 色偷偷亚洲精品一区二区 | 亚洲整片 | 欧美vs日韩vs国产在线观看 | 极品女神西比尔久久精品 | 久草视频观看 | 欧美一级毛片不卡免费观看 | 四虎国产永久在线精品免费观看 | 久久青青草原精品国产麻豆 | 福利院肉动漫视频在线观看 | 国产在线原创剧情麻豆 | 最新国产精品亚洲 | 国产乱子伦 | 99视频全部免费 | 美女国产精品 | 色猫咪av在线网址 | 亚洲欧美日韩国产一区图片 | 手机看片日韩高清国产欧美 | 97在线观看成人免费视频 | 亚洲福利精品一区二区三区 | 一区二区三区四区亚洲 | 亚洲欧美激情综合第一区 | 四小虎免费永久观看 | 色综合久久综合 | 99精品视频只99有精品 | 亚洲三级久久 | 中国国产aa一级毛片 | 午夜在线一区 | 香蕉视频在线免费看 | 亚洲va欧美va国产 | 亚洲成人网在线观看 | 国产成人小视频在线观看 | 国产露脸系列magnet | 最新男同志freevideos | 久草视频在线资源 | 亚洲天堂爱爱 | sihu永久在线播放地址 | 韩国美女高清爽快一级毛片 | 日本视频中文字幕 | 久久伊伊香蕉综合精品 | 欧美成人天天综合在线视色 |