setuid,setgid,sticky权限分析

简介:

概述:

Linux下创建新文件时,默认UID和GID来分配文件权限。想让其他人也能访问文件 ,要么改变其他用户所在安全组的访问权限,要么给文件分配一个新的包含其他用户的默认属组。在一台拥有多人权限的Linux上,创建文档并共享 ,这很烦琐,幸好Linux为我们提供解决的简单方法;Linux还为每个文件和目录存储了3个额外的信息位。

SUID

定义:设置用户ID(SUID)当文件被用户使用时,程序会以文件属主的权限运行。
现实中的应用:
查看/usr/bin/passwd 与/etc/passwd文件的权限

san@san-ubuntu16:~$ ls -alh /etc/passwd
-rw-r--r-- 1 root root 2.4K 1210 14:06 /etc/passwd

san@san-ubuntu16:~$ ls -alh /usr/bin/passwd 
-rwsr-xr-x 1 root root 53K 517  2017 /usr/bin/passwd

说明:
由于/etc/passwd文件存储的是用户的账号与密码信息,因此它的属主和属组都是root系统管理员;并且通常只有root才能读写修改,属组和其他用户只读;
/usr/bin/passwd是执行修改和查看/etc/passwd文件的程序,但从权限上看,/etc/passwd仅有root拥有写的权限,可实际上每个用户都可以通过/usr/bin/passwd命令去修改这个文件(普通用户不加sudo只能修改自己的,加sudo输入root密码拥有root权限除外),于是这里就涉及了linux里的特殊权限setuid,正如-rwsr-xr-x中的s 就是设置了SUID
作为普通用户是没有权限修改/etc/passwd文件的,但给/usr/bin/passwd以suid权限后,普通用户就可以通过执行passwd命令,临时的拥有root权限,去修改/etc/passwd文件了
同样的例子就是ping命令
添加SUID权限:
chmod u+s “文件”

SGID

定义:设置组ID(SGID)对文件来说,程序会以文件属组的权限运行;对于目录来说,目录中创建的新文件会以目录的默认属组作为默认属组。
添加SGID权限
chmod g+s "目录"
实验:
/home/san/test/目录下有一个test2目录
默认权限如下:

san@san-ubuntu16:~/test$ ls -alh
drwxrwxr-x  2 san san 4.0K 12月 10 14:05 test2

通过:
chmod g+s test2 对test2目录设置SGID权限如下:

san@san-ubuntu16:~/test$ chmod g+s test2/
san@san-ubuntu16:~/test$ ls -alh
总用量 48K
drwxr-xr-x  3 san san 4.0K 12月 10 14:05 .
drwxr-xr-x 60 san san 4.0K 12月 10 13:05 ..
drwxrwsr-x  2 san san 4.0K 12月 10 14:05 test2

此时切换到root用户再到tes2目录下创建一个文件a.txt

san@san-ubuntu16:~/test$ su root
密码:                               #输入root密码
root@san-ubuntu16:/home/san/test/test2# ls -alh
总用量 8.0K
drwxrwsr-x 2 san  san 4.0K 12月 10 14:24 .
drwxr-xr-x 3 san  san 4.0K 12月 10 14:05 ..
**-rw-r--r-- 1 root san    0 12月 10 14:24 a.txt**

由于test2加了SGID权限,所以切换到root时创建的文件默认属组已经变成了san组。

sticky

粘贴位(sticky),对文件目录添加了sticky权限后,此目录下的文件或目录,是谁创建的只有创建者才能删除(root除外),即使在这个拥有sticky目录下创建的文件是777权限,非创建本身(除root) 其他用户都不能删除,Linux系统中/tmp目录就是这个权限。
san@san-ubuntu16:/tmp$ ls -alh /
drwxrwxrwt 10 root root 4.0K 12月 10 14:38 tmp

实验:
现系统中有两个用户 一个san 一个dong

