Linux下权限设置之suid、sgid、sticky

简介: Linux下权限设置之suid、sgid、sticky

Linux下权限设置之suid、sgid、sticky
linux文件普通权限rwx
Linux中文件的普通权限一般为:rwx,对应与数字表示:421,除此之外,文件还有三种特殊权限,就这是我们本节要讲的三种特殊文件权限。

linux文件特殊权限 suid、sgid、sticky
linux文件的三种特殊权限分别是:suid权限、sgid权限、sticky权限;其中suid权限作用于文件属主,sgid权限作用于属组上,sticky权限作用于other其他上。

suid权限
作用:让普通用户临时拥有该文件的属主的执行权限,suid权限只能应用在二进制可执行文件(命令)上,而且suid权限只能设置在属主位置上。

suid权限使用s表示,增加权限u+s,移除权限u-s;
suid权限也可以使用数字形式表示,0表示去除suid权限,4表示添加suid权限,而且是在原权限的数字表达形式开头加0或4,如:0755移除suid权限,4755添加suid权限。

例如:普通用户执行执行passwd命令时需要去修改/etc/shaow等文件,但ll /etc/shaow发现该文件没有任何权限,即普通用户对/etc/shaow文件是没有写入权限的,所以普通用户是怎么实现成功修改自己的密码的呢?答案是临时拥有了root权限(root超级管理员可以对任何文件进行修改)来实现密码的修改,suid权限只能应用在二进制可执行文件上。

[root@localhost ~]# ll /etc/shadow #这个文件没有任何权限,只有root超级管理员才能修改---------- 1 root root 1575 Oct 5 22:48 /etc/shadow[root@localhost ~]# ll /usr/bin/passwd -rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd #有个suid权限,这就说明了普通用户执行passwd命令时临时提权到root权限了,所以才有root权限才写到shadow文件

去除suid权限suid权限的去除可以使用数字或字母的形式添加,如果使用数字,0表示去除权限,4表示添加权限,而且是在原权限的数字表达形式开头加0或4,如下:

[root@localhost ~]# ll /bin/passwd #查看passwd命令的权限,有suid权限-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /bin/passwd #查看passwd命令的权限,有suid权限[root@localhost ~]# chmod 0755 /usr/bin/passwd #在原数字表达权限前加0就表示去除suid权限(命令等价于chmod u-s /usr/bin/passwd)[root@localhost ~]# ll /usr/bin/passwd #查看passwd命令的权限,没有了suid权限,但这时任何普通用户都修改不了密码,如前面介绍的那样,因为任何普通用户都对shadow文件没有写入权限 -rwxr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd

增加suid权限

[root@localhost ~]# chmod 4755 /usr/bin/passwd #在原数字表达权限前加4就表示添加suid权限(命令等价于chmod u+s /usr/bin/passwd)

[root@localhost ~]# ll /usr/bin/passwd

-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd #suid权限已经添加成功,普通用户可以正常修改他们的密码

[root@localhost ~]#

sgid权限
作用:sgid权限一般应用在目录上,当一个目录拥有sgid权限时,任何用户在该目录下创建的文件的属组都会继承该目录的属组。

sgid权限也使用s表示,增加权限g+s,移除权限g-s;
sgid权限也可以使用数字形式表示,0表示去除sgid权限,2表示添加sgid权限,而且是在原权限的数字表达形式开头加0或2,如:0755移除sgid权限,2755添加sgid权限。

增加sgid权限
sgid权限也使用s表示,增加权限g+s,移除权限g-s;
sgid权限也可以使用数字形式表示,0表示去除sgid权限,2表示添加sgid权限,而且是在原权限的数字表达形式开头加0或2,如:0755移除sgid权限,2755添加sgid权限。

演示示例:

