文件特殊权限问题

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
仅此v而已
帖子: 13
注册时间: 2015-01-28 11:09
系统: ubuntu14.04

文件特殊权限问题

#1

帖子 仅此v而已 » 2015-02-26 11:00

看的鸟哥的书,讲文件特殊权限对suid,sgid,sbit不是很清楚,希望各位大神能给讲一下,还有suid仅对二进制程序有效,怎么判断是不是二进制程序 :em03
poloshiao
论坛版主
帖子: 18279
注册时间: 2009-08-04 16:33

Re: 文件特殊权限问题

#2

帖子 poloshiao » 2015-02-26 13:08

suid,sgid,sbit不是很清楚
http://blog.csdn.net/mypop/article/details/6176022
怎么判断是不是二进制程序
https://help.ubuntu.com/community/Insta ... _Binary.3F
Source or Binary?
rosynirvana
帖子: 893
注册时间: 2011-02-14 17:46

Re: 文件特殊权限问题

#3

帖子 rosynirvana » 2015-02-26 17:22

一个unix进程有3个id来参与这个过程(准确来说linux是4个,不过关系不大)
effective uid: 进行权限判断时,实际使用的id
real uid: 进程调用账户的id
saved uid: 保存状态用的一个量,作用在下面的例子里面解释

如果sbit打开了,程序在启动的时候(准确来说,被exec这一组system call装入内存时)会把effective uid和saved uid设置成文件所有者的id
例如,/usr/bin/passwd这个程序,它的sbit打开的,所有者是root,所以当它被装入内存时,effective uid和saved uid都会被设置成0 —— root的uid
然后,passwd需要打开/etc/shadow这个文件,系统进行权限判断时就会读取它的effective id,发现是0,所以允许了打开文件这个操作

如果effective uid是0,那么这个进程可以任意修改自身的effective uid; 否则只能把effective uid设置成real uid或saved uid
例子是这样的,例如apache服务器或者其他服务,最开始是以root账户启动的,权限太大,为了安全起见,就修改自身进程的effective uid
如果之后还要进行特权操作,那么可以再改回来。虽然这时候effective uid已经不是0了,但是saved uid还是0,非特权进程可以将自身的effective uid设置为saved uid

另外多说一句,个人不建议立刻去查阅setuid组system call和filesystem uid的相关手册内容,因为实在是太混乱了

group的情况类似,把上面所有user换成group就行了

sticky bit举个例子就清楚了,/tmp文件夹是777的权限,如果没有sticky bit,那么非特权用户1002就能删除用户1001的文件,如果有sticky bit,那么就不行,只有1001用户和root用户才可以
回复