Linux 用户组 的核心概念、用途和管理方法,尽量简明易懂。
🌟 什么是 Linux 用户组?
在 Linux 系统中:
👉 用户组(group) 是一组用户的集合,用来方便地管理权限。
👉 用户组的主要作用是:将文件、目录或其他资源的访问权限赋予一组用户,而不是一个个单独赋权。
📝 用户与组的关系
- 每个用户都有一个 主组(Primary Group),创建文件时默认属于主组。
- 用户可以加入多个 附加组(Supplementary Group),以获得更多访问权限。
例如:
用户:alice
主组:developers
附加组:audio, video
当 alice 创建文件时,该文件的组所有者就是 developers,但 alice 同时有 audio 和 video 组的权限。
📁 组与文件权限
在文件或目录的权限里,你会看到像:
-rw-rw-r-- 1 alice developers 1234 Jun 18 file.txt
表示:
- 所有者是 alice
- 所属组是 developers
- 权限是:所有者 (rw),组 (rw),其他用户 ®
如果其他用户也属于 developers,就能对这个文件按组权限访问。
🔑 用户组管理常用命令
操作 | 命令示例 |
---|---|
查看当前用户所属组 | groups 或 id |
查看系统所有组 | cat /etc/group |
新建组 | sudo groupadd mygroup |
删除组 | sudo groupdel mygroup |
新建用户并指定主组 | sudo useradd -g mygroup username |
将用户加入附加组 | sudo usermod -aG mygroup username |
修改用户主组 | sudo usermod -g mygroup username |
从组移除用户(手工编辑) | 编辑 /etc/group 或用工具(如 gpasswd ) |
🏷 /etc/group 文件格式
组信息存储在:
/etc/group
格式:
group_name : x : GID : user_list
例如:
developers:x:1001:alice,bob
表示:
- 组名:developers
- GID:1001
- 成员:alice, bob
🌟 实际应用场景
✅ 开发组:多个程序员共享项目文件权限
✅ 多媒体组:给特定用户音视频设备访问权限
✅ 安全隔离:将不同职责的用户分组,严格限制权限
✅ 共享目录:部门或团队共享读写文件夹(配合 ACL 或 sticky bit)
⚡ 常用小技巧
👉 切换组临时访问:
newgrp groupname
👉 查看文件权限和组:
ls -l
👉 改变文件组:
chgrp groupname file
👉 改变文件属主+组:
chown user:group file
🌈 总结
💡 用户组 = 权限管理的好帮手
💡 善用组可以高效、安全地控制资源访问
💡 组 + 权限 + ACL(访问控制列表)= 强大安全体系
🌟 设备文件 示例
crw-rw-rw- 1 root dialout 188, 0 Jun 18 17:49 /dev/ttyUSB0
🚀 各部分含义
字段 | 含义 |
---|---|
c | 文件类型,c 表示字符设备(character device) |
rw-rw-rw- | 权限(所有者读写、组读写、其他用户读写) |
1 | 硬链接数(对设备文件一般是 1) |
root | 文件属主(owner),这里是 root 用户 |
dialout | 文件属组(group),这里是 dialout 组 |
188, 0 | 主设备号、次设备号(device number),用来标识驱动程序 |
Jun 18 17:49 | 设备文件的最后修改时间 |
/dev/ttyUSB0 | 设备文件路径(USB 转串口设备) |
🔑 权限部分详解
crw-rw-rw-
c
:字符设备(和b
块设备不同)rw-
(属主:root):root 有读写权限rw-
(属组:dialout):dialout 组成员有读写权限rw-
(其他用户):其他所有用户也有读写权限
⚠️ 注意:rw-rw-rw-
表示这个设备文件对所有人都是可读写的,这通常不太安全。很多系统会限制普通用户对串口设备的访问(不开放给 “其他用户” 的写权限)。
🎯 dialout
组的作用
dialout
是 Linux 系统中负责串口设备(比如 /dev/ttyS0、/dev/ttyUSB0 等)的组。
👉 加入 dialout 组,用户就可以不需要 sudo 就访问串口设备。
例如:
sudo usermod -aG dialout yourname
执行后重新登录,你就能直接操作串口设备了。
💡 总结
crw-rw-rw- 1 root dialout 188, 0 Jun 18 17:49 /dev/ttyUSB0
表示:
- 这是个 USB 转串口的字符设备文件
- 属主是 root
- 属组是 dialout
- 所有人都可以读写(可能是手动修改过权限)
1. 查看当前用户是否在 dialout
组
打开终端,输入:
groups
这条命令会列出你当前登录用户所属的所有组。
如果看到 dialout
在列表里,说明你有权限访问串口设备。
举例:
$ groups
user1 adm dialout cdrom sudo
这里 dialout
就表示用户属于该组。
2. 修改 /dev/ttyUSB0
的权限或所属组
2.1 修改权限 — 用 chmod
比如想给所有用户读写权限(不建议常用,安全性差):
sudo chmod 666 /dev/ttyUSB0
这会让权限变成:
crw-rw-rw-
或者只给属主和属组读写权限(更安全):
sudo chmod 660 /dev/ttyUSB0
权限变成:
crw-rw----
2.2 修改属组 — 用 chgrp
一般将设备文件的组改成 dialout
,让 dialout
组的成员可以访问:
sudo chgrp dialout /dev/ttyUSB0
2.3 修改属主 — 用 chown
一般设备文件属主是 root
,一般不建议改,但如果需要改成其他用户:
sudo chown username /dev/ttyUSB0
⚠️ 注意
/dev/ttyUSB0
是设备文件,系统重启后可能会恢复默认权限和属主属组,常用做法是通过udev
规则实现自动管理。- 最推荐的方式是把你的用户添加进
dialout
组,这样可以安全访问设备,不需要频繁改权限。
总结
需求 | 命令示例 |
---|---|
查看当前用户组 | groups |
给设备文件增加所有用户权限 | sudo chmod 666 /dev/ttyUSB0 |
给设备文件增加属主属组权限 | sudo chmod 660 /dev/ttyUSB0 |
修改设备文件所属组 | sudo chgrp dialout /dev/ttyUSB0 |
修改设备文件属主 | sudo chown username /dev/ttyUSB0 |
当然,给你一条命令,把当前登录用户加到 dialout 组:
sudo usermod -aG dialout $(whoami)
说明:
usermod
:修改用户-aG dialout
:表示“追加”(append)用户到dialout
组(-G
是指定附加组)$(whoami)
:获取当前用户名,自动填入
操作步骤:
- 在终端执行上面命令
- 退出当前用户(注销或重启),然后重新登录
- 执行
groups
查看是否有dialout
组
这样就可以不需要 sudo 权限,直接访问 /dev/ttyUSB0
等串口设备了。
或者添加自动设置 /dev/ttyUSB0
设备权限的 udev
规则示例:
1. 创建 udev 规则文件
用 root 权限新建规则文件,比如 /etc/udev/rules.d/99-usb-serial.rules
sudo nano /etc/udev/rules.d/99-usb-serial.rules
2. 在文件中写入规则内容:
# 设置 /dev/ttyUSB* 设备的属组为 dialout,权限为 660(属主和组可读写)
KERNEL=="ttyUSB[0-9]*", GROUP="dialout", MODE="0660"
3. 保存并退出编辑器
4. 重新加载 udev 规则并触发规则
sudo udevadm control --reload-rules
sudo udevadm trigger
5. 验证设备权限
拔插 USB 串口设备,或者重新连接,执行:
ls -l /dev/ttyUSB0
应该看到:
crw-rw---- 1 root dialout ...
说明:
KERNEL=="ttyUSB[0-9]*"
匹配所有 ttyUSB 设备GROUP="dialout"
设置设备属组为 dialoutMODE="0660"
设置权限为属主和属组可读写- 这样做后,加入
dialout
组的用户可以访问设备,无需额外 sudo 权限