第397集用户权限-Linux系统特殊权限
|字数总计:3.4k|阅读时长:13分钟|阅读量:
用户权限 - Linux系统特殊权限
1. Linux系统特殊权限概述
Linux系统除了基本的rwx权限外,还有三种特殊权限:SUID、SGID和Sticky。这些特殊权限提供了更细粒度的权限控制。
1.1 特殊权限说明
| 特殊权限 |
说明 |
作用位置 |
| SUID |
以文件的所属用户身份执行命令, 而不是以当前用户的身份执行命令 |
文件所有者位置 |
| SGID |
将目录设置为sgid后续如果在该目录下创建文件, 都将与该目录的所属组保持一致 |
文件属组位置 |
| Sticky |
任何人都可以在该目录下创建文件以及目录, 但只能删除自己创建的文件和目录 |
其他用户位置 |
1.2 特殊权限设置方法
用符号表示:
- setuid =
u+s
- setgid =
g+s
- sticky =
o+t
用数值表示:
- setuid =
4
- setgid =
2
- sticky =
1
组合使用:
1 2 3 4
| chmod 4755 file chmod 2755 dir chmod 1755 dir chmod 6755 file
|
2. SUID (Set User ID)
2.1 SUID说明
SUID: 文件的执行有效身份为文件的拥有者,而不是执行者的身份。
示例:
1
| -rwsr-xr-x. 1 root root 54080 Nov 5 2016 /usr/bin/cat
|
- root用户执行cat,最终运行的身份是root
- bgx用户执行cat,最终运行的身份是bgx(无SUID)
设置SUID后:
- root用户执行,最终运行的身份是root
- bgx用户执行,最终运行的身份是root(有SUID)
2.2 SUID演示案例
1 2 3 4 5 6 7 8 9 10 11 12 13
| [root@liyanzhao ~] [root@liyanzhao ~] -rw-r----- 1 root root 1548 Dec 9 18:45 /etc/passwd
[liyanzhao@liyanzhao root]$ cat /etc/passwd cat: /etc/passwd: Permission denied
[root@liyanzhao ~] [root@liyanzhao ~] -rwsr-xr-x. 1 root root 48568 Mar 23 2017 /bin/cat
|
2.3 SUID授权方法
数值方式:
符号方式:
2.4 SUID的作用
- 让普通用户拥有二进制文件的所属主权限,二进制文件需要有执行权限
- 如果设置的二进制文件没有执行权限,那么suid的权限显示就是大S
- 特殊权限suid仅对二进制可执行程序有效,其他文件或目录则无效
- 如果普通用户需要操作没有权限的文件,为对应的命令赋予Suid权限
注意: suid双刃剑, 是一个比较危险的功能, 对系统安全有一定的威胁。
2.5 SUID权限显示
| 显示 |
说明 |
s |
有执行权限,且设置了SUID |
S |
设置了SUID,但没有执行权限 |
x |
有执行权限,但没有设置SUID |
3. SGID (Set Group ID)
3.1 SGID说明
SGID: 将目录设置为sgid后续如果在该目录下创建文件, 都将与该目录的所属组保持一致。
示例:
1
| drwxr-srwx. 2 root devops 29 Jun 14 21:01 /opt/
|
不同用户在该目录下创建文件的情况:
| 用户 |
创建文件属主 |
创建文件属组 |
| bgx用户 |
bgx |
devops |
| xlw用户 |
xlw |
devops |
| root用户 |
root |
devops |
3.2 SGID演示案例
1 2 3 4 5 6
| [root@liyanzhao /] [root@liyanzhao /] [root@liyanzhao /] [liyanzhao@liyanzhao ~]$ mkdir /opt/sgid_test [liyanzhao@liyanzhao ~]$ ll /opt/sgid_test -d drwxrwsr-x. 2 liyanzhao root 4096 Nov 14 00:27 /opt/sgid_test
|
3.3 SGID授权方法
数值方式:
符号方式:
3.4 SGID的作用
- 针对用户组权限位修改,用户创建的目录或文件所属组和该目录的所属组一致
- 当某个目录设置了sgid后,在该目录中新建的文件不在是创建该文件的默认所属组
- 使用sgid可以使得多个用户之间共享一个目录的所有文件变得简单
3.5 SGID权限显示
| 显示 |
说明 |
s |
有执行权限,且设置了SGID |
S |
设置了SGID,但没有执行权限 |
x |
有执行权限,但没有设置SGID |
4. Sticky粘滞位
4.1 Sticky说明
Sticky: 对目录有写权限的用户仅仅可以删除目录里属于自己的文件,不能删除其他用户的文件
系统中存在的/tmp目录是经典的粘滞位目录,谁都有写权限,因此安全成问题,常常是木马第一手跳板。
示例:
1
| drwxrwxrwt. 7 root root 93 Jun 14 21:47 /tmp/
|
4.2 Sticky授权方法
数值方式:
符号方式:
4.3 Sticky的作用
- 让多个用户都具有写权限的目录,并让每个用户只能删自己的文件
- 特殊sticky目录表现在others的x位,用小t表示,如果没有执行权限是T
- 一个目录即使它的权限为”777”如果是设置了粘滞位,除了目录的属主和”root”用户有权限删除,除此之外其他用户都不允许删除该目录
4.4 Sticky权限显示
| 显示 |
说明 |
t |
有执行权限,且设置了Sticky |
T |
设置了Sticky,但没有执行权限 |
x |
有执行权限,但没有设置Sticky |
5. 权限属性chattr
chattr用于设置文件属性(权限),针对所有用户,包括root。
5.1 chattr常用属性
| 属性 |
说明 |
a |
让文件或目录仅可追加内容 |
i |
不得任意更动文件或目录 |
A |
不更新文件的访问时间 |
S |
同步写入磁盘 |
u |
防止文件被删除 |
5.2 chattr使用示例
1 2 3 4 5 6 7 8 9 10 11 12
| [root@liyanzhao ~] [root@liyanzhao ~] ---------------- file_a ---------------- file_i
[root@liyanzhao ~] [root@liyanzhao ~] [root@liyanzhao ~] -----a---------- file_a ----i----------- file_i
|
5.3 a权限测试
1 2 3 4 5 6 7 8
| [root@liyanzhao ~] bash: file_a: Operation not permitted [root@liyanzhao ~] rm: cannot remove 'file_a': Operation not permitted
[root@liyanzhao ~]
|
5.4 i权限测试
1 2 3 4 5 6 7
| [root@liyanzhao ~] bash: file_i: Permission denied [root@liyanzhao ~] bash: file_i: Permission denied [root@liyanzhao ~] rm: cannot remove 'file_i': Operation not permitted
|
5.5 解除限制
1 2 3 4 5
| [root@tianyun ~]
[root@tianyun ~]
|
5.6 chattr常用命令
| 命令 |
功能 |
chattr +a file |
添加a属性(仅追加) |
chattr +i file |
添加i属性(不可变) |
chattr -a file |
移除a属性 |
chattr -i file |
移除i属性 |
lsattr file |
查看文件属性 |
6. 进程掩码umask
umask用于控制系统权限, 默认系统权限较大, 需要靠Umask来变更权限。
6.1 默认权限
- 默认新建文件: 系统默认最大权限为
666 (rw-rw-rw-)
- 默认新建目录: 系统默认最大权限是
777 (rwxrwxrwx)
我们在新建文件和目录的默认权限会受到umask的影响, umask表示要减掉的权限。
6.2 权限计算公式
- 创建目录权限值 =
777 - umask
- 创建普通文件权限值 =
666 - umask
6.3 umask涉及到的相关文件
/etc/bashrc
/etc/profile
~/.bashrc
~/.bash_profile
注意: umask影响的范围
- shell (vim,touch) –umask–> 新文件或目录权限
- vsftpd –umask–> 新文件或目录权限
- samba –umask–> 新文件或目录权限
- useradd –umask–> 用户 HOME
6.4 umask计算示例
示例1: umask值为022(所有位为偶数)
示例2: umask值为045(其他用户组位为奇数)
示例3: 默认目录权限计算方法
6.5 umask详细示例
umask 044(所有位全为偶数时)
1 2 3
| umask 044 mkdir d044 touch f044
|
umask 023(umask值的部分或全部位为奇数时)
1 2 3
| umask 023 mkdir d023 touch f023
|
umask 035(umask值的所有位为奇数时)
1 2 3
| umask 035 mkdir d035 touch f035
|
6.6 umask实践示例
示例1: 在shell进程中创建文件
1 2 3 4 5 6 7 8 9
| [root@liyanzhao ~] 0022
[root@liyanzhao ~] [root@liyanzhao ~] [root@liyanzhao ~] drwxr-xr-x 2 root root 6 Jan 24 09:02 dir0022/ -rw-r--r-- 1 root root 0 Jan 24 09:02 file0022
|
示例2: 修改shell umask值(临时生效)
1 2 3 4 5 6
| [root@liyanzhao ~] [root@liyanzhao ~] [root@liyanzhao ~] [root@liyanzhao ~] drwxrwxrwx 2 root root 6 Jan 24 09:04 dir000 -rw-rw-rw- 1 root root 0 Jan 24 09:04 file000
|
示例3: 修改shell umask值(永久生效, 强烈不建议修改)
1 2 3 4 5 6 7 8 9
| [root@liyanzhao ~] if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then umask 002 else umask 022 fi
[root@liyanzhao ~]
|
示例4: 通过umask决定新建用户HOME目录的权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| [root@liyanzhao ~] UMASK 077
[root@liyanzhao ~] [root@liyanzhao ~] drwx------. 4 dba dba 4096 3 月 11 19:50 /home/dba/
[root@tianyun ~] UMASK 000
[root@liyanzhao ~] [root@liyanzhao~] drwxrwxrwx. 4 sa sa 4096 3 月 11 19:53 /home/sa/
|
示例5: vsftpd进程配置
1 2 3 4 5
| [root@tianyun ~] [root@tianyun ~]
anon_umask local_umask
|
7. 特殊权限练习题
7.1 实验需求
考试必考: 创建三个用户, 分别为curly、larry、moe,这些用户都是stooges组的成员。
这些用户帐号密码都为password
要求:
- 要求以上用户和组可以在
/home/stooges目录里访问,创建,删除文件
- 其他用户一律不允许访问该目录
- 在该目录下新建的文件会自动属于stooges组拥有
7.2 实验步骤
步骤1: 创建用户和组
1 2 3 4 5 6 7 8 9 10 11 12
| groupadd stooges
useradd curly useradd larry useradd moe
echo "password" | passwd --stdin moe echo "password" | passwd --stdin larry echo "password" | passwd --stdin curly
|
步骤2: 将用户加入组
1 2 3 4 5 6 7 8 9
| gpasswd -a larry stooges gpasswd -a moe stooges gpasswd -a curly stooges
id curly id larry id moe
|
步骤3: 创建目录并配置权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| mkdir /home/stooges
chown .stooges /home/stooges
chown :stooges /home/stooges
chmod 770 /home/stooges
chmod g+s /home/stooges
ll -d /home/stooges
|
7.3 验证测试
测试1: curly用户创建文件
1 2 3 4 5 6 7 8 9 10 11
| su - curly
cd /home/stooges touch curly_file.txt echo "curly's content" > curly_file.txt
ll
|
测试2: larry用户修改curly创建的文件
1 2 3 4 5 6 7 8 9 10
| exit su - larry
cd /home/stooges
cat curly_file.txt echo "modified by larry" >> curly_file.txt
|
测试3: larry用户删除curly创建的文件
测试4: 其他用户无法访问
1 2 3 4 5 6 7
| exit su - testuser
cd /home/stooges
|
7.4 完整实验脚本
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| #!/bin/bash
groupadd stooges
useradd curly useradd larry useradd moe
echo "password" | passwd --stdin moe echo "password" | passwd --stdin larry echo "password" | passwd --stdin curly
gpasswd -a larry stooges gpasswd -a moe stooges gpasswd -a curly stooges
mkdir /home/stooges chown :stooges /home/stooges chmod 770 /home/stooges chmod g+s /home/stooges
echo "=== 用户信息 ===" id curly id larry id moe
echo "=== 目录权限 ===" ll -d /home/stooges
echo "=== 实验完成 ===" echo "curly、larry、moe可以使用密码'password'登录系统" echo "共享目录: /home/stooges" echo "所有用户可以在该目录下创建、删除文件" echo "新建文件自动属于stooges组"
|
8. 特殊权限总结
8.1 特殊权限对比
| 特殊权限 |
数值 |
符号 |
作用对象 |
主要用途 |
| SUID |
4 |
u+s |
文件 |
让普通用户以文件所有者身份执行 |
| SGID |
2 |
g+s |
目录/文件 |
目录:新建文件继承目录属组 文件:以文件属组身份执行 |
| Sticky |
1 |
o+t |
目录 |
只允许删除自己的文件 |
8.2 特殊权限显示
| 位置 |
无特殊权限 |
SUID |
SGID |
Sticky |
| 所有者 |
rwx |
rws |
rwx |
rwx |
| 属组 |
rwx |
rwx |
rws |
rwx |
| 其他 |
rwx |
rwx |
rwx |
rwt |
8.3 权限组合示例
1 2 3 4 5 6 7 8
| chmod 6755 file
chmod 2755 dir
chmod 7777 file
|
8.4 安全建议
- SUID: 谨慎使用,只对必要的可执行文件设置
- SGID: 适用于共享目录,方便组内协作
- Sticky: 适用于临时目录(如/tmp),防止误删他人文件
- chattr: 保护重要配置文件,防止误删或误改
- umask: 根据安全需求设置合适的默认权限
9. 命令总结
9.1 特殊权限命令
| 命令 |
功能 |
示例 |
chmod u+s file |
设置SUID |
chmod 4755 file |
chmod g+s dir |
设置SGID |
chmod 2755 dir |
chmod o+t dir |
设置Sticky |
chmod 1755 dir |
9.2 文件属性命令
| 命令 |
功能 |
示例 |
chattr +a file |
设置仅追加属性 |
|
chattr +i file |
设置不可变属性 |
|
chattr -a file |
移除a属性 |
|
lsattr file |
查看文件属性 |
|
9.3 umask命令
| 命令 |
功能 |
示例 |
umask |
查看当前umask值 |
|
umask 022 |
设置umask值(临时) |
|
umask -S |
以符号方式显示 |
|