三、用户和权限
1、用户
Linux 是多用户系统,用户分为:
-
普通用户 :日常使用,权限受限(如
zhangsan)。 -
超级用户(root):拥有最高权限,可管理系统所有文件和服务。
-
系统用户 :供后台服务使用(如
www-data、mysql)。
使用普通用户在许多对于home目录(即home/下的目录)之外的文件只有只读和执行的权限,要想获取更多权限,需要我们切换用户,如我们使用普通用户无法在根目录下创建文件夹,会提醒我们权限不足,我们可以通过切换为超级用户root(su - root或su -【默认不写切换的用户名就默认切换到root超级用户】),就可以完成文件夹的创建。
普通用户切换为其他用户需要输入密码,超级用户切换为其他用户不需要输入密码
注意:默认情况下,Ubuntu/WSL 的 root 用户可能未设置密码。我们需要为其初始设置密码才可通过使用su切换用户
1.1、sudo
由于我们需要获得权限操作文件,但是使用su - root 长时间切换为root超级用户,易对系统造成损失破坏,因为root用户具有最高权限,误操作命令不会报错而是直接执行。
为了避免长时间使用root用户,我们使用sudo为某一条命令临时赋予root用户权限,即在当前用户是sudo认证过后的普通用户的前提下,使用sudo临时获取root用户的权限进行操作。
注意:只有进行过sudo认证的用户才可使用sudo
①、配置sudo认证
-
进入root用户
-
输入visudo,在打开的文件(直接默认打开/etc/sudoers文件,使用的是nano编辑器)直接在最后一行加上:
用户名 ALL=(ALL) NOPASSWORD: ALL
-
ctrl+o并按下回车确认文件名------>保存文件,之后ctrl+x退出编辑器

②、取消sudo认证
-
进入root用户
-
输入visudo,在打开的文件(直接默认打开/etc/sudoers文件,使用的是nano编辑器)直接删除添加的已配置的sudo认证
-
ctrl+o并按下回车确认文件名------>保存文件,之后ctrl+x退出编辑器

1.2、用户管理命令
| 命令 | 作用 | 示例 |
|---|---|---|
whoami |
查看当前用户 | whoami → root |
id |
查看用户 UID/GID | id zhangsan |
useradd |
创建用户 | sudo useradd -m zhangsan |
passwd |
设置密码 | sudo passwd zhangsan |
usermod |
修改用户属性 | sudo usermod -aG sudo zhangsan(加入 sudo 组) |
userdel |
删除用户 | sudo userdel -r zhangsan(-r 删除家目录) |
1.3、用户组(Group)
用户组用于批量管理权限,一个用户可以属于多个组。
①、组管理命令
| 命令 | 作用 | 示例 |
|---|---|---|
groups |
查看用户所属组 | groups zhangsan |
groupadd |
创建用户组 | sudo groupadd dev(需要root权限) |
gpasswd |
管理组成员 | sudo gpasswd -a zhangsan dev(添加用户到组) |
groupdel |
删除用户组 | sudo groupdel dev(需要root权限) |
②、用户管理命令
-
创建用户
useradd [-g -d] 用户名-
选项:
-g指定用户的组,不指定-g,会创建同名组并自动加入,指定-g需要组已经存在,如已存在同名组,必须使用-g -
选项:
-d指定用户HOME路径,不指定,HOME目录默认在:/home/用户名
-
-
删除用户
userdel [-r] 用户名- 选项:
-r,删除用户的HOME目录,不使用-r,删除用户时,HOME目录保留
- 选项:
-
查看用户所属组
id [用户名]- 参数:用户名,被查看的用户,如果不提供则查看自身
-
修改用户所属组
usermod -aG 用户组 用户名,将指定用户加入指定用户组
1.4、getent
getent 是 Linux/Unix 系统中的一个命令,用于从系统数据库(如 /etc/passwd、/etc/group、/etc/hosts 等)获取条目信息。它提供了一种统一的方式来查询不同的名称服务数据库(NSS, Name Service Switch),无论这些数据是存储在本地文件还是通过 LDAP/NIS 等网络服务获取。
①、基本语法
bash
getent database [key ...]
-
database:要查询的数据库名称(如passwd、group、hosts等)。 -
key:可选,指定要查找的具体条目(如用户名、组名、主机名等)。如果省略,则显示所有条目。
②、常用数据库类型
| 数据库 | 描述 | 示例命令 |
|---|---|---|
passwd |
用户账户信息(等效于 /etc/passwd) |
getent passwd zhangsan |
group |
用户组信息(等效于 /etc/group) |
getent group dev |
hosts |
主机名/IP 映射(等效于 /etc/hosts) |
getent hosts example.com |
services |
网络服务定义(如端口号) | getent services ssh |
shadow |
用户密码哈希(需 root 权限) | sudo getent shadow zhangsan |
protocols |
网络协议(如 tcp、udp) |
getent protocols tcp |
③、常见用法示例
bash
# 查询用户信息
getent passwd zhangsan
# 输出格式:zhangsan:x:1001:1001:Zhang San:/home/zhangsan:/bin/bash
# 字段含义:用户名:密码占位符:UID:GID:描述:家目录:默认 Shell。
# 查询组信息
getent group dev
# 输出示例: dev:x:1002:zhangsan,lisi
# 字段含义: 组名:密码占位符:GID:组成员列表。
# 查询主机名/IP
getent hosts example.com
# 输出示例: 93.184.216.34 example.com
# 显示所有用户或组
getent passwd # 列出所有用户
getent group # 列出所有组
# 检查服务端口
getent services ssh
2、权限
2.1、三种权限
①、r(读权限)
-
文件:可查看内容(如
cat、less)。 -
目录:可列出目录内文件(如
ls)。
②、w(写权限)
-
文件:可修改内容(如
vim编辑、echo覆盖)。 -
目录:可增删目录内文件/子目录(如
touch、rm、mkdir)。
③、x(执行权限)
-
文件:可运行(如
./script.sh,脚本需x权限)。 -
目录:可进入目录(如
cd dir),无x权限时无法访问目录内任何内容(即使有r权限)。
2.2、目录权限槽位结构
以根目录下的文件为例
第①行是权限槽位
第②行是文件所属用户
第③行是文件所属用户组

