Linux 特殊权限详解

Linux 特殊权限详解在 Linux 系统中,文件和目录的权限管理是非常重要的。除了基本的读(r)、写(w)和执行(x)权限外,还有一些特殊的权限位,这些特殊权限位可以提供更细粒度的访问控制和安全性。本文将详细介绍 Linux 中的三种特殊权限:Set-User-ID (SUID)、Set-Group-ID (SGID) 和 Sticky Bit (SBIT)。

一. Set-User-ID (SUID)

SUID是一种对二进制程序进行设置的特殊权限,能够让二进制程序的执行者临时拥有所有者的权限(仅对拥有执行权限的二进制程序有效)。这意味着,即使普通用户运行该文件,也能以文件所有者的权限执行。

1.1 使用场景

特权命令
例如,passwd 命令需要写入 /etc/shadow 文件,但普通用户没有写权限。通过设置 SUID 位,passwd 命令可以以 root 权限运行,从而修改密码文件。

1.2 设置 SUID

使用 chmod 命令
chmod u+s /bin/cmd

使用 数字模式:
chmod 4755 /bin/cmd

其中,4 表示 SUID 位,755 表示文件的其他权限。

1.3 检查 SUID

使用 ls -l 命令:
ls -l /bin/cmd

如果文件设置了 SUID 位,-rwxr-xr-x 会变成 -rwsr-xr-x,-rw-r-xr-x 会变成 -rwSr-xr-x,其中 S/s 表示 SUID 位。

1.4 示例

查看 passwd 命令的权限

[root@db1 scripts]# ls -l /bin/passwd

-rwsr-xr-x. 1 root root 34512 Aug 13 2018 /bin/passwd

二. Set-Group-ID (SGID)

SGID特殊权限有两种应用场景:当对二进制程序进行设置时,能够让执行者临时获取文件所属组的权限;当对目录进行设置时,则是让目录内新创建的文件自动继承该目录原有用户组的名称。

2.1 用途

特权命令
例如,chgrp 命令需要更改文件的组所有权,但普通用户没有权限。通过设置 SGID 位,chgrp 命令可以以文件所属组的权限运行。

目录继承
当在设置了 SGID 位的目录中创建新文件时,新文件的组所有权会继承目录的组所有权。

2.2 设置 SGID

使用 chmod 命令
chmod g+s /bin/cmd

使用 数字模式
chmod 2755 /bin/cmd

其中,2 表示 SGID 位,755 表示文件的其他权限。

2.3 检查 SGID

使用 ls -l 命令
ls -l /bin/cmd

如果文件设置了 SGID 位,-rwxr-xr-x 会变成 -rwxr-sr-x,-rwxr–r-x 会变成 -rwxr-Sr-x,其中 S/s 表示 SGID 位。

2.4 示例

创建一个目录并设置 SGID 位
[root]

mkdir /tmp/shared

chmod g+s /tmp/shared

查看目录的权限

ls -ld /tmp/shared

drwxr-sr-x 2 root root 6 Nov 22 16:01 /tmp/shared

切换普通用户创建目录
[test1]

$ touch a.txt

$ ll

total 0

-rw-rw-r-- 1 test1 root 0 Nov 22 16:31 a.txt

三. Sticky Bit (SBIT)

Sticky Bit 位主要用于目录,确保只有文件的所有者或 root 用户才能删除或重命名该目录中的文件,即使其他用户有写权限。

3.1 用途

公共目录
例如,/tmp 目录允许所有用户写入,但只有文件的所有者或 root 用户可以删除文件。设置 Sticky Bit

使用 chmod 命令
chmod +t directory

使用 数字模式
chmod 1755 directory

其中,1 表示 Sticky Bit 位,755 表示目录的其他权限。

3.2 检查 Sticky Bit

使用 ls -l 命令
ls -ld directory

如果目录设置了 Sticky Bit 位,drwxr-xr-x 会变成 drwxr-xr-t,drwxr-xr-- 会变成 drwxr-xr-T,其中 T/t 表示 Sticky Bit 位。

