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

2024-05-09 14:08

本文主要是介绍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.

这篇关于linux特殊权限位之setuid、setgid和sticky的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/973605

相关文章

linux hostname设置全过程

《linuxhostname设置全过程》:本文主要介绍linuxhostname设置全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录查询hostname设置步骤其它相关点hostid/etc/hostsEDChina编程A工具license破解注意事项总结以RHE

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

在Linux终端中统计非二进制文件行数的实现方法

《在Linux终端中统计非二进制文件行数的实现方法》在Linux系统中,有时需要统计非二进制文件(如CSV、TXT文件)的行数,而不希望手动打开文件进行查看,例如,在处理大型日志文件、数据文件时,了解... 目录在linux终端中统计非二进制文件的行数技术背景实现步骤1. 使用wc命令2. 使用grep命令

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

基于Linux的ffmpeg python的关键帧抽取

《基于Linux的ffmpegpython的关键帧抽取》本文主要介绍了基于Linux的ffmpegpython的关键帧抽取,实现以按帧或时间间隔抽取关键帧,文中通过示例代码介绍的非常详细,对大家的学... 目录1.FFmpeg的环境配置1) 创建一个虚拟环境envjavascript2) ffmpeg-py

CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比

《CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比》CSS中的position属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布... css 中的 position 属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布局和层叠关

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与