简说 Linux 用户组

发布于:2025-06-19 ⋅ 阅读:(11) ⋅ 点赞:(0)

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,就能对这个文件按组权限访问。


🔑 用户组管理常用命令

操作 命令示例
查看当前用户所属组 groupsid
查看系统所有组 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):获取当前用户名,自动填入

操作步骤:

  1. 在终端执行上面命令
  2. 退出当前用户(注销或重启),然后重新登录
  3. 执行 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" 设置设备属组为 dialout
  • MODE="0660" 设置权限为属主和属组可读写
  • 这样做后,加入 dialout 组的用户可以访问设备,无需额外 sudo 权限


网站公告

今日签到

点亮在社区的每一天
去签到