linux特殊权限位之setuid、setgid和sticky



 我们登陆到系统之后,创建一个普通文件或者目录的时候,会有一个默认的权限。普通文件是644,目录文件是755,想必大家都知道这个是由umask这个值决定的。我们可以直接执行umask命令查看,linux系统默认的umask值是0022。想改变创建文件默认的权限,我们直接修改umask就可以,但是一般的权限都是通过777-022得到的默认权限位。022前面的这个0是什么呢?第一个0就是特殊权限位,下边我们就来跟大家说一下setuid、setgid和sticky这个三个特殊权限位。

1.suid,set uid:在一个程序或命令上添加setuid以后(u+s),这样属主有了s权限,意味着任何用户在执行此程序时,其进程的属主不再是发起者本人,而是这个程序的属主。最典型的一个例子就是passwd这个命令;

 普通用户运执行passwd命令来修改自己的密码,其实最终更改的是/etc/passwd这个文件。

我们知道/etc/passwd文件是用户管理的配置文件,只有root权限的用户才能更改。

1
2
[root@Vmware5 ~]# ls -l /etc/passwd
-rw-r--r--. 1 root root 981 Oct 25 01:00 /etc/passwd

 按照常规的逻辑思维,普通用户是修改不了/etc/passwd此文件的,但是在passwd这个命令上添加了setuid这个特殊权限位,普通账号临时变成root,就能间接修改自己账号的密码了。

1
2
[root@Vmware5 ~]# ls -l /usr/bin/passwd  (s就是suid位)
-rwsr-xr-x. 1 root root 30768 Feb 22  2012 /usr/bin/passwd

 设置setuid的方法:(其实前边提到过了参数是u+s)

1
2
3
4
5
chmod u(+|-)s /path/somefile
chmod 4664 /path/somefile
注意:
s:表示属主原来有执行权限
S:表示属主原来没有执行权限

实例演示:

添加一个名字为taokey的普通用户

1
[root@Vmware5 ~]# useradd taokey

把/etc/fsatb文件拷贝到/tmp目录下一份

1
2
[root@Vmware5 ~]# cp /etc/fstab /tmp/
[root@Vmware5 ~]# cd /tmp/

查看/tmp目录下fstab文件的属性

1
2
[root@Vmware5 tmp]# ll fstab
-rw-r--r--. 1 root root 899 Oct 25 00:16 fstab

把其他用户的读权限给去掉

1
2
3
[root@Vmware5 tmp]# chmod o-r fstab
[root@Vmware5 tmp]# ll fstab
-rw-r-----. 1 root root 899 Oct 25 00:16 fstab

切换到普通用户taokey

1
[root@Vmware5 tmp]# su - taokey

执行cat命令,看下是否可以查看fstab文件

1
2
[taokey@Vmware5 ~]$ cat /tmp/fstab
cat/tmp/fstab: Permission denied

由于other去掉了r权限,所有提示cat被拒绝

为了保留原始环境,把cat命令拷贝到/tmp目录一份

1
2
3
4
5
6
7
8
[root@Vmware5 ~]# cp /bin/cat  /tmp/
[taokey@Vmware5 tmp]$ ls -l fstab cat
-rwxr-xr-x. 1 root root 45224 Oct 25 00:21 cat
-rw-r-----. 1 root root   899 Oct 25 00:16 fstab
[taokey@Vmware5 tmp]$ ./cat fstab
./cat: fstab: Permission denied
[taokey@Vmware5 tmp]$ exit
logout

特换到root用户,添加setuid权限

1
[root@Vmware5 tmp]# chmod u+s cat
1
添加完s权限位之后,再切换到普通用户taokey,测试是否可以成功执行cat命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@Vmware5 tmp]# su - taokey
[taokey@Vmware5 ~]$ cd /tmp/
[taokey@Vmware5 tmp]$ ./cat fstab
#
# /etc/fstab
# Created by anaconda on Thu Oct 24 23:49:23 2013
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=b49ee2b3-75aa-4227-a9ff-5d0d990af0fd /                       ext4    defaults        1 1
UUID=3a69daa4-b393-4694-abbb-b856345b376d /boot                   ext4    defaults        1 2
UUID=34f85ed8-5f68-4fdc-8aa0-e50d2f9f012e /home                   ext4    defaults        1 2
UUID=95d97c70-9291-499b-ac16-a38508a85e4d swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0

 切换到普通用户之后,可以成功执行cat命令,查看/tmp/fstab文件,就是因为tmp目录下cat这个命令上添加了s权限位。

