- SUID:需要作用在二进制可执行文件上才有意义,以往某用户在运行某个程序时比如cat,cat进程的权限会是启动用户的权限,这个进程的属主就是启动用户;而有SUID后的程序,用户在运行某程序时,相应进程的属主是程序文件自身的属主,而不是启动者。比如/usr/bin/passwd,每个用户都可以修改自己的密码,将密码写入shadow
-
- 设置SUID:chmod u+|- s FILE,如果FILE原本有x权限,则SUID显示为s,否则显示为S,本来SUID就是要作用在二进制文件上,如果是S就失去了意义
- 例:cat有了SUID后,用其他用户来启动cat 就能访问shadow了
- SGID:当目录属组有写权限,且有SGID权限时,当有些用户的附加组也为该目录的属组时,他们以属组身份在此目录中新建文件或目录时,新文件的属组不是用户的基本组,而是此目录的属组,因此他们所创建的文件彼此都可以修改。如果直接上其他人有写权限也必然可以是他们可以彼此修改文件,但是这样做是非常危险的操作。而作为普通用户来讲,怎么将自己的文件共享给别人,让别人来写,普通用户又不能修改属主属组,只能修改权限,所以需要使用SGID机制
- SGID:作用于二进制文件上,执行二进制文件的用户会继承二进制文件所属组的权限去访问文件;作用于目录,目录内新建文件的所属组自动继承目录的所属组
- 设置SGID:chmod g+|- s DIRECTORY
- 例:有一个开发团队develop team,团队里有三个人hadoop,hbase,hive,要求他们任意一人在/tmp/project里所创建的文件,其他的两个人都能编辑访问
- 已经在该目录中的用户,root在改了目录的写权限后,该用户依然不能在目录中创建文件,需要退出目录后重新进才能创建文件
- 注意:用户所创建的文件,文件的所属组是用户的基本组,但基本组未必有写权限
- 让其有SGID权限
- 再创建文件,文件不再以用户的基本组作为属组,而是以目录的属组作为属组
- 但是hadoop用户能删掉hbase用户的文件,为了避免这种情况发生就需要Sticky
- Sticky:用户在一个具有写权限的目录里,可以删除该目录中的任何文件,无论这些文件的权限位如何设置。Sticky的意义在于,若在一个公共目录上设置Sticky 位,每个人都可以创建文件,删除自己的文件,但不能删除别人的文件。sticky 设置在文件上无意义
- 设置Sticky:chmod o+|- t DIRECTORY,如果是T表示Sticky位没有x权限失去意义
- 特殊权限位用数字表示:( SUID:4 SGID:2 Sticky:1 )
- chmod 5755 /tmp/test :最前的数字5表示SUID+Sticky,然后这个目录的普通权限位是755
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/96241