[zhangsan@localhost ~]$ ll -d Test/
drwxrwxr-x 2 zhangsan nginx 6 Oct 13 20:44 Test/ #查看目录的权限,都是普通权限,属主是zhangsan,属组是nginx
[zhangsan@localhost ~]$ touch Test/file1 #创建一个file1文件
[zhangsan@localhost ~]$ ll Test/file1
-rw-rw-r-- 1 zhangsan zhangsan 0 Oct 13 20:47 Test/file1 #file1的的属主属组都是zhangsan
[zhangsan@localhost ~]$ rm -rf Test/file1 #先删除file1
[zhangsan@localhost ~]$ chmod 2755 Test/ #增加sgid权限
[zhangsan@localhost ~]$ ll -d Test/
drwxr-sr-x 2 zhangsan nginx 19 Oct 13 20:47 Test/ #sgid权限已经增加了,属组位置上有了一个s
[zhangsan@localhost ~]$ touch Test/file2 #重新创建一个file2文件
[zhangsan@localhost ~]$ mkdir Test/test #也创建一个目录
[zhangsan@localhost ~]$ ll Test/ #查看创建的文件和目录
total 0
-rw-rw-r-- 1 zhangsan nginx 0 Oct 13 20:59 file2 #属组都与Test目录的属组一样,这是因为Test目录具有sgid权限
drwxrwsr-x 2 zhangsan nginx 6 Oct 13 20:59 test
[zhangsan@localhost ~]$

移除sgid权限
sgid权限也使用s表示,增加权限g+s,移除权限g-s;
sgid权限也可以使用数字形式表示,0表示去除sgid权限,2表示添加sgid权限,而且是在原权限的数字表达形式开头加0或2,如:0755移除sgid权限,2755添加sgid权限。

演示示例:

[zhangsan@localhost ~]$ chmod g-s Test/ #使用字母形式移除sgid权限

[zhangsan@localhost ~]$ ll -d Test/

drwxr-xr-x 3 zhangsan nginx 44 Oct 13 20:59 Test/ #sgid权限已被移除

[zhangsan@localhost ~]$

sticky权限
作用:sticky权限一般针对目录来设置,作用是只允该目录下的文件的创建者删除自己的创建的文件,不允许其他人删除文件。(root用户除外,因为root用户是超级管理员),而且sticky权限只能设置在other位置上。

sticky权限使用t表示,增加权限o+t,移除权限o-t;
sticky权限也可以使用数字形式表示,0表示去除权限,1表示添加权限,而且是在原权限的数字表达形式开头加0或1,如下:如:0755移除sticky权限,1755添加sticky权限。

演示示例:

[root@localhost /]# mkdir /test_tmp #创建目录
[root@localhost /]# chmod 777 test_tmp/ #设置权限
[zhangsan@localhost /]$ ll test_tmp/ -d #查看test_tmp的权限
drwxrwxrwx 2 root root 6 Oct 6 17:28 test_tmp/
[zhangsan@localhost test_tmp]$ echo "fsdsdsd" >> zhangsan.txt #张三用户登录并创建一个zhangsan.txt文件
[lisi@localhost test_tmp]$ echo "fsdsdsd" >> lisi.txt #李四用户登录并创建一个lisi.txt文件
[zhangsan@localhost test_tmp]$ rm -rf lisi.txt #张三用户删除李四的lisi.txt文件,正常删除
[lisi@localhost test_tmp]$ rm -rf zhangsan.txt #李四用户删除张三的zhangsan.txt文件,正常删除

