Linux入门2(1/3)
三、用户和权限
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 等网络服务获取。
①、基本语法
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 |
③、常见用法示例
# 查询用户信息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:组成员列表。# 查询主机名/IPgetent hosts example.com# 输出示例: 93.184.216.34 example.com# 显示所有用户或组getent passwd # 列出所有用户getent group # 列出所有组# 检查服务端口getent services ssh2、权限
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)权限,实现对文件访问控制的管理。
Ⅰ、基本语法
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)。
符号模式(更直观,适合局部调整)
通过符号指定用户类别、操作和权限,格式:
chmod [用户类别][操作][权限] 文件/目录用户类别(u/g/o/a):
| 符号 | 含义 |
|---|---|
u | 所有者(User) |
g | 所属组(Group) |
o | 其他用户(Others) |
a | 所有用户(All,默认) |
操作(+/-/=):
| 符号 | 含义 |
|---|---|
+ | 添加权限 |
- | 移除权限 |
= | 覆盖设置权限(清除未指定权限) |
权限(r/w/x):
即读(r)、写(w)、执行(x)。
Ⅲ、示例
# 将 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-xrwxchmod u=r g=rx o=rwx file.txt ②、chown
chown(change owner)是 Linux/Unix 系统中用于修改文件/目录所有者(Owner)和所属组(Group)的命令。通过调整归属关系,可以控制哪些用户或组对文件拥有管理权限。
Ⅰ、基本语法
chown [选项] [所有者][:组] 文件/目录所有者:新的用户名(如 root、zhangsan)
组:新的组名(如 admin、dev),需在所有者后加 : 或 . 指定。
选项:
-R:递归修改目录及其子目录下所有文件的归属(慎用)。-v:显示修改详情(verbose)。--from=原所有者:原组:仅当文件当前归属匹配时才修改(安全操作)。
Ⅱ、示例
# 注意:普通用户无法修改他人文件的所有权,需用 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 下所有内容的归属