1
2
[taokey@Vmware5 tmp]$ ll cat
-rwsr-xr-x. 1 root root 45224 Oct 25 00:21 cat

注意:设置suid这个特殊权限很危险,不到万不得已,做好还是不要使用。


2.Sgid,Set id,属组有s权限,意思就是执行此程序时,此进程的属组不再是运行者本人所属的基本组,而是此程序文件的属组。Set gid权限如果给文件设置,是让运行此文件的其它用户具有这个文件的属组特性;给目录设置Set gid权限,任何用户在该目录下创建的文件,则该文件属组都和目录的属组一致。

工作中经常会遇到这样一个问题?

运维和开发同属于技术部,用户同属于一个组,文件在一个目录中,运维人员和开发人员可以相互之间访问自己的文件,要是一个一个修改属组就有点麻烦,这时候用sgid就会很方便的解决这个问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
例子:
[root@Vmware5 tmp]# usermod -a -G mygrp xen
[root@Vmware5 tmp]# usermod -a -G mygrp kvm
[root@Vmware5 tmp]# mkdir /tmp/test
[root@Vmware5 tmp]# ls -ld /tmp/test/
drwxr-xr-x. 2 root root 4096 Oct 25 00:48 /tmp/test/
[root@Vmware5 tmp]# chmod g+w /tmp/test
[root@Vmware5 tmp]# ls -ld /tmp/test/
drwxrwxr-x. 2 root root 4096 Oct 25 00:48 /tmp/test/
[root@Vmware5 tmp]# chown :mygrp /tmp/test
[root@Vmware5 tmp]# ls -ld /tmp/test
drwxrwxr-x. 2 root mygrp 4096 Oct 25 00:48 /tmp/test
[root@Vmware5 ~]# su - xen
[xen@Vmware5 ~]$ cd /tmp/test
[xen@Vmware5 test]$ touch a.xen
[xen@Vmware5 test]$ ls -l
total 0
-rw-rw-r--. 1 xen xen 0 Oct 25 00:50 a.xen
[root@Vmware5 ~]# su - kvm
[kvm@Vmware5 ~]$ cd /tmp/test
[kvm@Vmware5 test]$ touch a.kvm
[kvm@Vmware5 test]$ ls -l
total 0
-rw-rw-r--. 1 kvm kvm 0 Oct 25 00:51 a.kvm
-rw-rw-r--. 1 xen xen 0 Oct 25 00:50 a.xen

kvm用户想往xen创建的文件a.xen中写东西,但是被拒绝了。

1
2
[kvm@Vmware5 test]$ echo "hello" >>a.xen
-bash: a.xen: Permission denied

咱们在用root,给/tmp/test文件添加一个sgid权限位,然后再测试下。

1
2
3
[root@Vmware5 ~]# chmod g+s /tmp/test
[root@Vmware5 ~]# ls -ld /tmp/test
drwxrwsr-x. 2 root mygrp 4096 Oct 25 00:51 /tmp/test

切换到xen普通用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@Vmware5 ~]# su - xen
[xen@Vmware5 test]$ touch b.xen
[xen@Vmware5 test]$ ll b.xen
-rw-rw-r--. 1 xen mygrp 0 Oct 25 01:01 b.xen
[root@Vmware5 ~]# su - kvm
[kvm@Vmware5 ~]$ echo "hello" >>b.xen
[kvm@Vmware5 ~]$ cat b.xen
hello
[kvm@Vmware5 ~]$ touch b.kvm
[root@Vmware5 ~]# su - xen
[xen@Vmware5 ~]$ cd /tmp/test/
[xen@Vmware5 test]$ echo "My name is taoyake." >>b.kvm
[xen@Vmware5 test]$ cat b.kvm
My name is taoyake.

可以成功写进去,这个就是因为在/tmp/test文件设置了sgid权限位

但是这个不但可以能成功写进去,还可以删除文件,我们只能自己删除自己的文件,不想让其他用户删除我们的文件,这时候怎么办呢?

1
2
3
4
5
6
7
例如:
[xen@Vmware5 test]$ rm b.kvm
[xen@Vmware5 test]$ ll
total 0
-rw-rw-r--. 1 kvm kvm   0 Oct 25 00:51 a.kvm
-rw-rw-r--. 1 xen xen   0 Oct 25 00:50 a.xen
-rw-rw-r--. 1 xen mygrp 0 Oct 25 01:01 b.xen


3.这时候就用到了粘滞位,t,sticky,附加other的权限上,表现为t。

chmod o+|-t /path/somefile

1
2
3
4
5
6
7
8
9
10
11
12
实例操作:
[root@Vmware5 ~]# ls -ld /tmp/test
drwxrwsr-t. 2 root mygrp 4096 Oct 25 01:10 /tmp/test
[xen@Vmware5 test]$ ls
a.kvm  a.xen  b.xen  c.kvm
[xen@Vmware5 test]$ echo "beyond" >>c.kvm
[xen@Vmware5 test]$ cat c.kvm
beyond
[xen@Vmware5 test]$ echo "">c.kvm
[xen@Vmware5 test]$ cat c.kvm
[xen@Vmware5 test]$ rm -rf c.kvm
rm: cannot remove `c.kvm': Operation not permitted

可以添加和任意修改其他用户的文件,就是不能删除其他用户的文件,自己可以删除自己创建的文件。

1
2
3
4
5
6
7
8
9
10
11
[kvm@Vmware5 test]$ touch c.kvm
[kvm@Vmware5 test]$ ls
a.kvm  a.xen  b.xen  c.kvm
[kvm@Vmware5 test]$ rm c.kvm
[kvm@Vmware5 test]$ ls
a.kvm  a.xen  b.xen
[xen@Vmware5 test]$ ll
total 0
-rw-rw-r--. 1 kvm kvm   0 Oct 25 00:51 a.kvm
-rw-rw-r--. 1 xen xen   0 Oct 25 00:50 a.xen
-rw-rw-r--. 1 xen mygrp 0 Oct 25 01:01 b.xen

表示方法: 
将三个特殊位的用八进制数值表示,放于 u/g/o 位之前。其中 suid :4 sgid:2 sticky:1.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352129.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js获取当前时间,并实时更新

可以使用JavaScript的Date()对象来获取当前时间&#xff0c;并使用setInterval()函数实现实时更新。 以下是一个示例代码&#xff1a; <p id"time"></p>function updateTime() {var now new Date();var hours now.getHours();var minutes now.getMi…

11.23日常

整理相关资料&#xff0c;阅读c#课本转载于:https://www.cnblogs.com/JL3Peanut/p/10032318.html

python requests 10041报错_pythonrequests返回unicode异常消息(或如何设置请求区域设置)...

您可以尝试os.strerror&#xff0c;但它可能不会返回任何内容或相同的非英语字符串。在ENGLISH_WINDOWS_SOCKET_MESSAGES {10004: "Interrupted function call.",10013: "Permission denied.",10014: "Bad address.",10022: "Invalid argu…

深度学习(花书)

1.英文主页http://www.deeplearningbook.org/lecture_slides.html 2.中文主页https://github.com/exacity/deeplearningbook-chinese 在线阅读https://exacity.github.io/deeplearningbook-chinese/转载于:https://www.cnblogs.com/Eufisky/p/10010046.html

表面配准论文1--基于高阶图匹配方法的稠密表面配准

Dense Non-rigid Surface Registration Using High-Order Graph Matching 一.摘要提出高阶图匹配方程来解决非刚性表面配准问题&#xff0c;单阶项描述了几何和外观相似性&#xff08;曲率和纹理&#xff09;&#xff0c;高阶项对内部嵌入能量&#xff08;intrinsic embedding …

Apache Spark软件包,从XML到JSON

Apache Spark社区为扩展Spark付出了很多努力。 最近&#xff0c;我们希望将XML数据集转换为更易于查询的内容。 我们主要对每天进行的数十亿笔交易之上的数据探索感兴趣。 XML是一种众所周知的格式&#xff0c;但是有时使用起来可能很复杂。 例如&#xff0c;在Apache Hive中&a…

js中几种实用的跨域方法原理详解

这里说的js跨域是指通过js在不同的域之间进行数据传输或通信&#xff0c;比如用ajax向一个不同的域请求数据&#xff0c;或者通过js获取页面中不同域的框架中(iframe)的数据。只要协议、域名、端口有任何一个不同&#xff0c;都被当作是不同的域。 下表给出了相对http://store.…

python中matplotlib画图_Python-matplotlib画图(莫烦笔记)

这个是我对于莫烦老师的matplotlib模块的视频做的一个笔记。1.前言Matplotlib是一个python的 2D绘图库&#xff0c;它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过Matplotlib&#xff0c;开发者可以仅需要几行代码&#xff0c;便可以生成绘图&#xff0c…

js词法分析

javascript词法分析函数在运行的瞬间&#xff0c;生成一个活动对象&#xff08;Active Object&#xff09;&#xff0c;简称AO&#xff1b;具体分为两个阶段&#xff1a;一.分析阶段JavaScript代码运行前有一个类似编译的过程即词法分析&#xff0c;词法分析主要有三个步骤&…

如何使一维数组一行一行的输出成二维数组的格式

以9个元素的数组为例&#xff0c;输出3x3的格式 基本思想是对每一个元素的index进行检查&#xff0c;当index是3,6,9等可以被3整除的数时&#xff0c;在打印它们之前&#xff0c;先打印一个\n。注意0也可以被3整除&#xff0c;但是此时不打印\n&#xff0c;所以要加上i>0的…

python我想对你说_python学习第3天-----字典、解构

1.字典1)定义&#xff1a;查找速度快&#xff0c;效率高&#xff1b;用{}括起来&#xff0c;内部使用key:value的形式来保存数据&#xff1b;键值对是无序的&#xff0c;不是按照定义的方式保存数据的(类似于json文件)&#xff0c;例如&#xff1a; {jay:周杰伦,jj::林俊杰}注&…

bms_output.put_line使用方法

https://blog.csdn.net/sxww321/article/details/4020300转载于:https://www.cnblogs.com/diyunpeng/p/10022923.html

linux 权限掩码 umask

一 权限掩码umaskumask是chmod配套的&#xff0c;总共为4位&#xff08;gid/uid,属主&#xff0c;组权&#xff0c;其它用户的权限&#xff09;,不过通常用到的是后3个&#xff0c;例如你用chmod 755 file&#xff08;此时这文件的权限是属主读(4)写(2)&#xff0b;执行(1),同…

ant 构建_有用的Ant构建标签

ant 构建问题&#xff1a; 如何在ant文件中执行以下任务&#xff1f; 制作zip文件。 运行命令。 将文件复制到远程计算机。 在远程Linux机器上运行命令。 打开输入框并响应输入值。 拨打蚂蚁电话。 答案&#xff1a; 1.制作zip文件&#xff1a; 以下是在ant中制作zip文…

C++文件交互(txt、excel)

前些天完成了计算机视觉大作业&#xff0c;《基于双目立体视觉的深度图像生成》&#xff0c;虽然刚开始觉得作业很难&#xff0c;也没找到现成的程序&#xff0c;但做到最后还是学到很多知识&#xff0c;get到很多技能&#xff0c;现在一一总结下来。 1、C输出数据到txt 包含…

基类数组存放派生类_永远不要将派生类数组赋值给基类类型指针

C.152: Never assign a pointer to an array of derived class objects to a pointer to its baseC.152:永远不要将派生类数组的指针赋值给基类指针Reason(原因)Subscripting the resulting base pointer will lead to invalid object access and probably to memory corruptio…

路由器和网关的区别?

1&#xff0e;网关实质上是一个网络通向其他网络的IP地址。比如有网络A和网络B&#xff0c;网络A的IP地址范围为“192.168.1.1~192. 168.1.254”&#xff0c;子网掩码为255.255.255.0&#xff1b;网络B的IP地址范围为“192.168.2.1~192.168.2.254”&#xff0c;子网掩码为255.2…

C++error:找不到指定文件

做作业遇到这样的问题&#xff1a;新建了一个C工程&#xff0c;在内部新建了a.cpp a.h文件&#xff0c;将另一个工程里面的内容复制了过来&#xff0c;但是运行显示“找不到指定文件”&#xff0c;找了一下&#xff0c;发现虽然我的项目源文件里包换这个cpp文件&#xff0c;但是…

MVC 1.0的可能方法

如《 Java EE 8积极路线图》中所述&#xff0c;Java EE 8计划中未包含MVC 1.0。 我的看法以及在JavaOne期间与我交谈过的几个人的指示&#xff0c;这样做的可能结果是&#xff1a; MVC已完全删除 MVC继续并包含在Java EE 8&#xff08;JSR 366&#xff09;中 MVC继续作为Ja…