阶段一:Linux高级之用户与权限管理
1. 用户和组管理
1.1 用户与用户组的基本概念
用户:是系统中的独立身份,用于登录和执行任务。每个用户有唯一的标识符(UID)和自己的文件及设置。用户的主要功能是访问系统资源并运行进程。
用户组:是多个用户的集合,用于简化权限管理。通过将用户加入组,用户可以继承组的权限,从而访问特定的文件、目录或执行操作。

注意:
- 在Linux操作系统中,其实是一个多用户多任务的操作系统。支持多个用户同时登陆Linux操作系统,而且不会相互影响。
- 在Windows操作系统中,其实是一个单用户多任务的操作系统。在同一时间内,只允许登陆一个用户。
1.2 用户组相关操作
在Linux操作系统中,用户组的操作通常有三种情况:用户组的添加、用户组的修改与用户组的删除。
用户组:group
添加:add
修改:mod
删除:del
用户组添加:
- 语法: groupadd [选项] 用户组名称
- 选项:
- -g : gid 代表创建用户组时指定用户组的组ID编号。root超级管理员组编号为0,系统组编号1-999,自定义组编号(自己创建的组)从1000开始
- 案例:
案例一:在系统中创建一个admin用户组
groupadd admin
案例二:在系统中创建一个test组,组编号为2000
groupadd -g 2000 test
查看是否创建成功,可查询系统的用户组文件:/etc/group注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
案例一: 把test用户组的组ID编号更改为1002
groupmod -g 1002 test
校验:
cat /etc/group
案例二: 把admin用户组的组名称更改为admins
groupmod -n admins admin
校验:
cat /etc/group
案例三: 同时修改组ID和组名字
groupmod -n test01 -g 1003 test
校验:
cat /etc/group注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
1.3 用户相关操作
在Linux操作系统中,用户的管理涉及用户的添加、修改和删除。
用户:user
添加:add
修改:mod
删除:del
用户添加
- 基本语法: useradd [选项1 选项1的值 选项2 选项2的值 ...] 用户名称
- 选项:
| 选项 | 说明 |
|---|---|
| -g | gid,添加用户时指定用户所属的主组的编号(gid),只能有一个 |
| -G | GID,添加用户时指定用户所属的附加组的编号(GID),可以有多个,可以使用逗号隔开 |
| -u | 指定用户的ID编号(必须是唯一的,0超级管理员的编号,1-999系统用户编号,1000以后自定义用户的编号) |
| -d | 添加用户时指定用户的家目录,如果不指定,默认为/home/用户名 |
| -s | 指定用户可以使用的Shell脚本,主要有两个/bin/bash(普通用户)、/sbin/nologin(系统用户,不能用于登录操作系统),默认创建的就是普通用户 |
| -r | 代表创建系统账号 一般与-s /sbin/nologin 组合使用 表示为系统用户 <br/>系统用户: 一般主要是用于启动特定的应用程序 |
- 案例:
案例一: 创建一个账户 zhangsan
useradd zhangsan
查看用户:
id zhangsan
id命令获取用户的信息:
用户id=1000(zhangsan) 组id=1003(zhangsan) 组=1003(zhangsan)
注意: 默认情况下,如果我们创建用户时不指定用户的所属组,则Linux操作系统会自动帮我们生成一个与用户名同名的用户组,然后将其追加到这个组中
案例二: 创建账户时指定用户所属的用户组为admins
# 如何验证是否有这个用户组呢?
grep admins /etc/group
如何查不到,说明不存在, 创建该组
groupadd admins
#创建用户, 添加到admins 主组
useradd -g admins lisi
案例三: 创建一个账户wangwu 其UID编号为2000
useradd -u 2000 wangwu
案例四: 在/斜杠根目录下创建一个uhome文件夹,然后创建zhaoliu并指定zhaoliu的家目录为/uhome/zhaoliu
mkdir -p /uhome
useradd -d /uhome/zhaoliu zhaoliu
案例五: 创建一个系统账号mysql,禁止其登录Linux操作系统
useradd -r -s /sbin/nologin mysql
选项说明:
-r :代表创建系统账号
查看与用户相关的文件/etc/passwd
cat /etc/passwd注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
在Linux操作系统中, 一切皆文件, 与用户相关的信息也是保存在一个文件中, 这个文件就是/etc/passwd, 观察以上文件的运行结果可知, /etc/passwd文件一共有6个冒号, 共7列
第1列: 用户名称
第2列: 用户的密码,使用一个x占位符,真实的用户密码/etc/shadow文件中
第3列: 用户的uid编号(必须是唯一的)
第4列: 用户组的组ID编号(gid)
第5列: 用户的备注信息,可以通过useradd -c来进行指定 useradd -c "zhangsan" zs
第6列: 用户的家目录(大部分用户的家都在/home目录下,超级管理员的家在/root目录下)
第7列: 用户的Shell脚本,/bin/bash普通用户,/sbin/nologin系统用户、账号被禁用注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
案例一: 修改lisi账号的所属的主组为test
# 如何验证是否存在test组呢?
grep test /etc/group
# 如何没有任何的显示, 说明不存在, 执行创建
groupadd test
# 修改用户主组
usermod -g test lisi注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
案例二:修改用户的家目录,把zhaoliu的家目录更改为/home/zhaoliu
usermod -d /home/zhaoliu -m zhaoliu
案例三: 禁止wangwu账号登录Linux操作系统
usermod -s /sbin/nologin wangwu注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
案例: 修改zhangsan账号的密码为123456
passwd zhangsan注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
案例:删除wangwu这个账号
userdel wangwu
案例:删除lisi的同时删除用户的家
userdel -r lisi
案例:强制删除系统中登陆的某个账号
userdel -rf zhaoliu注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
1.4 综合案例
假设你是一家公司的系统管理员,需要为新项目组设置用户和用户组。项目组名为 project_team,组内有三个成员:alice、bob 和 charlie。你需要完成以下任务:
1. 创建一个名为 project_team 的用户组。
groupadd project_team
校验:
grep project_team /etc/group注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
useradd -s /bin/bash alice
useradd -s /bin/bash bob
useradd -s /bin/bash charlie
校验:
tail -10 /etc/passwd注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
usermod -G project_team alice
usermod -G project_team bob
usermod -G project_team charlie
校验:
grep project_team /etc/group
结果:
project_team:x:1001:alice,bob,charlie注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
userdel -r charlie
# 校验
grep project_team /etc/group
project_team:x:1001:alice,bob注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
2. 权限与所有权管理
2.1 权限管理
在多用户计算机系统的管理中,权限是指某个特定的用户具有特定的系统资源使用权利。
在Linux操作系统中,权限只有三种情况:可读、可写、可执行
| 权限针对文件 | 权限针对目录 | |
|---|---|---|
| 读 r | 表示可以查看文件内容;cat | 表示可以(ls)查看目录中存在的文件名称 |
| 写 w | 表示可以更改文件的内容;vim 修改,保存退出 | 表示是否可以删除目录中的子文件或者新建子目录(rm/touch/mkdir) |
| 执行 x | 表示是否可以开启文件当中记录的程序,一般指二进制文件(.sh) | 表示是否可以进入目录中(cd) |

2.1.1 权限的详解

第一位: 表示文件类型
- : 普通文件
d : 普通目录
l : 快捷方式(软连接)
第二位 ~ 第四位: 表示所 属用户权限(代号:U)
第五位 ~ 第七位: 表示所属用户组权限(代号:G)
第八位 ~ 第十位: 表示其他用户权限(代号:O)
特殊用户:root,在Linux操作系统中,root用户时一个特殊的存在,其不受权限的影响。其在整个系统中,拥有所有文件的管理权限。注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
2.1.2 设置文件或目录的权限
命令:
chmod = change modify
2.1.2.1 字母设置方式
语法: chmod [选项] [权限] 文件名称
| 命令 | 选项 | u、g、o或ugo或a | 权限设置 | 权限列表 |
|---|---|---|---|---|
| u | + (在原有权限上增加权限) | r | ||
| chmod | [-R] | g | - (在原有权限上减少权限) | w |
| o | = (赋权限) | x |
-R : 表示递归设置, 当针对目录及其子目录或者子文件进行设置的时候,需要添加案例实施:
为家目录下的创建一个linux.txt文件, 并为此文件拥有者增加一个x权限,组内用户增加一个w权限,其他用户也增加一个w权限
chmod u+x,g+w,o+w linux.txt
或者
chmod u+x,go+w linux.txt
或者
chmod u=rwx,go=rw linux.txt注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
案例: 把家目录下shop文件夹连同其内部的文件中的文件拥有者、所属组内用户、其他用户都设置为rwx(全部权限)
mkdir -p /root/shop
cd /root/shop
touch a.txt b.txt c.txt
设置权限:
chmod -R ugo=rwx shop注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
案例: 减少shop文件夹的权限(连同内部的文件),其文件拥有者权限保持不变,组内用户减少w权限,其他用户减少rwx权限。
chmod -R g-w,o-rwx shop注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
2.1.2.2 数字设置
文件权限与数字的对应关系:
| 权限 | 对应数字 | 意义 |
|---|---|---|
| r | 4 | 可读 |
| w | 2 | 可写 |
| x | 1 | 可执行 |
我们在数字形式权限的设置过程中,通常是三位连续的数字,如755、644、777等等
第1位数字代表文件拥有者权限
第2位数字代表文件所属组内用户权限
第3位数字代表其他用户权限
# 案例:更改linux.txt文件的权限,文件拥有者拥有全部权限、组内用户拥有可读可写权限、其他用户拥有可读权限
chmod 764 linux.txt
# 案例:给shop文件夹(仅设置文件夹本身),文件拥有者、组内用户、其他用户设置最高权限
chmod 777 shop
# 案例:给文件linux.txt设置权限为600
chmod 600 linux.txt注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
2.1.3 umask值
umask表示创建文件时的默认权限,(即创建文件时不需要设置而天生的权限)
- 查看当前账号的umask值
# umask
022那这些umask值和我们的默认权限有何关系?
答:所有文件的默认权限都是由这个文件或目录的最大权限 - umask值
文件的默认最大权限是:666 - 022 = 644 (所属用户可读可写、所属组和其他用户为可读)
目录的默认最大权限是:777 - 022 = 755 (所属用户可读可写可执行、所属组和其他用户为可读可执行)
说明:新创建的文件默认没有执行权限,因此最大权限是666,而目录需要执行权限(进入目录时需要可执行权限),所以其最大权限是777。
2.1.4 【加强】特殊权限
2.1.4.1 冒险位S(set uid)
作用:为了让一般使用者临时具有该文件所属主/组的执行权限。
冒险位S,主要针对二进制的脚本文件(命令文件)。查询一个命令所在位置?which
例如:
/usr/bin/passwd在执行它的时候需要去修改/etc/passwd和/etc/shadow等文件,这些文件除了root外,其他用户都没有写权限,但是又为了能让普通用户修改自己的密码,该怎么办呢?
ll /usr/bin/passwd
# -rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd
观察以上命令的运行结果,passwd命令,其文件拥有者权限为rws,这个s就是冒险位权限。
ll /etc/shadow
# ----------. 1 root root 1510 7月 7 16:18 /etc/shadow注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
chmod u+s /usr/bin/passwd
# 或
chmod 4755 /usr/bin/passwd注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
chmod u-s /usr/bin/passwd注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
2.1.4.2 粘滞位T(sticky bit)
其主要应用对象为文件夹(目录),这个目录大部分都是公共目录,权限大部分为777。
粘滞位权限:其主要作用就是限制公共目录,让这个目录下的文件不能被误删除。除了这个文件的拥有者,其他用户一律不能删除别人的文件。
- 使用ll -d命令查询/tmp这个公共目录
ll -d /tmp
# drwxrwxrwt. 20 root root 4096 7月 9 15:57 /tmp
观察以上命令的运行结果,其其他拥有者权限为rwt,这个t就是粘滞位权限注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
chmod o-t /tmp注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
chmod o+t /tmp
# 或
chmod 1777 /tmp注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
2.2 文件所属用户与所属组

2.2.1 所属用户修改
命令:chown = change owner
格式: chown [选项] 新的文件拥有者 文件名称
| 选项 | 说明 |
|---|---|
| -R | 递归设置,递归更改文件的拥有者 |
案例:把/root/linux.txt其文件的拥有者更改为itcast
chown itcast /root/linux.txt注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
chown -R itcast /root/shop注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
2.2.2 所属组修改【了解】
命令:chgrp = change group
格式: chgrp [选项] 新的文件的所属组 文件名称
| 选项 | 说明 |
|---|---|
| -R | 递归设置,递归更改文件的所属组 |
案例:把/root/linux.txt其文件的所属组更改为itcast
chgrp itcast /root/linux.txt注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
chgrp -R itcast /root/shop注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
2.2.3 同时修改所属用户和所属组
命令: chown
格式:
chown [-R] 文件拥有者:文件的所属组 文件名称
# 或
chown [-R] 文件拥有者.文件所属组 文件名称注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
chown root:ro ot /root/linux.txt注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
chown -R root:root /root/shop注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
2.3 ACL权限控制
2.3.1 什么是ACL

ACL,是 Access Control List(访问控制列表)的缩写,在 Linux 系统中, ACL 可实现对单一用户设定访问文件的权限。
2.3.2 获取文件的ACL权限
基本语法:getfacl 文件或目录名称
getfacl = get file acl
案例:获取/root/linux.txt的ACL权限
getfacl /root/linux.txt注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
2.3.3 设置文件的ACL权限
基本语法:
setfacl [-R] -m u:用户名称:具体权限如rwx 文件或目录名称
# 或
setfacl [-R] -m g:用户组的名称:具体权限如rwx 文件或目录名称
-m:表示修改(modify)现有的 ACL 规则。
-R: 如需要对目录设置,需要添加-R参数注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
[root@node1-itcast-cn ~]# getfacl linux.txt
# file: linux.txt
# owner: root
# group: root
user::rw-
group::---
other::---
[root@node1-itcast-cn ~]# setfacl -m u:itcast:rwx linux.txt
[root@node1-itcast-cn ~]# getfacl linux.txt
# file: linux.txt
# owner: root
# group: root
user::rw-
user:itcast:rwx # 看到这个信息, 表示已经设置好了ACL权限
group::---
mask::rwx
other::---注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
[root@node1-itcast-cn ~]# getfacl shop/
# file: shop/
# owner: root
# group: root
user::rwx
group::rwx
other::rwx
[root@node1-itcast-cn ~]# setfacl -R -m g:itcast:rwx shop/
[root@node1-itcast-cn ~]# getfacl shop/
# file: shop/
# owner: root
# group: root
user::rwx
group::rwx
group:itcast:rwx
mask::rwx
other::rwx
[root@node1-itcast-cn ~]# cd shop/
[root@node1-itcast-cn shop]# ll
总用量 0
-rwxrwx---+ 1 root root 0 3月 5 15:44 a.txt
-rwxrwx---+ 1 root root 0 3月 5 15:44 b.txt
-rwxrwx---+ 1 root root 0 3月 5 15:44 c.txt
-rwxrwx---+ 1 root root 0 3月 5 15:44 d.txt
[root@node1-itcast-cn shop]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rwx
group::r-x
group:itcast:rwx
mask::rwx
other::---注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
2.3.4 删除文件的ACL权限
基本语法:
setfacl [-R] -x u:用户名称 文件或目录名称
# 或
setfacl [-R] -x g:用户组名称 文件或目录名称
setfacl [-R] -b 文件或目录的名称 => 删除文件或目录的所有ACL权限注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
setfacl -x u:itcast /root/linux.txt注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
setfacl -b /root/shop注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
2.4 权限综合案例
2.4.1 权限管理与用户组协作
公司有一个项目组,组内有三个成员:user1、user2、user3。他们需要共同管理一个项目目录 /project。要求:
1. /project 目录的所有者为 root,所属组为 project_group。 2. project_group 组的成员可以对 /project 目录下的文件进行读写操作。 3. 其他用户不能访问 /project 目录
[root@node1-itcast-cn /]# cd /
[root@node1-itcast-cn /]# pwd
/
[root@node1-itcast-cn /]# mkdir -p /project'
> ^C
[root@node1-itcast-cn /]# mkdir -p /project
[root@node1-itcast-cn /]# cd /
[root@node1-itcast-cn /]# pwd
/
[root@node1-itcast-cn /]# mkdir -p /project
[root@node1-itcast-cn /]# ll /project/
总用量 0
[root@node1-itcast-cn /]# ll
总用量 728
dr-xr-xr-x. 2 root root 6 6月 25 2024 afs
drwxr-xr-x. 3 root root 25 3月 4 09:16 archive
-rw-r--r--. 1 root root 87 3月 5 17:56 a.txt
drwxr-xr-x. 3 root root 22 3月 2 21:25 backup
lrwxrwxrwx. 1 root root 7 6月 25 2024 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 3月 1 17:49 boot
-rw-r--r--. 1 root root 707728 3月 2 17:26 day02_Linux核心命令.xmind
drwxr-xr-x. 20 root root 3420 3月 7 08:54 dev
drwxr-xr-x. 139 root root 8192 3月 7 08:54 etc
drwxr-xr-x. 6 root root 60 3月 5 16:22 home
lrwxrwxrwx. 1 root root 7 6月 25 2024 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 6月 25 2024 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 6月 25 2024 media
drwxr-xr-x. 3 root root 18 3月 1 17:19 mnt
drwxr-xr-x. 3 root root 48 3月 4 17:50 opt
dr-xr-xr-x. 312 root root 0 3月 7 08:54 proc
drwxr-xr-x. 2 root root 6 3月 7 08:56 project
dr-xr-x---. 18 root root 4096 3月 7 08:54 root
-rw-r--r--. 1 root root 516 3月 4 15:08 root.tar.gz
drwxr-xr-x. 46 root root 1220 3月 7 08:54 run
lrwxrwxrwx. 1 root root 8 6月 25 2024 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 6月 25 2024 srv
dr-xr-xr-x. 13 root root 0 3月 7 08:54 sys
drwxr-xrwx. 2 root root 32 3月 5 16:13 test
drwxrwxrwt. 24 root root 4096 3月 7 08:55 tmp
drwxr-xr-x. 12 root root 144 3月 1 17:14 usr
drwxr-xr-x. 20 root root 4096 3月 1 17:49 var
[root@node1-itcast-cn /]# groupadd project_group
[root@node1-itcast-cn /]# grep project_group /etc/group
project_group:x:1005:
[root@node1-itcast-cn /]# chown -R root:project_group /project
[root@node1-itcast-cn /]# ll
总用量 728
dr-xr-xr-x. 2 root root 6 6月 25 2024 afs
drwxr-xr-x. 3 root root 25 3月 4 09:16 archive
-rw-r--r--. 1 root root 87 3月 5 17:56 a.txt
drwxr-xr-x. 3 root root 22 3月 2 21:25 backup
lrwxrwxrwx. 1 root root 7 6月 25 2024 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 3月 1 17:49 boot
-rw-r--r--. 1 root root 707728 3月 2 17:26 day02_Linux核心命令.xmind
drwxr-xr-x. 20 root root 3420 3月 7 08:54 dev
drwxr-xr-x. 139 root root 8192 3月 7 08:59 etc
drwxr-xr-x. 6 root root 60 3月 5 16:22 home
lrwxrwxrwx. 1 root root 7 6月 25 2024 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 6月 25 2024 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 6月 25 2024 media
drwxr-xr-x. 3 root root 18 3月 1 17:19 mnt
drwxr-xr-x. 3 root root 48 3月 4 17:50 opt
dr-xr-xr-x. 301 root root 0 3月 7 08:54 proc
drwxr-xr-x. 2 root project_group 6 3月 7 08:56 project
dr-xr-x---. 18 root root 4096 3月 7 08:54 root
-rw-r--r--. 1 root root 516 3月 4 15:08 root.tar.gz
drwxr-xr-x. 46 root root 1220 3月 7 08:54 run
lrwxrwxrwx. 1 root root 8 6月 25 2024 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 6月 25 2024 srv
dr-xr-xr-x. 13 root root 0 3月 7 08:54 sys
drwxr-xrwx. 2 root root 32 3月 5 16:13 test
drwxrwxrwt. 24 root root 4096 3月 7 08:55 tmp
drwxr-xr-x. 12 root root 144 3月 1 17:14 usr
drwxr-xr-x. 20 root root 4096 3月 1 17:49 var
[root@node1-itcast-cn /]# useradd -G project_group user1
[root@node1-itcast-cn /]# useradd -G project_group user2
[root@node1-itcast-cn /]# useradd -G project_group user3
[root@node1-itcast-cn /]# grep project_group /etc/group
project_group:x:1005:user1,user2,user3
[root@node1-itcast-cn /]# id user1
用户id=1004(user1) 组id=1006(user1) 组=1006(user1),1005(project_group)
[root@node1-itcast-cn /]# chmod -R g+w project/
[root@node1-itcast-cn /]# ll
总用量 728
dr-xr-xr-x. 2 root root 6 6月 25 2024 afs
drwxr-xr-x. 3 root root 25 3月 4 09:16 archive
-rw-r--r--. 1 root root 87 3月 5 17:56 a.txt
drwxr-xr-x. 3 root root 22 3月 2 21:25 backup
lrwxrwxrwx. 1 root root 7 6月 25 2024 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 3月 1 17:49 boot
-rw-r--r--. 1 root root 707728 3月 2 17:26 day02_Linux核心命令.xmind
drwxr-xr-x. 20 root root 3420 3月 7 08:54 dev
drwxr-xr-x. 139 root root 8192 3月 7 09:04 etc
drwxr-xr-x. 9 root root 99 3月 7 09:04 home
lrwxrwxrwx. 1 root root 7 6月 25 2024 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 6月 25 2024 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 6月 25 2024 media
drwxr-xr-x. 3 root root 18 3月 1 17:19 mnt
drwxr-xr-x. 3 root root 48 3月 4 17:50 opt
dr-xr-xr-x. 301 root root 0 3月 7 08:54 proc
drwxrwxr-x. 2 root project_group 6 3月 7 08:56 project
dr-xr-x---. 18 root root 4096 3月 7 08:54 root
-rw-r--r--. 1 root root 516 3月 4 15:08 root.tar.gz
drwxr-xr-x. 46 root root 1220 3月 7 08:54 run
lrwxrwxrwx. 1 root root 8 6月 25 2024 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 6月 25 2024 srv
dr-xr-xr-x. 13 root root 0 3月 7 08:54 sys
drwxr-xrwx. 2 root root 32 3月 5 16:13 test
drwxrwxrwt. 24 root root 4096 3月 7 08:55 tmp
drwxr-xr-x. 12 root root 144 3月 1 17:14 usr
drwxr-xr-x. 20 root root 4096 3月 1 17:49 var
[root@node1-itcast-cn /]# chmod -R o=- project/
[root@node1-itcast-cn /]# ll
总用量 728
dr-xr-xr-x. 2 root root 6 6月 25 2024 afs
drwxr-xr-x. 3 root root 25 3月 4 09:16 archive
-rw-r--r--. 1 root root 87 3月 5 17:56 a.txt
drwxr-xr-x. 3 root root 22 3月 2 21:25 backup
lrwxrwxrwx. 1 root root 7 6月 25 2024 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 3月 1 17:49 boot
-rw-r--r--. 1 root root 707728 3月 2 17:26 day02_Linux核心命令.xmind
drwxr-xr-x. 20 root root 3420 3月 7 08:54 dev
drwxr-xr-x. 139 root root 8192 3月 7 09:04 etc
drwxr-xr-x. 9 root root 99 3月 7 09:04 home
lrwxrwxrwx. 1 root root 7 6月 25 2024 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 6月 25 2024 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 6月 25 2024 media
drwxr-xr-x. 3 root root 18 3月 1 17:19 mnt
drwxr-xr-x. 3 root root 48 3月 4 17:50 opt
dr-xr-xr-x. 301 root root 0 3月 7 08:54 proc
drwxrwx---. 2 root project_group 6 3月 7 08:56 project
dr-xr-x---. 18 root root 4096 3月 7 08:54 root
-rw-r--r--. 1 root root 516 3月 4 15:08 root.tar.gz
drwxr-xr-x. 46 root root 1220 3月 7 08:54 run
lrwxrwxrwx. 1 root root 8 6月 25 2024 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 6月 25 2024 srv
dr-xr-xr-x. 13 root root 0 3月 7 08:54 sys
drwxr-xrwx. 2 root root 32 3月 5 16:13 test
drwxrwxrwt. 24 root root 4096 3月 7 08:55 tmp
drwxr-xr-x. 12 root root 144 3月 1 17:14 usr
drwxr-xr-x. 20 root root 4096 3月 1 17:49 var
[root@node1-itcast-cn /]#注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
2.4.2 ACL权限控制
思路:对单一的用户或用户组来设置单独的权限, 更多的时候主要针对单一用户
在 /shared 目录下,有一个文件 report.txt,要求:
1. user1 可以读写该文件。 2. user2 只能读取该文件。 3. 其他用户不能访问该文件。
[root@node1-itcast-cn /]# mkdir -p /shared
[root@node1-itcast-cn /]# cd /shared/
[root@node1-itcast-cn shared]# pwd
/shared
[root@node1-itcast-cn shared]# touch ./report.txt
[root@node1-itcast-cn shared]# ll
总用量 0
-rw-r--r--. 1 root root 0 3月 7 09:14 report.txt
[root@node1-itcast-cn shared]# cd ../
[root@node1-itcast-cn /]# ll
总用量 728
dr-xr-xr-x. 2 root root 6 6月 25 2024 afs
drwxr-xr-x. 3 root root 25 3月 4 09:16 archive
-rw-r--r--. 1 root root 87 3月 5 17:56 a.txt
drwxr-xr-x. 3 root root 22 3月 2 21:25 backup
lrwxrwxrwx. 1 root root 7 6月 25 2024 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 3月 1 17:49 boot
-rw-r--r--. 1 root root 707728 3月 2 17:26 day02_Linux核心命令.xmind
drwxr-xr-x. 20 root root 3420 3月 7 08:54 dev
drwxr-xr-x. 139 root root 8192 3月 7 09:04 etc
drwxr-xr-x. 9 root root 99 3月 7 09:04 home
lrwxrwxrwx. 1 root root 7 6月 25 2024 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 6月 25 2024 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 6月 25 2024 media
drwxr-xr-x. 3 root root 18 3月 1 17:19 mnt
drwxr-xr-x. 3 root root 48 3月 4 17:50 opt
dr-xr-xr-x. 302 root root 0 3月 7 08:54 proc
drwxrwx---. 2 root project_group 6 3月 7 08:56 project
dr-xr-x---. 18 root root 4096 3月 7 08:54 root
-rw-r--r--. 1 root root 516 3月 4 15:08 root.tar.gz
drwxr-xr-x. 46 root root 1220 3月 7 08:54 run
lrwxrwxrwx. 1 root root 8 6月 25 2024 sbin -> usr/sbin
drwxr-xr-x. 2 root root 24 3月 7 09:14 shared
drwxr-xr-x. 2 root root 6 6月 25 2024 srv
dr-xr-xr-x. 13 root root 0 3月 7 08:54 sys
drwxr-xrwx. 2 root root 32 3月 5 16:13 test
drwxrwxrwt. 24 root root 4096 3月 7 08:55 tmp
drwxr-xr-x. 12 root root 144 3月 1 17:14 usr
drwxr-xr-x. 20 root root 4096 3月 1 17:49 var
[root@node1-itcast-cn /]# cd shared/
[root@node1-itcast-cn shared]#
[root@node1-itcast-cn shared]# ll
总用量 0
-rw-r--r--. 1 root root 0 3月 7 09:14 report.txt
[root@node1-itcast-cn shared]# setfacl -m u:user1:rw report.txt
[root@node1-itcast-cn shared]# getfacl report.txt
# file: report.txt
# owner: root
# group: root
user::rw-
user:user1:rw-
group::r--
mask::rw-
other::r--
[root@node1-itcast-cn shared]# setfacl -m u:user2:r report.txt
[root@node1-itcast-cn shared]# getfacl report.txt
# file: report.txt
# owner: root
# group: root
user::rw-
user:user1:rw-
user:user2:r--
group::r--
mask::rw-
other::r--
[root@node1-itcast-cn shared]# chmod o=- report.txt
[root@node1-itcast-cn shared]# ll
总用量 0
-rw-rw----+ 1 root root 0 3月 7 09:14 report.txt
[root@node1-itcast-cn shared]#注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
2.4.3 复杂权限管理
公司有一个 /data 目录,目录结构如下:

要求:
1. finance 目录只能由 finance_group 组的成员访问,且只能读写文件。 2. hr 目录只能由 hr_group 组的成员访问,且只能读取文件。 3. it 目录只能由 it_group 组的成员访问,且可以读写和执行文件。
[root@node1-itcast-cn shared]# mkdir -p /data
[root@node1-itcast-cn shared]# cd /data/
[root@node1-itcast-cn data]# pwd
/data
[root@node1-itcast-cn data]# tree /data
/data
[root@node1-itcast-cn data]# mkdir -p ./finance ./hr ./it
[root@node1-itcast-cn data]# tree /data/
/data/
├── finance
├── hr
└── it
3 directories, 0 files
# 为了方便测试, 每个子目录下, 创建一个文件
[root@node1-itcast-cn data]# touch ./finance/a.txt
[root@node1-itcast-cn data]# touch ./hr/b.txt
[root@node1-itcast-cn data]# touch ./it/c.txt
[root@node1-itcast-cn data]# tree /data/
/data/
├── finance
│ └── a.txt
├── hr
│ └── b.txt
└── it
└── c.txt
3 directories, 3 files
[root@node1-itcast-cn data]# groupadd finance_group
[root@node1-itcast-cn data]# groupadd hr_group
[root@node1-itcast-cn data]# groupadd it_group
[root@node1-itcast-cn data]# tail -5 /etc/group
user2:x:1007:
user3:x:1008:
finance_group:x:1009:
hr_group:x:1010:
it_group:x:1011:
[root@node1-itcast-cn data]# ll
总用量 0
drwxr-xr-x. 2 root root 19 3月 7 09:42 finance
drwxr-xr-x. 2 root root 19 3月 7 09:43 hr
drwxr-xr-x. 2 root root 19 3月 7 09:43 it
[root@node1-itcast-cn data]# chown -R root:finance_group ./finance
[root@node1-itcast-cn data]# chown -R root:hr_group ./hr/
[root@node1-itcast-cn data]# chown -R root:it_group ./it/
[root@node1-itcast-cn data]# ll
总用量 0
drwxr-xr-x. 2 root finance_group 19 3月 7 09:42 finance
drwxr-xr-x. 2 root hr_group 19 3月 7 09:43 hr
drwxr-xr-x. 2 root it_group 19 3月 7 09:43 it
[root@node1-itcast-cn data]# chmod o=- ./finance/
[root@node1-itcast-cn data]# chmod o=- ./hr/
[root@node1-itcast-cn data]# chmod o=- ./it/
[root@node1-itcast-cn data]# ll
总用量 0
drwxr-x---. 2 root finance_group 19 3月 7 09:42 finance
drwxr-x---. 2 root hr_group 19 3月 7 09:43 hr
drwxr-x---. 2 root it_group 19 3月 7 09:43 it
[root@node1-itcast-cn data]# cd ./finance/
[root@node1-itcast-cn finance]# ll
总用量 0
-rw-r--r--. 1 root finance_group 0 3月 7 09:42 a.txt
[root@node1-itcast-cn finance]# chmod g=rw,o=- *
[root@node1-itcast-cn finance]# ll
总用量 0
-rw-rw----. 1 root finance_group 0 3月 7 09:42 a.txt
[root@node1-itcast-cn finance]# cd ../hr/
[root@node1-itcast-cn hr]# ll
总用量 0
-rw-r--r--. 1 root hr_group 0 3月 7 09:43 b.txt
[root@node1-itcast-cn hr]# chmod o=- *
[root@node1-itcast-cn hr]# ll
总用量 0
-rw-r-----. 1 root hr_group 0 3月 7 09:43 b.txt
[root@node1-itcast-cn hr]# cd ../it/
[root@node1-itcast-cn it]# ll
总用量 0
-rw-r--r--. 1 root it_group 0 3月 7 09:43 c.txt
[root@node1-itcast-cn it]# chmod 777 *
[root@node1-itcast-cn it]# ll
总用量 0
-rwxrwxrwx. 1 root it_group 0 3月 7 09:43 c.txt
[root@node1-itcast-cn it]# chmod 770 *
[root@node1-itcast-cn it]# ll
总用量 0
-rwxrwx---. 1 root it_group 0 3月 7 09:43 c.txt
[root@node1-itcast-cn it]#注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
同步说明
本文由飞书云文档同步生成。涉及命令、SQL、配置示例时,请以飞书源文档和实际环境执行结果为准。