以上的删除就是不合理的,因为test_tmp的权限是777权限,所以我们需要使用sticky权限来限制用户自己删除自己创建的文件,不能删除别人的文件。
[root@localhost /]$ ll tmp/ -d #查看系统默认的tmp目录权限,发现tmp目录就有sticky权限
drwxrwxrwt. 12 root root 4096 Oct 6 17:37 tmp/
[zhangsan@localhost /]$ echo "fsdsdsd" >> zhangsan.txt #张三用户登录并在tmp目录创建一个zhangsan.txt文件
[lisi@localhost /]$ echo "fsdsdfdfdsd" >> lisi.txt #张三用户登录并在tmp目录创建一个lisi.txt文件
[zhangsan@localhost tmp]$ ll zhangsan.txt lisi.txt #查看我们创建的文件
-rw-rw-r-- 1 lisi lisi 7 Oct 6 17:23 lisi.txt
-rw-rw-r-- 1 zhangsan zhangsan 9 Oct 6 17:25 zhangsan.txt
[zhangsan@localhost tmp]$ rm -rf lisi.txt #张三删除李四的lisi.txt,权限报错,删除使用,这就是因为tmp目录的沾滞位权限t起的作用
rm: cannot remove ‘lisi.txt’: Operation not permitted
[lisi@localhost tmp]$ rm -rf zhangsan.txt #李四删除张三的zhangsan.txt,权限报错,删除使用,这就是因为tmp目录的sticky权限起的作用
rm: cannot remove ‘zhangsan.txt ’: Operation not permitted

[kod.liyumenhotel.com)
[kod.hotins-sh.com)
[kod.wuyejie.com)
[kod.hlphzc.com)
[kod.laixituangou.com)
[kod.andyit.net)
[kod.tjbxt.com)
[kod.hehuakeng.com)
移除sticky权限
sticky权限使用t表示,增加权限o+t,移除权限o-t;
sticky权限也可以使用数字形式表示,0表示去除权限,1表示添加权限,而且是在原权限的数字表达形式开头加0或1,如下:如:0755移除sticky权限,1755添加sticky权限。演示示例如下:

[root@localhost /]# chmod -R o-t /test_tmp/ #移除sticky权限,加-R表示对目录递归

[root@localhost /]# chmod -R 0777 /test_tmp/ #移除sticky权限,加-R表示对目录递归增加

sticky权限

[root@localhost /]# chmod -R 1777 /test_tmp/ #等价于chmod -R o+t /test_tmp/,加-R表示对目录递归

[root@localhost /]# ll -d test_tmp/drwxrwxrwt 2 root root 6 Oct 6 17:28 test_tmp/

相关文章
|
6天前
|
监控 Oracle 关系型数据库
Linux平台Oracle开机自启动设置
【11月更文挑战第8天】在 Linux 平台设置 Oracle 开机自启动有多种方法,本文以 CentOS 为例,介绍了两种常见方法:使用 `rc.local` 文件(较简单但不推荐用于生产环境)和使用 `systemd` 服务(推荐)。具体步骤包括编写启动脚本、赋予执行权限、配置 `rc.local` 或创建 `systemd` 服务单元文件,并设置开机自启动。通过 `systemd` 方式可以更好地与系统启动过程集成,更规范和可靠。
|
13天前
|
Linux 数据安全/隐私保护
linux特殊权限!!
本文介绍了Linux系统中的特殊权限,包括suid、sgid和sbit。suid使普通用户在执行特定命令时获得root权限;sgid使用户在创建文件时继承目录的用户组权限;sbit确保用户只能删除自己在共享目录中创建的文件。此外,文章还讲解了chattr和lsattr命令,用于更改和查看文件的扩展属性,以及umask的概念和计算方法,帮助理解文件和目录的默认权限。
30 1
linux特殊权限!!
|
7天前
|
Oracle Ubuntu 关系型数据库
Linux平台Oracle开机自启动设置
【11月更文挑战第7天】本文介绍了 Linux 系统中服务管理机制,并详细说明了如何在使用 systemd 和 System V 的系统上设置 Oracle 数据库的开机自启动。包括创建服务单元文件、编辑启动脚本、设置开机自启动和启动服务的具体步骤。最后建议重启系统验证设置是否成功。
|
17天前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
63 3
|
3天前
|
网络协议 安全 Linux
Linux 上设置自己的公共时间服务器
Linux 上设置自己的公共时间服务器
11 0
|
3天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
17 3
|
3天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
15 2
|
11天前
|
缓存 监控 Linux
|
14天前
|
Linux Shell 数据安全/隐私保护