用户权限
- 1、基本权限 UGO
- 1.1、普通文件的基本权限
- 1.2、设置文件权限(使用数字或符号)
- 1.3、设置文件的属主/属组
- 2、基本权限 ACL
- 2.1、设置 ACL 权限
- 2.2、删除 ACL 权限
- 3、特殊权限(了解)
- 3.1、特殊位 suid
- 3.2、文件属性 chattr
- 3.3、进程掩码 umask
1、基本权限 UGO
用户对文件的权限:赋于某个用户或组,能够以何种方式,访问某个文件(图片文件,视频文件,普通文件)
🅰️ 权限对象
- 属主: u
- 属组: g
- 其他人: o
- 所有人:a(u+g+o)
🅱️ 权限类型
- 读:r=4
- 写:w=2
- 执行: x=1
1.1、普通文件的基本权限
# 如下 ll 命令后可以观察到文件的权限
[root@localhost xiaohan]# touch abc.txt
[root@localhost xiaohan]# mkdir A/B/C -p
[root@localhost xiaohan]# ls
A abc.txt 公共 模板 视频 图片 文档 下载 音乐 桌面
[root@localhost xiaohan]# ll
总用量 0
drwxr-xr-x. 3 root root 15 4月 10 21:21 A
-rw-r--r--. 1 root root 0 4月 10 21:20 abc.txt
1.2、设置文件权限(使用数字或符号)
🅰️ 更改权限(使用符号):自定义场景(让一个文本文件变成可执行程序)
# 1. 编写程序
[root@localhost xiaohan]# vim abc.txt
# 2. 查看文件的权限(rw-)(不可执行)
[root@localhost xiaohan]# ll | grep abc.txt
-rw-r--r--. 1 root root 106 4月 10 21:28 abc.txt
# 3. 增加执行权限
[root@localhost xiaohan]# chmod u+x abc.txt
[root@localhost xiaohan]# ll | grep abc.txt
-rwxr--r--. 1 root root 106 4月 10 21:28 abc.txt
# 4. 执行程序
[root@localhost xiaohan]# ./abc.txt
hello 2020
请输入您的姓名:susu
哈哈 susu 是大笨蛋
# 5. 减少执行权限
[root@localhost xiaohan]# chmod u-x abc.txt
[root@localhost xiaohan]# ./abc.txt
bash: ./abc.txt: 权限不够
🅰️ 更改权限(使用数字)
# chmod ugo(777) 文件
# 读 — 4 写 — 2 执行 — 1
# 三个数字分别对应了 用户 用户组 其他人
[root@localhost xiaohan]# chmod 777 abc.txt
[root@localhost xiaohan]# ll | grep abc.txt
-rwxrwxrwx. 1 root root 109 4月 10 21:32 abc.txt
[root@localhost xiaohan]# chmod 444 abc.txt
[root@localhost xiaohan]# ll | grep abc.txt
-r--r--r--. 1 root root 109 4月 10 21:32 abc.txt
[root@localhost xiaohan]# chmod 555 abc.txt
[root@localhost xiaohan]# ll | grep abc.txt
-r-xr-xr-x. 1 root root 109 4月 10 21:32 abc.txt
🅱️ 更改权限的方法(使用符号)
[root@localhost xiaohan]# ll | grep abc.txt
-rw-r--r--. 1 root root 109 4月 10 21:32 abc.txt
[root@localhost xiaohan]# chmod u=rwx abc.txt
[root@localhost xiaohan]# ll | grep abc.txt
-rwxr--r--. 1 root root 109 4月 10 21:32 abc.txt
[root@localhost xiaohan]# chmod a=- abc.txt
[root@localhost xiaohan]# ll | grep abc.txt
----------. 1 root root 109 4月 10 21:32 abc.txt
1.3、设置文件的属主/属组
🅰️ chown
设置一个文件属于谁(可以设置属主和属组)
- 语法: chown 用户名 组名 文件
# 原文件 属主为 root 属组为 root
[root@localhost xiaohan]# ll | grep abc.txt
-r-xr-xr-x. 1 root root 109 4月 10 21:32 abc.txt
# 更改文件的属主为 xiaohan
[root@localhost xiaohan]# chown xiaohan abc.txt
[root@localhost xiaohan]# ll | grep abc.txt
-r-xr-xr-x. 1 xiaohan root 109 4月 10 21:32 abc.txt
# 更改文件的属组为 xiaohan
[root@localhost xiaohan]# chown .xiaohan abc.txt
[root@localhost xiaohan]# ll | grep abc.txt
-r-xr-xr-x. 1 xiaohan xiaohan 109 4月 10 21:32 abc.txt
# 更改文件的属主和属组为 root
[root@localhost xiaohan]# chown root.root abc.txt
[root@localhost xiaohan]# ll | grep abc.txt
-r-xr-xr-x. 1 root root 109 4月 10 21:32 abc.txt
🅱️ chgrp
设置一个文件属于哪个组
- 语法: chgrp 组名 文件 -R(递归)
[root@localhost xiaohan]# tail -3 /etc/group
love:x:2003:
xiaohan:x:2004:
xiaoke:x:2005:
[root@localhost xiaohan]# ls | grep abc.txt
abc.txt
[root@localhost xiaohan]# chgrp xiaoke abc.txt
[root@localhost xiaohan]# ll | grep abc.txt
-r-xr-xr-x. 1 root xiaoke 109 4月 10 21:32 abc.txt
# 递归
[root@localhost xiaohan]# ll | grep A
drwxr-xr-x. 3 root root 15 4月 10 21:21 A
[root@localhost xiaohan]# chgrp xiaoke -R A
[root@localhost xiaohan]# ll | grep A
drwxr-xr-x. 3 root xiaoke 15 4月 10 21:21 A
[root@localhost xiaohan]# ll A/ | grep B
drwxr-xr-x. 3 root xiaoke 15 4月 10 21:21 B
[root@localhost xiaohan]# ll A/B/ | grep C
drwxr-xr-x. 2 root xiaoke 6 4月 10 21:21 C
2、基本权限 ACL
ACL文件权限管理: 设置不同用户,不同的基本权限
- 语法:
setfacl -m u:alice:rw /home/test.txt
- 解释:
命令 用户或组:用户名:权限 文件对象
[root@localhost xiaohan]# touch a.txt
[root@localhost xiaohan]# ll | grep a.txt
-rw-r--r--. 1 root root 0 4月 10 22:04 a.txt
# 查看文件的 ACL 权限
[root@localhost xiaohan]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--
2.1、设置 ACL 权限
查看 ACL 权限:getfacl 文件
# 1. 查看 a.txt 的 ACL 权限
[root@localhost xiaohan]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--
# 2. 设置权限 针对于文件(a.txt)给用户(xiaoke)设置权限(rw-)
[root@localhost xiaohan]# setfacl -m u:xiaoke:rw a.txt
[root@localhost xiaohan]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
user:xiaoke:rw-
group::r--
mask::rw-
other::r--
# 3. 设置权限 针对于文件(a.txt)给用户(xiaohan)设置权限(---)
[root@localhost xiaohan]# setfacl -m u:xiaohan:- a.txt
[root@localhost xiaohan]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
user:xiaohan:---
user:xiaoke:rw-
group::r--
mask::rw-
other::r--
2.2、删除 ACL 权限
# 1. 获取文件(a.txt)的 ACL 权限
[root@localhost xiaohan]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
user:xiaohan:---
user:xiaoke:rw-
group::r--
mask::rw-
other::r--
# 2. 查看当前存在的组
[root@localhost xiaohan]# tail -3 /etc/group
love:x:2003:
xiaohan:x:2004:
xiaoke:x:2005:
# 3. 给文件(a.txt)设置组权限(rwx)
[root@localhost xiaohan]# setfacl -m g:xiaoke:rwx a.txt
[root@localhost xiaohan]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
user:xiaohan:---
user:xiaoke:rw-
group::r--
group:xiaoke:rwx
mask::rwx
other::r--
# 4. 删除组权限
[root@localhost xiaohan]# setfacl -x g:xiaoke a.txt
[root@localhost xiaohan]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
user:xiaohan:---
user:xiaoke:rw-
group::r--
mask::rw-
other::r--
# 5. 删除全部权限
[root@localhost xiaohan]# setfacl -b a.txt
[root@localhost xiaohan]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--
3、特殊权限(了解)
3.1、特殊位 suid
特殊位 suid
- suid针对文件/程序时,具备临时获得属主的权限
下面的程序运行时出现问题,经分析知:
- root 运行是超管的权限,普通用户运行时是普通用户的权限
- root /usr/bin/cat (root) /root/A AA
- xiaoke /usr/bin/cat (xiaoke) /root/AAA
[root@localhost xiaohan]# cd /root
[root@localhost ~]# ls
AAA ...
[root@localhost ~]# ll /root/AAA
总用量 8
-rw-r--r--. 1 root root 12 4月 10 16:33 keke.txt
-rw-r--r--. 1 root root 12 4月 10 16:33 susu.txt
[root@localhost ~]# su xiaoke
[xiaoke@localhost root]$ ll /root/AAA
ls: 无法访问/root/AAA: 权限不够
解决办法:
- 设置suid,使普通用户通过suid临时提权,查看超管root用户的文件
# 1. suid
[root@localhost ~]# ll /usr/bin/cat
-rwxr-xr-x. 1 root root 54080 8月 20 2019 /usr/bin/cat
[root@localhost ~]# chmod u+s /usr/bin/cat
[root@localhost ~]# ll /usr/bin/cat
-rwsr-xr-x. 1 root root 54080 8月 20 2019 /usr/bin/cat
# 2. 结果
[root@localhost ~]# ll /root/AAA
总用量 8
-rw-r--r--. 1 root root 12 4月 10 16:33 keke.txt
-rw-r--r--. 1 root root 12 4月 10 16:33 susu.txt
[root@localhost ~]# su xiaoke
[xiaoke@localhost root]$ cat /root/AAA
cat: /root/AAA: 是一个目录
3.2、文件属性 chattr
自定义场景
- 创建新文件并且查看默认权限
[root@localhost ~]# touch enhen.txt
[root@localhost ~]# lsattr enhen.txt
---------------- enhen.txt
- 加上不能删除的属性
[root@localhost ~]# chattr +i enhen.txt
[root@localhost ~]# lsattr enhen.txt
----i----------- enhen.txt
- 尝试删除并还原属性
[root@localhost ~]# rm -rf enhen.txt
rm: 无法删除"enhen.txt": 不允许的操作
[root@localhost ~]# chattr -i enhen.txt
[root@localhost ~]# rm -rf enhen.txt
3.3、进程掩码 umask
新建文件、目录的默认权限会受到umask的影响,umask表示要减掉的权限
# 进程掩码 umask(0022)
# 新建文件夹权限(755) 新建文件权限(644)
# 0022 + 755 = 0777(文件夹)
# 0022 + 644 = 0666(文件)
[root@localhost ~]# umask
0022
[root@localhost ~]# touch file1
[root@localhost ~]# mkdir dir1
[root@localhost ~]# ll -d dir1 file1
drwxr-xr-x. 2 root root 6 4月 10 22:44 dir1
-rw-r--r--. 1 root root 0 4月 10 22:44 file1
# 进程掩码 umask(0000)
# 新建文件夹权限(777) 新建文件权限(666)
# 0000 + 777 = 0777(文件夹)
# 0000 + 666 = 0666(文件)
[root@localhost ~]# umask 0000
[root@localhost ~]# umask
0000
[root@localhost ~]# touch file2
[root@localhost ~]# mkdir dir2
[root@localhost ~]# ll -d file2 dir2
drwxrwxrwx. 2 root root 6 4月 10 22:46 dir2
-rw-rw-rw-. 1 root root 0 4月 10 22:46 file2