setuid :其他用户在执行该文件时具有该文件拥有者(root的uid为0)对该文件的访问权,其EUID为该可执行文件的拥有者的ID值,当命令执行完毕,此用户作为文件拥有者的身份也随之消失,setuid只对binary file有效,标识在目录中将没有任何意义,还有一点就是当其它用户使用带用setuid,setgid,stick标识的命令时,自己对此命令也必需有X(执行)的权限,否则一切都免谈;
setgid:其他运行该文件的用户所具有的组权限为该文件拥有者所在组的权限,运行该可执行文件时EGID即为该可执行文件的拥有组的GID,setgid如果标识在文件中的话,那么执行用户将会拥有此命令所属组的权限,如果标识在目录中,那么执行者将在此目录下建立的目录以及文件所属将会是目录的所属组;
stick:用于对公用目录中的文件进行保护,只能添加不能删除,stick只对文件有效;
setuid/setgid/stick,对应的权限数值依次为4000/2000/1000。
对于四位数字的权限,最前面一位是setuid/setgid/stick,后三位是u/g/o对应的r/w/x权限。
setuid标志出现在文件权限的u段,setgid标志出现在文件权限的g段,stick标志出现在文件权限的o段。这些标志都出现在各段的“执行”位上,其中setuid/setgid的标志为“s”,stick标志为“t”。
由于实际文件、目录的属主、权限各不相同,这些标志设置后,权限的实际综合效果可能会使这些设置无效,这时,setuid的标志由“s”变为“S”,setgid的标志由“s”变为“l”(小写“L”),stick的标志由“t”变为“T”。
3者综合使用,就可以有效地建立起一套共享机制,使符合条件的他人可以方便地使用别人放在公用目录中的可执行文件,而又确保不会因目录公用而造成他人随意地乱删。
权限的设置方法如下:
例:只设setuid:chmod 4xxx filename(xxx为一般读、写、执行权限)
或chmod u+s filename
只设setgid:chmod 2xxx filename
或:chmod g+s filename
同时设setuid 和setgid:chmod 6xxx filename
或:chmod u+s g+s filename
取消两种权限:chmod 0xxx filename
只设stick:chmod 1xxx filename
或:chmod o+t filename
对于函数setuid(),seteuid(),setreuid(),setfsuid()
setuid(uid) 用来重新设置执行目前进程的用户识别码;
seteuid(euid)用来重新设置执行目前进程的有效用户识别码,相当于setreuid(-1,euid);
setreuid(ruid,euid)将ruid设置为目前进程的真实用户识别码,将euid设置为目前进程的有效用户识别码,若ruid或euid为-1,则对应识别码不会改变;
setfsuid(fsuid)用来重新设置目前进程的文件系统的用户识别码;
文章评论(0条评论)
登录后参与讨论