【Linux从入门到精通】第8篇:用户与权限管理(上)——谁动了我的文件?

一、引言:为什么服务器上的文件我不能改?

还记得第7篇我们用Vim编辑文件时的场景吗?有时候保存文件会提示:

text

复制代码
E45: 'readonly' option is set (add ! to override)

或者更直接:

text

复制代码
Permission denied

这不是Vim的问题,而是Linux的安全机制在起作用。你在Windows上用惯了管理员账户,可能从未遇到过"权限不足"的情况。但在Linux服务器上,不是所有用户都有权修改所有文件------这是一个多用户系统的设计基石。

想象一下:如果公司的服务器上,实习生也能修改CEO的工资单文件,或者删除系统核心配置文件,那会是什么灾难场景?

Linux的权限体系就是为防止这种情况而设计的。今天我们先解决最核心的问题:你是谁?你能动哪些文件?


二、root用户:系统的"神"

2.1 root是什么?

root是Linux系统中的超级用户 ,它的UID(用户ID)固定为0。拥有root权限意味着没有任何限制------可以读写任何文件、杀死任何进程、修改系统配置、甚至删除整个操作系统。

一个直观的理解:普通用户是租客,只能在自己房间里活动;root是房东,拥有整栋楼所有房间的钥匙,包括配电房和水阀。

2.2 root的双面性:必需的权力,巨大的风险

为什么需要root?

  • 安装和卸载系统级软件

  • 修改系统配置文件(如网络、防火墙)

  • 管理其他用户账户

  • 访问受保护的系统日志

为什么不能滥用root?

  • 误操作无法挽回rm -rf / 这条命令,普通用户执行会因为权限不足而失败;root执行则会让整个系统灰飞烟灭

  • 安全风险极高:如果黑客获取了root密码,整个系统就彻底沦陷了

  • 难以追溯:多人共用root账户时,谁做了什么操作无从查证

生产环境的铁律

永远不要以root身份登录做日常工作。 使用普通账户,需要时临时提权。

2.3 如何成为root?

方法一:直接登录root

bash

复制代码
su - root   # 切换到root用户,需要输入root密码

方法二:使用sudo(推荐)

bash

复制代码
sudo 命令    # 以root权限执行单条命令

两种方式的区别,我们在第四节详细展开。


三、普通用户的创建与管理

既然不能用root日常操作,那就需要创建普通用户。

3.1 useradd:创建用户

useradd是创建新用户的标准命令。基本语法:

bash

复制代码
sudo useradd [选项] 用户名

最常用的选项组合

bash

复制代码
sudo useradd -m -s /bin/bash zhangsan
  • -m:自动创建用户的家目录(/home/zhangsan)

  • -s /bin/bash:指定用户的默认Shell为bash

如果不加-m,用户虽然会被创建,但没有自己的家目录------这会导致登录后各种奇怪的问题。

3.2 passwd:设置密码

新创建的用户默认是没有密码的,处于锁定状态,无法登录。

bash

复制代码
sudo passwd zhangsan

执行后会提示输入两次密码。注意:输入密码时屏幕不会有任何显示(连星号都没有),这是Linux的安全设计,正常输入后回车即可。

3.3 用户信息存储在哪里?

Linux的用户信息分散在几个关键文件中:

文件 存储内容 敏感性
/etc/passwd 用户名、UID、家目录、Shell 所有用户可读
/etc/shadow 加密后的密码哈希 只有root可读
/etc/group 组信息 所有用户可读

可以用以下命令查看新建用户的信息:

bash

复制代码
grep zhangsan /etc/passwd
id zhangsan          # 更直观地查看用户的UID和所属组

3.4 su:切换用户

su(Switch User)用于在终端中切换用户身份:

bash

复制代码
su - zhangsan        # 切换到zhangsan,同时加载该用户的环境变量
su zhangsan          # 只切换身份,不加载环境(不推荐)

su -su的关键区别

对比项 su zhangsan su - zhangsan
当前目录 保持在原位置 切换到用户家目录
环境变量 保留原用户的 完整加载新用户的
推荐程度 ❌ 不推荐 ✅ 推荐

