Linux 用户组管理和权限控制
目录
Δ前言
- Linux实用命令汇总:Linux 常见实用命令汇总及实战演示-CSDN博客
- Linux vim使用:Linux vim三种模式 和 vim常用快捷键汇总_vim visual mode , normal mode, insert mode-CSDN博客
- Linux 目录结构:Linux 目录结构 详解-CSDN博客
一、用户组管理
1.拾枝杂谈:
Linux中的组:(每个用户)
对于Linux中每一个文件,都存在“所有者”,“所在组”,和“其他组”的概念。具体如下——
所有者 (Owner):通常是文件的创建者,拥有最高话语权。
所在组 (Group):文件所属的团队。组内的其他成员可以根据设置的权限来操作文件。
其他组 (Others):既不是所有者,也不在所在组里的“路人甲”。
PS:每当用户创建了一个文件后,这个文件的所在组默认就是该用户所在的组。
2.修改用户所在组:
我们在上一篇博文中提到过,“useradd -g 用户组 用户名” 命令,可以在增加一个用户的同时,直接将该用户指定到一个组中(这里的 -g 表示用户的主组)。
同时我们也提到,如果我们想把一个用户从 A 组挪到 B 组,或者修改他的主组,可以使用 “usermod -g 用户组 用户名” 命令,来修改用户所在的组(这里的 -g 表示用户的主组)。。
Δ注意:这个操作必须拥有 root 权限(或者在命令前加 sudo)。例如,把用户cyan的初始组修改为developers,命令为:sudo usermod -g developers cyan.
3.修改用户的初始登录目录:
有时候我们需要更改用户登录后的默认家目录位置,这同样通过 usermod 来完成。指令如下:
usermod -d 新目录路径 用户名
但是我们要注意,首先这个指定的目录必须是真实存在的,其次该用户必须对这个新目录有访问和操作权限,否则登录时会因为进不去家目录而报错。
4.如何修改文件或目录的所有者和所在组?
4.1 改变文件所有者:
把一个文件的所有权转交给别人,指令如下:
chown 新所有者 文件名/目录名
例:chown root test.txt(把 test.txt 移交给 root)
4.2 改变文件所在组:
如果只想改组,不想改文件/目录的所有者,使用指令:
chgrp 新所在组 文件名/目录名
例:chgrp police test.txt(把文件归入 police 组)
4.3 同时改变文件的所有者和所在组:
其实 chown 一个指令就能干两个活,中间用冒号或点隔开:
chown 所有者:所在组 文件名/目录名
例:chown cyan:developers test.txt(主人改为 cyan,组改为 developers)
PS:如果我们修改的是一个目录,并且希望目录下所有的子文件、子文件夹也跟着一起改,一定要记得加上参数 -R(表示递归):
chown -R cyan:developers /home/cyan/my_project/
二、权限控制
1.权限说明:
当我们输入 ls -l 时,终端会跳出一行行字符。最左边的那 10 个字符就是理解权限的钥匙。
ls -l 的输出结果示意图, 如下所示:

其中,第一个字符用于表示文件的类型,具体类型如下表所示:
| 第一个字符 | 所代表的类型 |
|---|---|
| - | 普通文件 |
| d | 目录 |
| l | 符号链接(软链接) |
| b | 块设备文件 |
| c | 字符设备文件 |
| p | 命名管道 |
| s | 套接字文件 |
第一个字符后面的连续九个字符表示权限:分为三组,每组三个字符。具体表示内容如下:
第一组 (第 2-4 位) :文件所有者的权限 (rwx = 读写执行)
第二组 (第 5-7 位) :文件所属组的权限 (rwx = 读写执行)
第三组 (第 8-10 位) :其他用户的权限 (rwx = 读写执行)
前十个字符之后分别是:
1.一位类型 + 九位权限
2.硬链接数:文件或目录的硬链接数量。
3.所有者:文件或目录的所有者用户名。
4.所属组:文件或目录所属的组名。
5.文件大小:文件的字节数(默认)。PS: 在Linux中,ls -l 显示的文件夹大小,只是文件夹这个“目录文件”本身的大小。如果想计算文件夹内所有文件的总大小,应该使用 du -sh <文件夹名> (disk usage)命令。
6.最后修改时间:文件或目录的最后修改日期和时间。
7.文件/目录名:文件或目录的名称。
rwx权限作用到文件 和 作用到目录 是有差异的, 具体如下:
1) rwx 作用到文件:
[ r ] (read):可以读取、查看文件内容。
[ w ] (write):可以修改内容。注意:拥有写权限并不代表能删除该文件,想删除文件,前提是你必须对该文件所在的目录拥有写权限。
[ x ] (execute):该文件可以被系统执行(如脚本、程序)。
2) rwx 作用到目录:
[ r ] (read):可以读取,即可以使用 ls 指令 查看该目录下的内容。
[ w ] (write):可以修改,即可以在目录下创建、删除、重命名文件或子目录。
[ x ] (execute):可以进入,即可以使用 cd 命令 进入该目录。
2.修改权限:
如果要改变一个文件或目录的权限,就要用到 chmod 指令。它有两种常用的表达方式:
方式一:符号法(加减法)
通过 u (owner)、g (group)、o (others)、a (all) 来指定人群,用 +、-、= 来分配权限。
eg1: chmod u+x script.sh:给所有者增加执行权限。
eg2: chmod g-w,o-w test.txt:取消组和其他人的写权限。
eg3: chmod a=rwx test.txt:让所有人都有全部权限。
方式二:数字法(最常用)
这种方式更高效。我们给 rwx 分别赋值为:r = 4,w = 2,x = 1 ;然后通过相加得出三位数字。例如:
rwx = 4+2+1 = 7
rw- = 4+2+0 = 6
r-x = 4+0+1 = 5
常用组合:
chmod 777:所有人全开权限(不安全,慎用)。
chmod 755:所有者全开,组和其他人只能看和进(常用于目录)。
chmod 644:所有者可读写,其他人只能读(常用于普通配置文件)。
3.权限管理案例:
3.1 案例一: 为研发小组搭建共享代码库
背景:假设公司有一个“吊大组”(genshin_team),成员有 cyan 和 alice。他们需要在 /opt 下维护一个共享代码库 /opt/secret_code。
要求:组内成员 能自由读写,组外人员 连看一眼的资格都没有。
实操步骤:(如下)
- 创建小组并添加成员(如果还没建的话)(这里的 -G 表示附加组,-a 表示追加):
sudo groupadd genshin_team sudo usermod -aG genshin_team cyan sudo usermod -aG genshin_team alice # Linux 中每个用户有一个“主组”(通常是和用户名同名的组), # 除此之外还可以加入多个其他的“补充组 / 附加组”,以获得这些组的访问权限(比如访问某些文件夹或使用特定硬件)。 # 附加组主要用于权限赋予。它可以让用户获得额外组的访问权限,而不改变其主组身份。 # 如果不加 -a,直接使用 -G,系统会覆盖用户原有的补充组列表(即用户会被踢出原来所在的其他组,只保留现在指定的这个组)。 - 创建目录并初始化归属:
sudo mkdir -p /opt/secret_code sudo chown -R root:genshin_team /opt/secret_code # 所有者归root,所在组归吊大组 - 设置权限隔离【核心】:
sudo chmod -R 770 /opt/secret_code
第一个 7 让 root 拥有最高权;第二个 7 让 genshin_team 成员(alice 和 cyan)能 cd 进去(x)、查看列表(r)并修改代码(w);第三个 0 则是关键,它像一堵墙,彻底封死了其他所有人的路! 啊哈哈,原神启动!
3.2 规范 Web 服务器的静态资源发布
背景:假设你在 /var/www/html 部署了一个网站。为了安全,Web 服务进程(通常是 www-data 用户)只需要 “读” 权限来展示网页,不应该有 “写” 权限(防止黑客通过网页漏洞篡改文件);而你作为管理员(假设用户名为 deployer),需要有完整的读写权。
实操步骤:(如下)
1. 统一归属权:
deployer 是部署代码的人,www-data 是 Web 服务器(如 Nginx/Apache)运行的用户组。这样设置后,开发部署人员和 Web 服务器都能访问这些文件。
sudo chown -R deployer:www-data /var/www/html
2. 分层设置权限【核心】:
第一条指令和第二条指令类似,这里解读一下第一条指令:
find指令这里的 -type d 表示 type = directory,只找目录(不找普通文件),目的是找出 /var/www/html 下面所有的文件夹。
-exec:表示对找到的每个结果,执行后面的命令
{}:表示占位符,代表 find 找到的每一个文件夹
\;:表示 -exec 命令结束 ( \ 表示转义,因为在 Linux 的 find 命令中,表示 -exec 结束的标记是 ;(分号))
# 对于目录,需要能进入(x)和查看(r):
find /var/www/html -type d -exec sudo chmod 750 {} \;
# 7:所有者(deployer)拥有读、写、执行权限;
# 5:所属组(www-data)拥有读、执行权限(注意:对文件夹来说,"执行"权限意味着"允许进入该目录")
# 0:其他人(其他组的用户)没有任何权限
# 对于普通文件(HTML/CSS/JS),只需要能读取(r):
find /var/www/html -type f -exec sudo chmod 640 {} \;
3.3 处理“私钥过于开放”导致的 SSH 报错
背景:这是一个 Linux 新手(包括up) 几乎 100% 会遇到的经典案例。假设你刚把一个用于远程登录的私钥 my_server.pem 下载到服务器上,兴冲冲地执行 ssh -i my_server.pem user@host,结果系统直接刷出一大片红色警告:"Permissions 0644 for 'my_server.pem' are too open." 并拒绝连接。
实操步骤:(如下)
1.观察现状:
ls -l my_server.pem
# 结果通常是 -rw-r--r--,表示其他人也能读取这个私钥
2.强制收紧权限【核心】:
chmod 600 my_server.pem
3.再次尝试连接:
ssh -i my_server.pem user@host
# 此时连接成功
解析:Linux 的安全机制非常严格。对于 私钥 这种极其敏感的文件,它要求除了所有者本人,任何人都不能有任何权限。600(即 rw-------)是私钥文件的唯一合法通行证 (准确来说,是绝大多数程序 如 SSH 默认要求的权限)。如果权限给多了(比如 644 或 777),SSH 客户端会认为这个密钥已经不再安全,从而根据自我保护机制拒绝工作。
Δ总结
- 🆗,以上就是本篇博文的全部内容了,感谢阅读!
- 文章共分为了 “用户组管理” 和 “权限控制” 两大部分,其中用户组管理部分重点要掌握 chown 指令;权限控制则是重难点内容,尤其是后面的权限管理应用案例,需要多多留心。
- 下一篇可能会更 进程与系统监控 相关的内容。敬请期待。
System.out.println("END------------------------------");
更多推荐




所有评论(0)