阶段一:Linux高级之用户与权限管理

1. 用户和组管理

1.1 用户与用户组的基本概念

用户:是系统中的独立身份,用于登录和执行任务。每个用户有唯一的标识符(UID)和自己的文件及设置。用户的主要功能是访问系统资源并运行进程。

用户组:是多个用户的集合,用于简化权限管理。通过将用户加入组,用户可以继承组的权限,从而访问特定的文件、目录或执行操作。

image

注意:

1.2 用户组相关操作

在Linux操作系统中,用户组的操作通常有三种情况:用户组的添加、用户组的修改与用户组的删除。

用户组:group

添加:add

修改:mod

删除:del

用户组添加:

案例一:在系统中创建一个admin用户组
groupadd admin

案例二:在系统中创建一个test组,组编号为2000
groupadd -g 2000 test

查看是否创建成功,可查询系统的用户组文件:/etc/group

注意事项:

案例一: 把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

注意事项:

1.3 用户相关操作

在Linux操作系统中,用户的管理涉及用户的添加、修改和删除。

用户:user

添加:add

修改:mod

删除:del

用户添加

选项说明
-ggid,添加用户时指定用户所属的主组的编号(gid),只能有一个
-GGID,添加用户时指定用户所属的附加组的编号(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

注意事项:

在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系统用户、账号被禁用

注意事项:

案例一: 修改lisi账号的所属的主组为test
# 如何验证是否存在test组呢?
grep test /etc/group
# 如何没有任何的显示, 说明不存在, 执行创建
groupadd test

# 修改用户主组
usermod -g test lisi

注意事项:

案例二:修改用户的家目录,把zhaoliu的家目录更改为/home/zhaoliu
usermod -d /home/zhaoliu -m zhaoliu

案例三: 禁止wangwu账号登录Linux操作系统
usermod -s /sbin/nologin wangwu

注意事项:

案例: 修改zhangsan账号的密码为123456
passwd zhangsan

注意事项:

案例:删除wangwu这个账号
userdel wangwu

案例:删除lisi的同时删除用户的家
userdel -r lisi

案例:强制删除系统中登陆的某个账号
userdel -rf zhaoliu

注意事项:

1.4 综合案例

假设你是一家公司的系统管理员,需要为新项目组设置用户和用户组。项目组名为 project_team,组内有三个成员:alicebobcharlie。你需要完成以下任务:

1. 创建一个名为 project_team 的用户组。

groupadd project_team

校验:
grep project_team /etc/group

注意事项:

useradd -s /bin/bash alice
useradd -s /bin/bash bob
useradd -s /bin/bash charlie

校验:
tail -10 /etc/passwd

注意事项:

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

注意事项:

userdel -r charlie

# 校验
grep project_team  /etc/group
project_team:x:1001:alice,bob

注意事项:

2. 权限与所有权管理

2.1 权限管理

在多用户计算机系统的管理中,权限是指某个特定的用户具有特定的系统资源使用权利

在Linux操作系统中,权限只有三种情况:可读、可写、可执行

权限针对文件权限针对目录
读 r表示可以查看文件内容;cat表示可以(ls)查看目录中存在的文件名称
写 w表示可以更改文件的内容;vim 修改,保存退出表示是否可以删除目录中的子文件或者新建子目录(rm/touch/mkdir)
执行 x表示是否可以开启文件当中记录的程序,一般指二进制文件(.sh)表示是否可以进入目录中(cd)
image

2.1.1 权限的详解

image
第一位: 表示文件类型
    - : 普通文件
    d : 普通目录
    l : 快捷方式(软连接)

第二位 ~ 第四位: 表示所    属用户权限(代号:U)

第五位 ~ 第七位: 表示所属用户组权限(代号:G)

第八位 ~ 第十位: 表示其他用户权限(代号:O)

特殊用户:root,在Linux操作系统中,root用户时一个特殊的存在,其不受权限的影响。其在整个系统中,拥有所有文件的管理权限。

注意事项:

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

注意事项:

案例: 把家目录下shop文件夹连同其内部的文件中的文件拥有者、所属组内用户、其他用户都设置为rwx(全部权限)
mkdir -p /root/shop
cd  /root/shop
touch a.txt b.txt c.txt

设置权限:
chmod -R ugo=rwx  shop

注意事项:

案例: 减少shop文件夹的权限(连同内部的文件),其文件拥有者权限保持不变,组内用户减少w权限,其他用户减少rwx权限。

chmod -R g-w,o-rwx  shop

注意事项:

2.1.2.2 数字设置

文件权限与数字的对应关系:

权限对应数字意义
r4可读
w2可写
x1可执行

我们在数字形式权限的设置过程中,通常是三位连续的数字,如755、644、777等等

第1位数字代表文件拥有者权限

第2位数字代表文件所属组内用户权限

第3位数字代表其他用户权限

# 案例:更改linux.txt文件的权限,文件拥有者拥有全部权限、组内用户拥有可读可写权限、其他用户拥有可读权限

chmod 764 linux.txt

# 案例:给shop文件夹(仅设置文件夹本身),文件拥有者、组内用户、其他用户设置最高权限
chmod 777 shop

# 案例:给文件linux.txt设置权限为600
chmod 600 linux.txt

注意事项:

2.1.3 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

注意事项:

chmod u+s /usr/bin/passwd
# 或
chmod 4755 /usr/bin/passwd

注意事项:

chmod u-s /usr/bin/passwd

注意事项:

2.1.4.2 粘滞位T(sticky bit)

其主要应用对象为文件夹(目录),这个目录大部分都是公共目录,权限大部分为777。

粘滞位权限:其主要作用就是限制公共目录,让这个目录下的文件不能被误删除。除了这个文件的拥有者,其他用户一律不能删除别人的文件。

ll -d /tmp
# drwxrwxrwt. 20 root root 4096 7月   9 15:57 /tmp
观察以上命令的运行结果,其其他拥有者权限为rwt,这个t就是粘滞位权限

注意事项:

chmod o-t /tmp

注意事项:

chmod o+t /tmp
# 或
chmod 1777 /tmp

注意事项:

2.2 文件所属用户与所属组

image

2.2.1 所属用户修改

命令:chown = change owner

格式: chown [选项] 新的文件拥有者 文件名称

选项说明
-R递归设置,递归更改文件的拥有者

案例:把/root/linux.txt其文件的拥有者更改为itcast

chown itcast /root/linux.txt

注意事项:

chown -R itcast  /root/shop

注意事项:

2.2.2 所属组修改【了解】

命令:chgrp = change group

格式: chgrp [选项] 新的文件的所属组 文件名称

选项说明
-R递归设置,递归更改文件的所属组

案例:把/root/linux.txt其文件的所属组更改为itcast

chgrp itcast /root/linux.txt

注意事项:

chgrp -R itcast  /root/shop

注意事项:

2.2.3 同时修改所属用户和所属组

命令: chown

格式:

chown [-R] 文件拥有者:文件的所属组 文件名称
# 或
chown [-R] 文件拥有者.文件所属组 文件名称

注意事项:

chown root:ro    ot /root/linux.txt

注意事项:

chown -R root:root  /root/shop

注意事项:

2.3 ACL权限控制

2.3.1 什么是ACL

image

ACL,是 Access Control List(访问控制列表)的缩写,在 Linux 系统中, ACL 可实现对单一用户设定访问文件的权限。

2.3.2 获取文件的ACL权限

基本语法:getfacl 文件或目录名称

getfacl = get file acl

案例:获取/root/linux.txt的ACL权限

getfacl /root/linux.txt

注意事项:

2.3.3 设置文件的ACL权限

基本语法:

setfacl [-R] -m u:用户名称:具体权限如rwx 文件或目录名称
# 或
setfacl [-R] -m g:用户组的名称:具体权限如rwx 文件或目录名称

-m:表示修改(modify)现有的 ACL 规则。
-R: 如需要对目录设置,需要添加-R参数

注意事项:

[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::---

注意事项:

[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::---

注意事项:

2.3.4 删除文件的ACL权限

基本语法:

setfacl [-R] -x u:用户名称 文件或目录名称
# 或
setfacl [-R] -x g:用户组名称 文件或目录名称

setfacl [-R] -b 文件或目录的名称        =>       删除文件或目录的所有ACL权限

注意事项:

setfacl -x u:itcast /root/linux.txt

注意事项:

setfacl -b /root/shop

注意事项:

2.4 权限综合案例

2.4.1 权限管理与用户组协作

公司有一个项目组,组内有三个成员:user1user2user3。他们需要共同管理一个项目目录 /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 /]#

注意事项:

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]#

注意事项:

2.4.3 复杂权限管理

公司有一个 /data 目录,目录结构如下:

image

要求:

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]#

注意事项: