用户权限

  • 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

用户对文件的权限:赋于某个用户或组,能够以何种方式,访问某个文件(图片文件,视频文件,普通文件)

🅰️ 权限对象

  1. 属主: u
  2. 属组: g
  3. 其他人: o
  4. 所有人:a(u+g+o)

🅱️ 权限类型

  1. 读:r=4
  2. 写:w=2
  3. 执行: 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

centos 文件夹赋权给用户 centos7给文件权限_centos

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