Linux粘制位&强制位&冒险位

【o+t】 : 【粘制位】:【sticky】

\color{#376956}{解决的问题:}

当用户A,B分别在某目录dir下建立文件file1,file2时,用户A发现,自己可以删除用户B所建立的file2。某一天AB两人产生了矛盾,A萌生坏意,删掉了B的file2,于是B倒霉了。。。

为了解决上面的问题,我们将学习【粘制位】:即不同的用户在本目录下只能删除自己的文件,不能修改删除其他用户的文件。

\color{blue}{用法:}

chmod o+t dir/

chmod  1*** dir/
举例:
chmod 1744 dir/  ##在原设定的权限值前加个1

###防止普通用户B删除用户A的文件, \color{blue}{只针对目录生效!} ###

先总述一下下面实验的流程:

在root权限下创建两个用户A&B,创建一个满权限的目录(或者更改权限为777:chmod 777 /westos)
分别在A和B用户下创建/westos/file
发现A可以删除B所创建的file,B与之相同
回到root状态,输入【chmod 1777 /westos】,更改文件权限,在rwxrwxrwx后面+7
再次进入A或者B,发现不能删除他人文件

下面进入代码部分:

1.建立用户A和B,建立一个目录westos
在这里插入图片描述
2.查看了下目录westos的权限,然后我们给他赋予满权限
在这里插入图片描述
3.分别切换到A,B用户,A建立文件AAA;B建立文件BBB。用ls指令查看westos目录下的内容,分别为文件AAA和文件BBB
在这里插入图片描述
4.因为我们现在就处于B用户,所以直接来测试,去删除A创建的AAA,发现可以删除,那就删除吧。ls查看westos目录,发现确实AAA文件被删除了。exit退出B用户。
在这里插入图片描述
5.更改目录westos的权限,改为1777,ls -ld 查看其自身属性,发现drwxrwxrwt,最后的权限位为“t“。说明改变成功。我们再来切换到A用户,尝试删除B建立的BBB文件,发现不能删除。则实验成功。最后再检查一下,ls查看westos目录,确实BBB还在。
在这里插入图片描述
以上就是粘制位的说明。以及用法。底下再补一张用【chmod o+t的代码截图】:

在这里插入图片描述
简单说明一下上图:

1.建立目录XYY【可以看到,就在桌面】
2.查看目录XYY的权限
3.更改权限【o+t】
4.查看更改结果【发现权限位最后一位改为了t】
5.完成。


【g+s】 : 【强制位】:【sgid】

由来:每一个上班族都在为生活打拼着。每一天我们在公司都会做出来一些贡献,一些和工资等价值的东西。那么这些东西是属于谁呢?应该是属于公司吧。也就是说,是我们做出来的,但他的所有人应该是公司而不是我们。

\color{blue}{我们知道了粘制位只对目录生效;这里强制位对目录和文件表示不同含义}

###对目录:任何人在有sgid权限的目录中建立的文件都属于目录所有组
###对文件:只针对二进制可执行文件,当文件上有sgid时,任何人执行此文件产生的进程都属于文件所在组

用法:举例:

	二进制可执行文件:   /bin/watch
	>ls -l /bin/watch            ###查看        
	>/bin/watch -n 1 date        ###运行一个进程
	>ps -a -o user,group,comm | grep watch    ###监控进程和进程组并选出带watch的进程
	>chgrp westos /bin/watch     ###更改所在组为westos
	>/bin/watch -n 1 date        ###运行一个进程
	>ps -a -o user,group,comm    ###监控更改结果
	>chmod g+s /bin/watch        ###给文件权限,使任何人执行时此文件产生的进程都属于文件所在组
	>/bin/watch -n 1 date        ###运行一个进程
	>ps -a -o user,group,comm    ###监控进程所在组
	>useradd  li                 ###添加用户
	>su - li                     ###切换用户
        >/bin/watch -n 1 date        ###运行一个进程
	>ps -a -o user,group,comm    ###查看更改结果
          
chmod g+s    file|目录
chmod 2xxx   file|目录 

下面还是来进行代码演示:
\color{blue}{对文件:}
1.我们还是先建立两个用户A和B,然后建立目录westos,随后给目录满权限,使其他用户可以在此目录下创建文件。【-R是让其目录下已有文件也一并更改属性,在此不需要关注】。另外我们再打开一个shell执行watch -n 1 "ls -lR /westos ; ls -ld /westos"`来监控变化。准备工作完成后切换到A/B用户,建立文件。发现A建立的fileA,起所在组为A。B建立的fileB,所在组为B。

在这里插入图片描述
2.为了达到目的,我们更改westos目录的权限【chmod g+s /westos】,然后再切换到A用户,建立文件xyy。在监控程序中我们可以看到,新建立的文件xyy它的组变为了和目录一样的root。更改成功。
.在这里插入图片描述
在这里插入图片描述
如果想要对以前建立的文件的组进行更改,可以翻看之前的博客,采用chgrp命令进行更改【上一篇】

\color{blue}{对目录:}
代码演示:
1.我们先查看watch文件的属性,这是一个二进制可执行文件。随后另打开一个shell,输入/bin/watch -n 1 date ,产生一个watch进程,返回原本shell,用ps指令显示进程的属性,其所在组为root,为root用户所在组。
在这里插入图片描述
2.更改该二进制文件所在组,发现组不存在,我们就创建一下【组westos】。chgrp指令更改该二进制文件的所在组,随后再打开一个shell,输入 /bin/watch -n 1 date,开启第二个watch进程,其所在组还是用户root的组。
在这里插入图片描述
3.更改该二进制可执行文件watch的权限。再打开一个shell,还是输入 /bin/watch -n 1 date,开启第三个watch进程,发现其所在组为我们已经更改过的watch文件所在组westos。演示完成。

在这里插入图片描述
在这里插入图片描述
补充:这里给大家看一下g+s后的watch文件的属性:

ls -ld /bin/watch

在这里插入图片描述
注意:-rwxr-【s】r-x :即g权限的最后一位,变为了s。


【u+s】 : 【冒险位】:【suid】

###只针对二进制可执行文件,当文件上有suid时,任何人执行这个文件时产生的进程都属于设定好的文件所有人

内容参考【强制位:g+s】


                              大大的小小阳

猜你喜欢

转载自blog.csdn.net/dddxxy/article/details/89048358