3.3 示例

查看 /tmp 目录的权限
[root]

#ls -ld /tmp

drwxrwxrwt. 25 root root 4096 Nov 22 16:01 /tmp

用户test1创建文件
权限给最大的777

[test1]

$ echo “aaaaa” > test1.txt

$ chmod 777 test1.txt

$ ll -d test1.txt

-rwxrwxrwx 1 test1 test1 5 Nov 22 16:19 test1.txt

用户test02删除文件
由于SBIT特殊权限的存在,即使读写执行的权限都具备,仍然无法删除该文件

[test02]

$ rm -rf /tmp/test1.txt

rm: cannot remove ‘/tmp/test1.txt’: Operation not permitted

四、实际使用

查看/etc/shadow的权限为000,只有root用户可以查看

–root用户

[root@db1 ~]# ll -d /etc/shadow

---------- 1 root root 3149 Oct 31 03:55 /etc/shadow

–普通用户

[test@db1 ~]$ cat /etc/shadow

cat: /etc/shadow: Permission denied

那如何让普通用户test可以查看到/etc/shadow的内容?

4.1 设置/bin/cat的SUID权限

#查看权限

[root@db1 scripts]# ll /bin/cat

-rwxr-xr-x. 1 root root 51856 Jan 11 2019 /bin/cat

#修改权限

[root@db1 scripts]# chmod u+s /bin/cat[root@db1 scripts]# ll /bin/cat

-rwsr-xr-x. 1 root root 51856 Jan 11 2019 /bin/cat

#切换用户查看

[test@db1 ~]$ cat /etc/shadow|wc -l

64

#回收权限再查看

[root@db1 scripts]# chmod u-s /bin/cat

[root@db1 scripts]# ll -d /bin/cat

-rwxr-xr-x. 1 root root 51856 Jan 11 2019 /bin/cat

[root@db1 scripts]# su - test

Last login: Fri Nov 22 16:39:34 CST 2024 on pts/1

[test@db1 ~]$ cat /etc/shadow|wc -l

cat: /etc/shadow: Permission denied

4.2 设置/bin/cat的SGID权限

设置SGID权限
[root@db1 scripts]# ll -d /bin/cat

-rwxr-xr-x. 1 root root 51856 Jan 11 2019 /bin/cat

[root@db1 scripts]# chmod g+s /bin/cat

[root@db1 scripts]# ll -d /bin/cat

-rwxr-sr-x. 1 root root 51856 Jan 11 2019 /bin/cat

[root@db1 scripts]# ll -d /etc/shadow

---------- 1 root root 3149 Oct 31 03:55 /etc/shadow

由于/etc/shadow的root组没有读权限,即使设置了SUID,普通用户仍然无法读取文件信息

[root@db1 scripts]# su - test

Last login: Fri Nov 22 16:41:33 CST 2024 on pts/1

[test@db1 ~]$ cat /etc/shadow

cat: /etc/shadow: Permission denied

设置文件上组的读权限
[root@db1 scripts]# chmod g+r /etc/shadow

[root@db1 scripts]# ll -d /etc/shadow

----r----- 1 root root 3149 Oct 31 03:55 /etc/shadow

[root@db1 scripts]# su - test

Last login: Fri Nov 22 16:43:14 CST 2024 on pts/1

[test@db1 ~]$ cat /etc/shadow|wc -l

64

4.3 授权其它组读权限

[root@db1 scripts]# chmod o+r /etc/shadow

[root@db1 scripts]# ll -d /etc/shadow

-------r-- 1 root root 3149 Oct 31 03:55 /etc/shadow

[root@db1 scripts]# su - test

[test@db1 ~]$ cat /etc/shadow|wc -l

64

五、总结

SUID:使命令在执行时以文件所有者的权限运行。
SGID:使命令在执行时以文件所属组的权限运行,或使目录中的新文件继承目录的组所有权。
Sticky Bit:确保只有文件的所有者或 root 用户才能删除或重命名目录中的文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值