Linux:这啥命令?这台服务器我说了算-用户、用户组与 sudo——“凭什么它能改,我不能?”
《Linux:从“这啥命令?”到“这台服务器我说了算”》
第三章:用户、用户组与 sudo——“凭什么它能改,我不能?”
上一章我们已经会创建、复制、移动、删除文件,也认识了基础权限。
但你很快会遇到一个经典场面:
Permission denied
你心想:“这文件就在我面前,凭什么不让我改?”
Linux 的回答很简单:因为你是谁,很重要。
这一章,我们就把“你是谁、你属于谁、你能干什么”一次讲清楚。
1. 先确认身份:我是谁?
查看当前用户:
whoami
再看更完整的身份信息:
id
输出可能类似:
uid=1000/alice gid=1000/alice groups=1000/alice,27/sudo
这里主要看三件事:
uid 用户 ID
gid 主用户组 ID
groups 当前用户属于哪些组
Linux 内部真正认的是 UID、GID,用户名更多是给人看的“昵称”。
2. root:服务器里的“终极管理员”
Linux 中权限最高的用户叫:
root
它的 UID 通常是:
0
root 基本可以修改系统里的任何东西。
听起来很爽,但也意味着:普通用户删错一个文件,可能只是项目坏了;root 删错一个文件,系统可能直接下班。
所以日常操作通常不用 root 登录,而是需要管理员权限时临时使用 sudo。
3. sudo:借我一分钟管理员权限
例如更新软件包:
sudo apt update
系统可能要求输入当前用户密码。
sudo 可以理解为:
“这条命令,请暂时用更高权限执行。”
查看自己是否能使用 sudo:
sudo -l
注意:不要遇到权限问题就条件反射:
sudo ...
先想清楚为什么没权限。否则 sudo 很容易从“解决问题”升级成“制造更大的问题”。
4. 用户都记录在哪?
Linux 的用户信息主要记录在:
/etc/passwd
可以看看:
cat /etc/passwd
其中一行可能长这样:
alice:x:1000:1000:Alice:/home/alice:/bin/bash
字段用 : 分隔,大致表示:
用户名:密码占位:UID:GID:描述:家目录:登录 Shell
真正的密码哈希通常不放在这里,而是在:
/etc/shadow
普通用户通常没有权限直接查看它。
这是正常的。密码文件要是人人可读,那安全性就只剩气氛了。
5. 创建一个新用户
在 Ubuntu / Debian 系发行版里,可以用:
sudo adduser bob
系统会引导你设置密码和一些信息。
创建完成后检查:
id bob
切换到这个用户:
su - bob
回到原用户:
exit
su - bob 中的 - 很重要,它会一起切换到 bob 的登录环境和家目录。
6. 用户组:权限别一个人一个人发
如果服务器有 20 个开发人员,而某个目录需要让大家共同访问,一个个改权限会很痛苦。
这时就可以使用用户组。
创建一个组:
sudo groupadd developers
把 bob 加进去:
sudo usermod -aG developers bob
这里最值得记住的是:
-a append,追加
-G 附加用户组
尤其别随便漏掉 -a。否则某些情况下,你不是“再加一个组”,而是在给用户的附加组名单来一次大换血。
查看 bob 属于哪些组:
groups bob
7. 文件到底归谁?
创建一个测试文件:
touch demo.txt
ls -l demo.txt
可能看到:
-rw-r--r-- 1 alice alice 0 Oct 29 10:00 demo.txt
中间这两个 alice 分别代表:
文件所有者
文件所属组
修改所有者:
sudo chown bob demo.txt
同时修改所有者和所属组:
sudo chown bob:developers demo.txt
只修改所属组:
sudo chgrp developers demo.txt
然后再次检查:
ls -l demo.txt
8. chmod 和 chown 别搞混
这两个命令非常容易混:
chmod 改“能做什么”
chown 改“这个东西是谁的”
例如:
chmod 640 demo.txt
表示:
所有者 rw- 可读可写
所属组 r-- 只读
其他人 --- 无权限
而:
sudo chown bob:developers demo.txt
修改的是文件主人和所属组。
一句话记忆:
chmod管权限,chown管归属。
9. 一个非常常见的坑:sudo 创建的文件
假设你执行:
sudo touch config.ini
再看:
ls -l config.ini
你可能会发现文件属于:
root root
然后普通用户再编辑:
nano config.ini
结果:
Permission denied
这不是 Linux 针对你,而是你刚才亲手把文件送给了 root。
如果这个文件本来就应该属于当前用户,可以修正:
sudo chown $USER:$USER config.ini
所以,不要没事就在命令前加 sudo。
10. 删除用户,也要想清楚
删除用户:
sudo deluser bob
如果还想删除它的家目录:
sudo deluser --remove-home bob
执行前先确认里面有没有重要数据。
“删账号”和“删账号 + 删家”不是一个力度,后者属于搬家时顺便把房子拆了。
11. 本章实战:搭一个开发共享目录
目标:创建 developers 组,让组成员可以共同使用 /srv/project。
sudo groupadd developers
sudo usermod -aG developers $USER
sudo mkdir -p /srv/project
sudo chown $USER:developers /srv/project
sudo chmod 770 /srv/project
检查:
ls -ld /srv/project
你应该重点观察:
所有者
所属组
权限
如果刚把自己加入新用户组,当前终端可能还没刷新组信息。最简单的方式是退出当前会话后重新登录,再执行:
groups
12. 本章命令速查
| 命令 | 用途 |
|---|---|
whoami |
查看当前用户 |
id |
查看 UID、GID、用户组 |
groups |
查看用户所属组 |
sudo |
临时以高权限执行命令 |
sudo -l |
查看 sudo 权限 |
adduser |
创建用户 |
deluser |
删除用户 |
groupadd |
创建用户组 |
usermod -aG |
把用户加入附加组 |
chown |
修改文件所有者 |
chgrp |
修改文件所属组 |
chmod |
修改权限 |
su - 用户名 |
切换用户 |
13. 这一章你应该带走什么?
看到:
Permission denied
以后先别急着 sudo。
按这个顺序排查:
1. 我现在是谁? → whoami / id
2. 文件是谁的? → ls -l
3. 我属于哪个组? → groups
4. 权限允许我操作吗? → rwx
5. 真需要管理员权限吗?→ sudo
当你开始先分析权限,再决定是否提权,你就已经从“命令试试看”进化到了“知道自己在改什么”。
下一章我们继续往服务器真正的日常迈一步:
第四章:软件安装与包管理——“装个软件而已,怎么还有这么多姿势?”
- 点赞
- 收藏
- 关注作者
评论(0)