免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3043 | 回复: 10
打印 上一主题 下一主题

关于文件权限的特殊属性suid的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-02 10:55 |只看该作者 |倒序浏览
          test_stat是一个由C语言编译得到的二进制文件。我在root权限下使用chmod 4700将其权限设置好。然后进入一个普通用户,使用./test_stat却提示权限不足。这是为什么呢?suid的设置的意思不是使普通用户对该二进制也能够行使root的权限吗?如果您知道原因,请告诉小弟我,非常感谢!

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2012-04-02 11:13 |只看该作者
neilhappy 发表于 2012-04-02 10:55
test_stat是一个由C语言编译得到的二进制文件。我在root权限下使用chmod 4700将其权限设置好。然 ...


你明白 700 是什麼意思麼?

论坛徽章:
0
3 [报告]
发表于 2012-04-02 11:17 |只看该作者
回复 2# MMMIX
700,8进制的rwx。我这样做后,test_stat的权限显示是rws------。


   

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2012-04-02 11:34 |只看该作者
neilhappy 发表于 2012-04-02 11:17
回复 2# MMMIX
700,8进制的rwx。我这样做后,test_stat的权限显示是rws------。


其他人連讀、執行的權限都沒有,如何執行這個程序?

论坛徽章:
0
5 [报告]
发表于 2012-04-02 11:49 |只看该作者
MMMIX 发表于 2012-04-02 11:34
其他人連讀、執行的權限都沒有,如何執行這個程序?

您好,非常感谢您的回复。我是对suid这个特殊属性有疑惑。根据其定义,是在执行该程序的时候使得普通用户拥有其文件所有者的权限。在普通用户执行test_stat程序时,其所有者拥有rwx的权限,我无法理解为何会权限不够。应该是我对suid的理解有误,能否请您简单的讲一下。我一直无法理解。

论坛徽章:
0
6 [报告]
发表于 2012-04-02 11:50 |只看该作者
MMMIX 发表于 2012-04-02 11:34
其他人連讀、執行的權限都沒有,如何執行這個程序?

如果此时其他用户都拥有读,执行的权限,那么suid这个特殊属性的作用又体现在哪里呢?

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
7 [报告]
发表于 2012-04-02 12:14 |只看该作者
neilhappy 发表于 2012-04-02 11:49
在普通用户执行test_stat程序时,其所有者拥有rwx的权限,我无法理解为何会权限不够。


test_stat 的權限為 700,這個權限控制的是用戶對文件 test_stat 本身的訪問,用戶要執行這個文件,就要對其有讀和執行的權限。

當一個進程啓動後,可能要訪問其它一些資源,例如打開文件,對這個的控制是通過進程的 effective uid 實現的,非 set uid 程序,啓動後 effective uid 就是啓動它的用戶的 uid,而 set uid 程序,啓動後 effective uid 是程序文件所有者的 uid。例如用戶要修改密碼,就要修改 /etc/passwd (或 /etc/shadow)文件,但這個文件只有 root 用戶有權限修改,通過給 passwd 設置 set uid 位,可以讓非 root 用戶執行它的時候,也能修改 /etc/passwd。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
8 [报告]
发表于 2012-04-02 12:22 |只看该作者
neilhappy 发表于 2012-04-02 11:50
如果此时其他用户都拥有读,执行的权限,那么suid这个特殊属性的作用又体现在哪里呢?


set uid 要起作用,前提是用戶要能執行這個文件,而用戶執行這個文件的前提是擁有對其的讀和執行權限。

论坛徽章:
0
9 [报告]
发表于 2012-04-02 13:01 |只看该作者
MMMIX 发表于 2012-04-02 12:22
set uid 要起作用,前提是用戶要能執行這個文件,而用戶執行這個文件的前提是擁有對其的讀和執行權限。

     非常感谢。我终于明白了suid的含义了。我之前是理解错了。suid是告诉内核,当执行该程序的时候,认为是文件的所有者在执行这个程序。我一直理解为只要设置了suid就是意味着不管group,other的权限是怎样,所有用户都可以执行该程序。  
    我现在的理解是:只有当前用户拥有执行该程序的权限后,在执行该程序,也就是test_stat的时候,才在程序执行期间拥有test_stat文件所有者的权限。
    还想问一下您,我写了个小程序,来验证这种观点,不知道是否对,想问一下您:test.c的所有者是root,在test.c中,我使用read系统调用来读取test.c的内容,而test.c只有root才能够读内容。编译后生成test二进制文件,设置suid,chmod 4701 test.  我觉得这个程序就证明了我上面的理解,想请教一下您这种想法是否正确。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
10 [报告]
发表于 2012-04-02 14:52 |只看该作者
neilhappy 发表于 2012-04-02 13:01
test.c的所有者是root,在test.c中,我使用read系统调用来读取test.c的内容,而test.c只有root才能够读内容。编译后生成test二进制文件,设置suid,chmod 4701 test.  我觉得这个程序就证明了我上面的理解,想请教一下您这种想法是否正确。


想法是對的,但 test 的權限不對,其它人沒有讀權限。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP