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 权限

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/85418.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/85418.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/85418.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

S32DS上进行S32K328的时钟配置,LPUART时钟配置步骤详解

1:S32K328的基础信息 S32K328官网介绍 由下图可知,S32K328的最大主频为 240MHz 2:S32K328时钟树配置 2.1 system clock node 节点说明 根据《S32K3xx Reference Manual》资料说明 Table 143 各个 系统时钟节点 的最大频率如下所示&#…

wordpress小语种网站模板

wordpress朝鲜语模板 紫色风格的韩语wordpress主题,适合做韩国、朝鲜的外贸公司官方网站使用。 https://www.jianzhanpress.com/?p8486 wordpress日文模板 绿色的日语wordpress外贸主题,用来搭建日文外贸网站很实用。 https://www.jianzhanpress.co…

网络:Wireshark解析https协议,firefox

文章目录 问题浏览器访问的解决方法python requests问题 现在大部分的网站已经切到https,很多站点即使开了80的端口,最终还是会返回301消息,让客户端转向到https的一个地址。 所以在使用wireshark进行问题分析的时候,解析tls上层的功能,是必不可少的,但是这个安全交换的…

ollama部署开源大模型

1. 技术概述 Spring AI:Spring 官方推出的 AI 框架,简化大模型集成(如文本生成、问答系统),支持多种 LLM 提供商。Olama:开源的本地 LLM 推理引擎,支持量化模型部署,提供 REST API …

Kafka 可靠性保障:消息确认与事务机制(二)

Kafka 事务机制 1. 幂等性与事务的关系 在深入探讨 Kafka 的事务机制之前,先来了解一下幂等性的概念。幂等性,简单来说,就是对接口的多次调用所产生的结果和调用一次是一致的。在 Kafka 中,幂等性主要体现在生产者端&#xff0c…

使用 React.Children.map遍历或修改 children

使用场景: 需要对子组件进行统一处理(如添加 key、包裹额外元素、过滤特定类型等)。 动态修改 children 的 props 或结构。 示例代码:遍历并修改 children import React from react;// 一个组件,给每个子项添加边框…

智能体三阶:LLM→Function Call→MCP

哈喽,我是老刘 老刘是个客户端开发者,目前主要是用Flutter进行开发,从Flutter 1.0开始到现在已经6年多了。 那为啥最近我对MCP和AI这么感兴趣的呢? 一方面是因为作为一个在客户端领域实战多年的程序员,我觉得客户端开发…

flutter的常规特征

前言 Flutter 是由 Google 开发的开源 UI 软件开发工具包,用于构建跨平台的高性能、美观且一致的应用程序。 一、跨平台开发能力 1.多平台支持:Flutter 支持构建 iOS、Android、Web、Windows、macOS 和 Linux 应用,开发者可以使用一套代码库在…

【Git】代码托管服务

博主:👍不许代码码上红 欢迎:🐋点赞、收藏、关注、评论。 格言: 大鹏一日同风起,扶摇直上九万里。 文章目录 Git代码托管服务概述Git核心概念主流Git托管平台Git基础配置仓库创建方式Git文件状态管理常用…

Android 网络请求的选择逻辑(Connectivity Modules)

代码分析 ConnectivityManager packages/modules/Connectivity/framework/src/android/net/ConnectivityManager.java 许多APN已经弃用,应用层统一用 requestNetwork() 来请求网络。 [ConnectivityManager] example [ConnectivityManager] requestNetwork() [Connectivi…

C#建立与数据库连接(版本问题的解决方案)踩坑总结

1.如何优雅的建立数据库连接 今天使用这个deepseek写代码,主要就是建立数据库的链接,包括这个建库建表啥的都是他整得,我就是负责执行,然后解决这个里面遇到的一些问题; 其实我学习这个C#不过是短短的4天的时间&…

FastAPI的初步学习(Django用户过来的)

我一直以来是Django重度用户。它有清晰的MVC架构模式、多应用组织结构。它内置用户认证、数据库ORM、数据库迁移、管理后台、日志等功能,还有强大的社区支持。再搭配上Django REST framework (DRF) ,开发起来效率极高。主打功能强大、易于使用。 曾经也…

提升IT运维效率 贝锐向日葵推出自动化企业脚本功能

在企业进行远程IT运维管理的过程中,难免会涉及很多需要批量操作下发指令的场景,包括但不限于下列场景: ● ⼤规模设备部署与初始化、设备配置更新 ● 业务软件安装与系统维护,进行安全加固或执行问题修复命令 ● 远程设备监控与…

最简单的远程桌面连接方法是什么?系统自带内外网访问实现

在众多远程桌面连接方式中,使用 Windows 系统自带的远程桌面连接功能是较为简单的方法之一,无论是在局域网内还是通过公网进行远程连接,都能轻松实现。 一、局域网内连接步骤 1、 开启目标计算机远程桌面功能:在目标计算机&…

JVM(2)——垃圾回收算法

本文将穿透式解析JVM垃圾回收核心算法,涵盖7大基础算法4大现代GC实现3种内存分配策略,通过15张动态示意图GC日志实战分析,带您彻底掌握JVM内存自动管理机制。 一、GC核心概念体系 1.1 对象存亡判定法则 引用计数法致命缺陷: // …

基于Spring Boot+Vue的“暖寓”宿舍管理系统设计与实现(源码及文档)

基于Spring BootVue的“暖寓”宿舍管理系统设计与实现 第 1 章 绪论 1.1 论文研究主要内容 1.1.1 系统概述 1.1.2 系统介绍 1.2 国内外研究现状 第 2 章 关键技术介绍 2.1 关键性开发技术的介绍 2.1.1 Java简介 2.1.2 Spring Boot框架 2.2 其他相关技术 2.2.1 Vue.J…

基于Java的不固定长度字符集在指定宽度和自适应模型下图片绘制生成实战

目录 前言 一、需求介绍 1、指定宽度生成 2、指定列自适应生成 二、Java生成实现 1、公共方法 2、指定宽度生成 3、指定列自适应生成 三、总结 前言 在当今数字化与信息化飞速发展的时代,图像的生成与处理技术正日益成为众多领域关注的焦点。从创意设计到数…

软考 系统架构设计师系列知识点之杂项集萃(93)

接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(92) 第169题 人工智能技术已成为当前国际科技竞争的核心技术之一,AI芯片是占据人工智能市场的法宝。AI芯片有别于通常处理器芯片,它应具备四种关键特征。&…

Kotlin实现文件下载断点续传(RandomAccessFile全解析)

本文将深入探讨如何使用Kotlin和RandomAccessFile实现高效的断点续传功能,涵盖原理分析、完整代码实现、性能优化及工程实践要点。 一、断点续传核心原理 1.1 HTTP断点续传协议 #mermaid-svg-EfmgPUx3SFkso8Fc {font-family:"trebuchet ms",verdana,aria…

linux-headers-$(uname -r)和kmod是什么?

2025年6月16日,周一清晨 Linux-headers-$(uname -r)与kmod包详解 一、linux-headers-$(uname -r)包 linux-headers-(uname -r)是Linux系统中与当前运行内核版本匹配的内核头文件包,其中(uname -r)会自动替换为当前内核版本号(如5.13.0-19-g…