可见根目录下的第①行共10个槽位
如果以其他用户登录,那么我们所属的用户所拥有的权限由第①行的后三位决定,如根目录下的Docker文件,根据最后三位可见是:r-x,即我们只有读和执行的权限,并没有写权限,无法对其进行修改
2.3、修改权限控制
①、chmod
chmod(change mode)是 Linux/Unix 系统中用于修改文件或目录权限 的命令,通过调整所有者(User)、所属组(Group)和其他用户(Others)的读(r)、写(w)、执行(x)权限,实现对文件访问控制的管理。
Ⅰ、基本语法
bash
chmod [选项] 权限模式 文件/目录
权限模式 :可以是符号模式 (如 u+rwx)或数字模式 (如 755,最常用)。
选项:
-
-R:递归修改目录及其子目录下所有文件的权限(危险!慎用)。 -
-v:显示修改过程(verbose)。
Ⅱ、权限模式的两种表示方法
- 数字模式(八进制数字,推荐)
将 r/w/x 权限对应为数字,每组权限(所有者、所属组、其他用户)用一个数字表示,共3位数字(0-7)。
| 权限符号 | 含义 | 数字值 | 组合示例 | 数字总和 |
|---|---|---|---|---|
r |
读权限 | 4 | r |
4 |
w |
写权限 | 2 | w |
2 |
x |
执行权限 | 1 | x |
1 |
- |
无权限 | 0 | rwx(4+2+1) |
7 |
rw-(4+2) |
6 | |||
r-x(4+1) |
5 | |||
r--(4) |
4 | |||
-wx(2+1) |
3 | |||
-w-(2) |
2 | |||
--x(1) |
1 | |||
---(0) |
0 |
数字模式格式:
[所有者权限][所属组权限][其他用户权限](3位数字,如 755)。
- 符号模式(更直观,适合局部调整)
通过符号指定用户类别 、操作 和权限,格式:
bash
chmod [用户类别][操作][权限] 文件/目录
用户类别(u/g/o/a):
| 符号 | 含义 |
|---|---|
u |
所有者(User) |
g |
所属组(Group) |
o |
其他用户(Others) |
a |
所有用户(All,默认) |
操作(+/-/=):
| 符号 | 含义 |
|---|---|
+ |
添加权限 |
- |
移除权限 |
= |
覆盖设置权限(清除未指定权限) |
权限(r/w/x):
即读(r)、写(w)、执行(x)。
Ⅲ、示例
bash
# 将 file.txt 权限设为:所有者可读可写可执行,组和其他用户可读可执行
chmod 755 file.txt # 对应权限字符串:-rwx(111--7)r-x(101--5)r-x(101--5)
# 将 dir 权限设为:所有者可读可写可执行,组可读可执行,其他用户无权限
chmod 750 dir # 对应权限字符串:drwxr-x---
# 给文件所有者添加执行权限
chmod u+x script.sh # 原权限 -rw-r--r-- → -rwxr--r--
# 移除所属组的写权限
chmod g-w data.txt # 原权限 -rw-rw-r-- → -rw-r--r--
# 给所有用户设置读权限(覆盖其他权限)
chmod a=r file.txt # 权限变为 -r--r--r--
# 给所有者和组添加读写执行权限,其他用户无权限(等效于 770)
chmod ug=rwx,o= file.txt # 权限 -rwxrwx---
# 修改文件 file.txt 权限为 -r--r-xrwx
chmod u=r g=rx o=rwx file.txt
②、chown
chown(change owner)是 Linux/Unix 系统中用于修改**文件/目录所有者(Owner)和所属组(Group)**的命令。通过调整归属关系,可以控制哪些用户或组对文件拥有管理权限。
Ⅰ、基本语法
bash
chown [选项] [所有者][:组] 文件/目录
所有者 :新的用户名(如 root、zhangsan)
组 :新的组名(如 admin、dev),需在所有者后加 : 或 . 指定。
选项:
-
-R:递归修改目录及其子目录下所有文件的归属(慎用)。 -
-v:显示修改详情(verbose)。 -
--from=原所有者:原组:仅当文件当前归属匹配时才修改(安全操作)。
Ⅱ、示例
bash
# 注意:普通用户无法修改他人文件的所有权,需用 sudo 提权。
# 修改所属用户
sudo chown zhangsan file.txt # 将 file.txt 的所有者改为 zhangsan
# 修改所属用户组
sudo chown :dev file.txt # 将 file.txt 的所属组改为 dev
# 同时修改所有者和组
sudo chown zhangsan:dev file.txt # 所有者=zhangsan,组=dev
# 递归修改目录归属
sudo chown -R zhangsan:dev /project # 修改 /project 下所有内容的归属