san账号切换到/tmp下创建san.txt 修改权限为777
san@san-ubuntu16:/tmp$ touch san.txt
san@san-ubuntu16:/tmp$ chmod 777 san.txt
dong账号切换到/tmp下创建dong.txt   修改权限为777
dong@dong-ubuntu16:/tmp$ touch dong.txt
dong@dong-ubuntu16:/tmp$ chmod 777 dong.txt
最后的权限如下:
san@san-ubuntu16:/tmp$ ls -alh |egrep "*.txt"
-rwxrwxrwx  1 dong dong    0 12月 10 14:36 dong.txt
-rwxrwxrwx  1 san  san     0 12月 10 14:35 san.txt

近道理说san用户 对dong.txt文件也是可执行和修改删除的,我们来删除下试试看
san@san-ubuntu16:/tmp$ rm -rf dong.txt
rm: 无法删除'dong.txt': 不允许的操作

没有 权限,这就是sticky权限起的作用。
我们自己也可以创建目录并赋予sticky权限
设置sticky权限:
chmod o+t "目录"

总结

SUID 主要对可执行文件的执行有效,当可执行文件设置了SUID后,其他用户(普通用户,即原本对这个可执行文件没有权限的用户)运行这个文件时,以该文件的属主权限临时来运行.
SGID对文件和目录均有效,对于文件,程序将在文件用户组的权限下运行;当目录设置SGID权限时,其下的所有文件或目录的默认属组都和父目录(设置SGID)保持一致;
STICKY粘着位,进程结束后,文件仍然保留在内存中;针对目录添加时,其目录下的文件或目录,只有创建本人完全拥有,非创建者或root不能删除修改,即使这个文件是777权限.










本文转自 dyc2005 51CTO博客,原文链接:http://blog.51cto.com/dyc2005/2049130,如需转载请自行联系原作者
目录
相关文章
|
传感器 监控 Shell
|
存储 网络协议 安全
必知的技术知识:DNS资源纪录(ResourceRecord)介绍
必知的技术知识:DNS资源纪录(ResourceRecord)介绍
|
算法 Linux 数据安全/隐私保护
Linux权限管理:深入理解setuid、setgid、seteuid和setegid
Linux权限管理:深入理解setuid、setgid、seteuid和setegid
1800 0
|
10月前
|
安全 网络安全 KVM
Ansible多机部署KVM虚拟机——Ansible安全基线配置(二)
本教程介绍如何使用Ansible在多台宿主机上批量部署KVM虚拟机,结合Tailscale与NFS实现安全镜像共享和网络互联。涵盖用户配置、KVM环境初始化、动态创建/删除VM及自动化网络设置,助力构建高效、安全的虚拟化基础设施。(239字)
656 4
|
Linux 数据安全/隐私保护
Linux命令setfacl详解
`setfacl`是Linux中用于设置文件访问控制列表的命令,提供比传统权限更细粒度的控制。它允许为特定用户或组添加、修改或删除权限,适用于多用户环境和复杂场景。常用参数包括`-m`(修改规则)、`-x`(删除规则)、`-R`(递归设置)和`-d`(设置默认ACL)。例如,`setfacl -m u:user1:rw- file.txt`给用户`user1`赋予文件`file.txt`的读写权限。记得在使用前确认文件系统支持ACL,并谨慎规划和审查权限设置。
|
存储 关系型数据库 数据库
RHCA认证学习分享
RHCA认证学习分享
586 5
|
关系型数据库 MySQL 应用服务中间件
|
运维 物联网 Linux
嵌入式面试求职分享(经典)
嵌入式面试求职分享(经典)
1090 0
|
IDE 编译器 开发工具
QT应用编程: win7+vs2010+QT4.8.5开发环境搭建
QT应用编程: win7+vs2010+QT4.8.5开发环境搭建
825 0
QT应用编程: win7+vs2010+QT4.8.5开发环境搭建
|
网络协议 Linux 网络安全
Centos7 防火墙策略rich-rule 限制ip访问-----图文详解
Centos7 防火墙策略rich-rule 限制ip访问-----图文详解
4164 0