👥 用户与权限
大家好,我是长安!用户与权限是 Linux 的核心概念之一,理解了它你才能真正掌握 Linux。
🎯 本章目标
跟着长安读完这一章,你将了解:
- Linux 的用户和用户组概念
- 文件权限的含义和修改方法
- sudo 的使用
- 如何管理用户账户
🧑 用户与用户组
概念理解
Linux 是一个多用户系统,就像一个公司:
| 概念 | 类比 | 说明 |
|---|---|---|
| 用户(User) | 员工 | 每个人都有自己的账号 |
| 用户组(Group) | 部门 | 把用户分组管理 |
| root | 老板/CEO | 拥有最高权限 |
查看用户信息
# 查看当前登录用户
whoami
# 输出:xiaoming
# 查看用户详细信息
id
# 输出:uid=1000(xiaoming) gid=1000(xiaoming) groups=1000(xiaoming),27(sudo)
# 查看所有用户
cat /etc/passwd
# 查看所有用户组
cat /etc/group
/etc/passwd 文件解析
# 格式:用户名:密码:UID:GID:描述:主目录:Shell
xiaoming:x:1000:1000:Xiao Ming,,,:/home/xiaoming:/bin/bash
│ │ │ │ │ │ │
│ │ │ │ │ │ └── 登录后使用的 Shell
│ │ │ │ │ └── 用户主目录
│ │ │ │ └── 用户描述信息
│ │ │ └── 用户组 ID
│ │ └── 用户 ID
│ └── 密码(x 表示加密存储在 /etc/shadow)
└── 用户名
💡 特殊用户
- root:UID = 0,超级管理员
- 系统用户:UID 1-999,运行系统服务
- 普通用户:UID >= 1000,普通人
🔐 文件权限
权限的三个维度
Linux 文件权限分为三类人:
| 符号 | 英文 | 含义 |
|---|---|---|
u | User | 文件所有者(Owner) |
g | Group | 所属组的成员 |
o | Others | 其他所有人 |
a | All | 所有人(u+g+o) |
三种权限类型
| 符号 | 数字 | 含义 | 对文件 | 对目录 |
|---|---|---|---|---|
r | 4 | 读取(Read) | 查看内容 | 列出目录内容 |
w | 2 | 写入(Write) | 修改内容 | 创建/删除文件 |
x | 1 | 执行(eXecute) | 运行程序 | 进入目录 |
- | 0 | 无权限 | - | - |
查看权限
ls -l file.txt
# -rw-r--r-- 1 xiaoming xiaoming 1024 Jan 1 10:00 file.txt
解析:
-rw-r--r--
│├─┤├─┤├─┤
│ │ │ │
│ │ │ └── 其他人权限:r-- (只读)
│ │ └── 组权限:r-- (只读)
│ └── 所有者权限:rw- (读写)
└── 文件类型:- (普通文件)
权限的数字表示
把 r、w、x 转换成数字,相加得到权限值:
r = 4, w = 2, x = 1
rwx = 4 + 2 + 1 = 7 (读写执行)
rw- = 4 + 2 + 0 = 6 (读写)
r-x = 4 + 0 + 1 = 5 (读执行)
r-- = 4 + 0 + 0 = 4 (只读)
常见权限组合:
| 数字 | 符号 | 含义 |
|---|---|---|
755 | rwxr-xr-x | 所有者可读写执行,其他人可读执行 |
644 | rw-r--r-- | 所有者可读写,其他人只读 |
777 | rwxrwxrwx | 所有人可读写执行(危险!) |
700 | rwx------ | 只有所有者可访问 |
600 | rw------- | 只有所有者可读写 |
chmod - 修改权限
数字方式(推荐):
# 设置权限为 755
chmod 755 script.sh
# 设置权限为 644
chmod 644 file.txt
# 递归修改目录及其内容
chmod -R 755 mydir/
符号方式:
# 给所有者添加执行权限
chmod u+x script.sh
# 给所有人添加读权限
chmod a+r file.txt
# 移除组的写权限
chmod g-w file.txt
# 设置具体权限
chmod u=rwx,g=rx,o=r file.txt
💡 常见场景
# 让脚本可执行
chmod +x script.sh
chmod 755 script.sh
# 保护私密文件
chmod 600 secret.txt
# 共享目录让组成员可写
chmod 775 shared_dir/
chown - 修改所有者
# 修改文件所有者
sudo chown newowner file.txt
# 修改所有者和组
sudo chown newowner:newgroup file.txt
# 只修改组
sudo chown :newgroup file.txt
# 递归修改
sudo chown -R newowner:newgroup mydir/
chgrp - 修改所属组
# 修改文件所属组
sudo chgrp newgroup file.txt
# 递归修改
sudo chgrp -R newgroup mydir/
🦸 sudo - 临时获取超级权限
sudo 让普通用户临时获得 root 权限。
# 以 root 身份运行命令
sudo apt update
# 切换到 root 用户
sudo su
# 以 root 身份编辑文件
sudo nano /etc/hosts
# 查看 sudo 权限
sudo -l
⚠️ sudo 注意事项
- 第一次使用需要输入你自己的密码(不是 root 密码)
- 密码有缓存时间(通常 15 分钟),之后要重新输入
- 不要养成所有命令都加 sudo 的习惯
- 能不用 sudo 就不用
添加用户到 sudo 组
# 把用户添加到 sudo 组
sudo usermod -aG sudo username
👤 用户管理
创建用户
# 创建用户(简单方式)
sudo useradd username
# 创建用户(推荐方式,自动创建主目录)
sudo useradd -m username
# 创建用户并指定 Shell
sudo useradd -m -s /bin/bash username
# 交互式创建用户(Ubuntu 推荐)
sudo adduser username
设置/修改密码
# 修改自己的密码
passwd
# 修改其他用户的密码(需要 root)
sudo passwd username
删除用户
# 删除用户(保留主目录)
sudo userdel username
# 删除用户及其主目录
sudo userdel -r username
修改用户信息
# 修改用户名
sudo usermod -l newname oldname
# 修改主目录
sudo usermod -d /new/home username
# 添加用户到组
sudo usermod -aG groupname username
# 修改用户 Shell
sudo usermod -s /bin/zsh username
用户组管理
# 创建组
sudo groupadd groupname
# 删除组
sudo groupdel groupname
# 把用户添加到组
sudo usermod -aG groupname username
# 从组中移除用户
sudo gpasswd -d username groupname
# 查看用户所属的组
groups username
🎭 特殊权限
SUID、SGID、Sticky Bit
除了基本的 rwx,还有三种特殊权限:
| 权限 | 数字 | 符号 | 作用 |
|---|---|---|---|
| SUID | 4 | s(在 u 位置) | 执行时获得文件所有者权限 |
| SGID | 2 | s(在 g 位置) | 执行时获得文件所属组权限 |
| Sticky | 1 | t(在 o 位置) | 只有所有者能删除目录中的文件 |
# 查看 /tmp 目录权限(有 Sticky Bit)
ls -ld /tmp
# drwxrwxrwt ... /tmp
# ^
# t = Sticky Bit
# 设置 SUID
chmod u+s file
chmod 4755 file
# 设置 SGID
chmod g+s file
chmod 2755 file
# 设置 Sticky Bit
chmod +t directory
chmod 1777 directory
🤔 为什么 /tmp 有 Sticky Bit?
/tmp 目录是所有人都可以写的,但有了 Sticky Bit,用户只能删除自己创建的文件,不能删除别人的。这就避免了"互删"的混乱情况。
🔒 实用安全技巧
1. 保护敏感文件
# SSH 私钥
chmod 600 ~/.ssh/id_rsa
# SSH 目录
chmod 700 ~/.ssh
# 配置文件
chmod 600 ~/.config/secret.conf
2. 查找权限过大的文件
# 查找可被所有人写入的文件(危险)
find / -type f -perm -o=w 2>/dev/null
# 查找具有 SUID 的文件
find / -type f -perm -u=s 2>/dev/null
3. 修复常见权限问题
# 修复用户主目录权限
chmod 755 /home/username
chmod 700 /home/username/.ssh
# 修复网站目录权限
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
📝 本章小结
权限速查表
| 操作 | 命令 | 示例 |
|---|---|---|
| 查看权限 | ls -l | ls -l file.txt |
| 修改权限 | chmod | chmod 755 file.sh |
| 修改所有者 | chown | sudo chown user file |
| 修改所属组 | chgrp | sudo chgrp group file |
常用权限组合
| 权限 | 用途 |
|---|---|
755 | 可执行文件、目录 |
644 | 普通文件 |
600 | 私密文件 |
700 | 私密目录 |
777 | 所有人可读写执行(通常不推荐) |
🔥 核心原则
最小权限原则:只给必要的权限,不多给!
- 不要动不动就
chmod 777 - 能不用
sudo就不用 - 敏感文件权限设为
600或700
🚀 下一步
用户权限搞定了,接下来跟着长安学习传说中的 Vim 编辑器!准备好了吗?
—— 编程指南社区 · 长安