一个简单的记忆:切换用户时,始终加上短横线


四、sudo:把root权限"借"给普通用户

4.1 sudo的工作原理

sudo的全称是"SuperUser Do",它允许普通用户临时以root身份执行特定命令,而不需要知道root密码。

执行sudo 命令时:

  1. 系统检查当前用户是否在sudo授权列表中

  2. 如果在,提示用户输入自己的密码(不是root密码)

  3. 验证通过后,以root权限执行命令

  4. 执行完毕后,权限自动收回

4.2 给用户授予sudo权限

sudo权限通过/etc/sudoers文件控制。千万不要直接编辑这个文件 ,必须使用visudo命令:

bash

复制代码
sudo visudo

visudo会在保存前检查语法错误,防止配置错误导致所有用户都无法使用sudo。

添加授权的格式

text

复制代码
用户名    ALL=(ALL)   命令路径

最常见的配置是允许用户执行所有命令:

text

复制代码
zhangsan    ALL=(ALL)   ALL

更安全的做法是只授权特定命令

text

复制代码
zhangsan    ALL=(ALL)   /bin/systemctl restart nginx

4.3 sudo的日常使用

bash

复制代码
sudo ls /root           # 以root权限查看/root目录
sudo systemctl restart nginx   # 以root权限重启nginx服务
sudo -l                 # 查看当前用户有哪些sudo权限
sudo -v                 # 刷新sudo时间戳(延长免密时间)

4.4 su与sudo的选择策略

场景 推荐方式 理由
执行单条特权命令 sudo 命令 最小权限原则
需要连续执行多条特权命令 sudo -isudo su - 避免反复输入sudo
切换到其他普通用户 su - 用户名 这是su的本职工作

五、rwx权限体系:文件世界的通行证

理解了"你是谁"之后,我们来看"你能动什么"。

5.1 权限的三位一体结构

在Linux中,每个文件和目录都有三组权限,分别对应三类身份:

text

复制代码
-rwxr-xr--  1 zhangsan developers  1024 Apr 20 10:30 script.sh
 ┬ ┬ ┬
 │ │ └─── 其他用户权限(其他人能不能动)
 │ └───── 所属组权限(同组的人能不能动)
 └─────── 所有者权限(文件主人能不能动)

5.2 rwx的含义:文件和目录完全不同

这是初学者最容易混淆的地方。r、w、x对文件和目录的意义截然不同

对文件而言

权限 字母 含义 能做什么
r 查看文件内容 catlesshead
w 修改文件内容 vimecho >>
执行 x 作为程序运行 ./script.sh

对目录而言

权限 字母 含义 能做什么
r 列出目录内容 ls
w 在目录中增删文件 touchrmmv
执行 x 进入目录 cd

5.3 三个关键认知

认知一:目录的w权限是"核武器"

对目录拥有写权限,意味着你可以删除目录下的任何文件无论这些文件本身属于谁、权限如何

举例说明:

bash

复制代码
# /shared 目录权限为 drwxrwxrwx(所有人可写)
# 该目录下有个root所有的文件 secret.txt,权限为 -rw-------(只有root可读写)

# zhangsan 虽然不能读取 secret.txt 的内容,但可以删除它!
rm /shared/secret.txt   # 成功!因为zhangsan对/shared有w权限

这就是为什么共享目录的权限要格外小心。

认知二:目录的r和x必须配合使用

bash

复制代码
# 只有读权限(r--):能ls看到文件名,但无法cd进入
dr--r--r--  2 root root  4096 Apr 20 10:30 dir_r_only/
# 用户执行 ls dir_r_only/ 可以看到文件名列表
# 用户执行 cd dir_r_only/ 会失败(Permission denied)

# 只有执行权限(--x):能cd进入,但无法ls看到内容
d--x--x--x  2 root root  4096 Apr 20 10:30 dir_x_only/
# 用户执行 cd dir_x_only/ 成功
# 用户执行 ls 会失败(Permission denied)

实用的权限组合

  • r-x:可以进入并查看目录内容,但不能创建/删除文件(只读访问)

  • rwx:完整权限

  • --x:可以进入但不能列出(用于"盲目录",知道确切路径才能访问)

认知三:文件执行需要x权限,但光有x还不够

一个文件要能被"执行",需要同时满足:

  1. 拥有x权限

  2. 是有效的可执行文件格式(二进制程序或带Shebang的脚本)

只有x权限但内容是乱码,执行也会报错。


六、本篇核心速查表

用户管理命令

命令 功能
sudo useradd -m -s /bin/bash 用户名 创建用户(带家目录)
sudo passwd 用户名 设置/修改密码
su - 用户名 切换用户(加载环境)
id 用户名 查看用户信息

权限速查

类型 r(读) w(写) x(执行)
文件 查看内容 修改内容 作为程序运行
目录 列出文件(ls) 增删文件(touch/rm) 进入目录(cd)

权限的数字表示

数字 权限组合 含义
4 r-- 只读
5 r-x 读+执行
6 rw- 读+写
7 rwx 全部权限

七、动手练习

bash

复制代码
# 1. 创建一个新用户(需要sudo权限)
sudo useradd -m -s /bin/bash testuser

# 2. 为新用户设置密码
sudo passwd testuser

# 3. 切换到新用户
su - testuser

# 4. 验证当前身份
whoami
pwd   # 应该显示 /home/testuser

# 5. 尝试访问/root目录(应该失败)
ls /root

# 6. 退出,回到原用户
exit

# 7. (如果原用户有sudo权限)给testuser添加sudo权限
sudo visudo
# 添加一行:testuser ALL=(ALL) ALL

# 8. 清理:删除测试用户
sudo userdel -r testuser   # -r 同时删除家目录

八、本篇小结

今天的内容是Linux安全体系的基石,三个核心要点:

  1. root是神,但不要住在神殿里------日常使用普通账户,必要时用sudo提权

  2. su和sudo各司其职------su用于切换用户,sudo用于临时提权

  3. rwx对文件和目录的含义不同------文件的x是执行,目录的x是进入;目录的w权限尤其危险

本篇我们主要讲解了权限的基本概念,但还有两个重要问题没有展开:

  • 如何用chmod修改权限?(数字法和符号法)

  • 如何用chown改变文件所有者?

这些内容,我们将在下一篇继续深入。


九、下篇预告

下一篇我们将继续权限管理的下半部分------用户与权限管理(下) 。你将学到chmod的数字计算逻辑(4读2写1执行怎么算)、chown改变文件所属主和组、以及SUID、SGID、粘滞位这三个特殊权限的作用。特别是粘滞位------它解释了为什么/tmp目录所有人都能写文件,但只能删自己的文件。


延伸思考 :执行ls -l /,观察各目录的权限。你会发现/tmp的权限是drwxrwxrwt,最后一位是t而不是x。这个t就是粘滞位(Sticky Bit),它有什么特殊作用?下一篇揭晓答案。

相关推荐
艾莉丝努力练剑2 小时前
【Linux线程】Linux系统多线程(九):线程池实现(附代码示例)
linux·运维·服务器·c++·学习·架构
晨晖22 小时前
linux笔记6
linux·运维·笔记
bukeyiwanshui2 小时前
20260420 Nginx 服务器
运维·服务器·nginx
xingyuzhisuan2 小时前
警惕“套牌”4090:如何辨别服务器用的是不是真卡?
运维·服务器·gpu算力
艾莉丝努力练剑2 小时前
【Linux线程】Linux系统多线程(八):<策略模式>日志系统的封装实现
linux·运维·服务器·c++·学习·策略模式
HalvmånEver2 小时前
MySQL数据库操作
linux·数据库·学习·mysql
深圳元器猫2 小时前
AI服务器功率电感解决方案_4.7μH电感应对GPU高负载挑战
服务器·dc-dc·新能源汽车·元器猫·功率电感
2301_780789662 小时前
游戏盾是如何防护各个重要的游戏端口呢
服务器·网络·人工智能·游戏·架构·零信任
何中应2 小时前
清理服务器磁盘空间的方法
linux·运维·服务器