
用了好几年麒麟桌面系统从V10早期版本一路用到现在V10-SP1 2503日常给同事处理得最多的除了软件装不上就是各种权限说人话。报个“权限不足”查来查去十有八九是用户没进对用户组。这篇文章就把麒麟桌面系统V10-SP1 2503里常见的用户组一次性讲清楚顺带把我踩过的坑和能直接抄的排查命令都放出来。刚接触麒麟系统的运维、开发还有自己折腾桌面机的用户都能从这里找到适合自己的用法。1. 先搞清楚用户组在麒麟系统里到底管什么很多入门用户对用户组的理解就一句话“一个组的成员共享某些权限”这个理解方向对但在严谨配置时不够用。用户组本质上是系统对多个用户进行分类授权的基础单元。把用户加入某个组相当于给这个用户发了一张对应权限集合的门禁卡。比如你在cdrom组就能使用光驱设备节点你在sudo组就能通过sudo命令临时提升执行权限。麒麟V10-SP1 2503虽然是面向桌面场景的发行版但它延续的是Linux多年沉淀的标准用户组模型这一点和上游社区版基本保持一致。所以网上关于Debian系或Ubuntu的用户组资料在麒麟上大部分都适用。真正需要留意的是版本差异——有的版本默认sudo组有的版本预配置了wheel组麒麟的桌面发行版还额外加入了一些与应用场景绑定的组比如外设访问、打印管理、日志读取等。判断一个组在系统里到底有没有实际作用最权威的依据是/etc/group、/etc/gshadow这两个文件而不是文档上怎么写。有人会问那我直接用root不就行了吗这恰恰是用户组管理最想避免的局面。root拥有系统全部权限误操作、被木马利用、面对恶意输入时连“撤销”的机会都没有。桌面系统日常跑着浏览器、办公软件、即时通讯工具安全面比纯服务器更杂合理分配用户组成员资格比一股脑给所有人root权限要稳妥得多。2. 常见用户组逐个拆解别以为只有root和sudo2.1 系统核心管理组root组永远排在最前面。它的组ID是0组成员拥有系统完全控制权。你打开终端执行sudo -i切换到root本质上并没有换组因为sudo的规则允许该用户获得临时root能力。真正把某个普通账户直接加入root组是一种很强的授权日常运维中应该避免。bin组和daemon组在很多新安装的麒麟系统里已经很少直接使用了它们属于历史遗留的权限分组分别管理系统二进制文件执行与某些后台进程的公共目录访问。平时用不到不奇怪但如果你的环境里跑着务负载和很老的自编译软件这些组的属主可能落在某个特定目录下修改组成员时需要额外小心。sys组涉及设备节点管理一般桌面用户几乎不需要关注。adm组值得多说两句它允许成员读取/var/log目录下的日志文件。排查开机问题、软件崩溃、系统服务异常时普通用户想看日志没权限把自己加到adm组就能临时解决。注意这只是提升日志审计能力并没有赋予修改服务的能力比较适合桌面用户和信息管理员角色。2.2 硬件与外设访问组这类组和桌面系统日常结合最紧也是我处理工单时最常碰到的一类组问题。cdrom组控制光驱和挂载光盘相关设备节点的访问权限。虽然现在用光盘的人不多了但很多政企环境还用光盘安装驱动、发放资料偶尔也要刻录。如果用户插了外置光驱却看不到设备或者软件提示无权限访问/media下的挂载点第一反应就是检查他是否在cdrom组里。lp与lpadmin组对应打印服务。lp组允许成员使用本地打印机执行打印任务lpadmin组则允许管理工作添加打印机、删除打印机、调整默认打印机设置。麒麟系统对国产打印机的兼容已经做得比以前好但不少同事遇到“能装驱动但打印队列无权操作”的怪问题最后发现就是用户少加了lpadmin组。audio组和video组分别控制声卡设备和视频设备的访问。远程桌面接入、虚拟机里跑麒麟、或者用USB声卡时经常出现音频设备被占用的提示除了进程抢占另一种可能就是组成员资格缺失。值得注意PulseAudio/PipeWire音频栈在麒麟桌面环境里通常会以用户级共享方式运行不像老式系统那样每个用户必须加audio组但保留audio组对多用户切换场景仍然有价值。dialout组管理串口和调制解调器设备。写嵌入式、连接开发板、烧录单片机固件用户必须在这个组里否则即使插入USB转串口程序打开/dev/ttyUSB0也会报Permission denied。做硬件相关开发的人这一条是新手最常见劝退点。2.3 服务与高级权限组sudo组是最常用的提权组。普通用户加入sudo组后终端执行sudo命令就能临时获得root权限。麒麟桌面系统通常预配置了sudo组为提权入口但某些定制镜像也保留了wheel组RHEL系操作习惯的人天然适应后者。判断系统支持哪个组看/etc/sudoers里%sudo和%wheel这两行保留哪个就是哪个。需要注意的是把用户加进sudo组只是一半工作用户执行第一条sudo命令时系统会要求输入该用户自己的密码这个密码不是root密码。sshd组的机制和很多人想的不一样它对常规SSH登录没有直接作用更多用于配合sshd服务的严格访问控制。当sshd_config里配置了AllowGroups则只有对应组内的用户才能远程登录。麒麟系统远程桌面和SSH管理场景经常遇到“本地能登录、远程就是被拒”的情况排查思路之一就是查看sshd_config是否启用了组限制。kvm组面向虚拟化场景成员可以访问/dev/kvm设备节点。用麒麟的虚拟机管理器运行Win系统或者开QEMU测试用户必须在kvm组否则创建虚拟机时会提示“不支持虚拟化”或“无法打开kvm设备”。有些用户已经能在图形界面创建虚拟机了结果启动直接失败十有八九是忘了这一步。systemd-journal组与日志管理相关。如果系统拒绝普通用户查看journalctl日志将它加入systemd-journal组即可。和adm的区别在于这个组职责更聚焦在systemd日志体系适合单个应用排错时使用。3. 实操用户组的查看、添加、移除、创建与删除3.1 查看当前用户属于哪些组打开终端直接输入groups输出会显示当前用户所属的全部组。这个命令输出顺序与发布时间有关不一定代表主组。想看得更严格用id命令id # uid1000(kylin) gid1000(kylin) 组1000(kylin),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),122(lpadmin),134(lp),135(sambashare)注意gid是主组ID组含义后面的全是附加组。主组决定新建文件默认属组附加组决定额外权限。查看当前系统里有哪些组cat /etc/group输出格式是“组名:x:组ID:成员列表”以冒号分隔。比如sudo:x:27:kylin,zhangsan说明sudo组的GID是27组成员是kylin和zhangsan。只要某个组里什么都没有成员列表就是空的但别以为这个组没存在意义很多服务在启动时才动态加入。3.2 把用户加入或移出指定组最常用且推荐加参数的命令sudo usermod -aG sudo zhangsan关键就是-aGG指定把用户加入某个附加组a表示追加而不是覆盖。少了a用户会被直接踢出原有附加组再只保留现在指定的这个组属于新手高危操作。实际运维中我见过有人执行sudo usermod -G sudo zhangsan把用户从cdrom、adm这些组全部移除导致光驱、日志查看权限同时丢失。移除用户从某个组sudo gpasswd -d zhangsan sudo这个命令会把zhangsan从sudo组移除但不会影响其他组。比直接编辑/etc/group文件更安全因为gpasswd会处理并发锁防止编辑过程中与其他服务冲突。修改用户的主组用sudo usermod -g staff zhangsan注意这里是-g且不能同时与-G使用含义会错乱。修改主组后用户之后新建文件的默认属组就变了已经存在的文件属组不会自动跟着改变。3.3 创建和删除用户组创建新组sudo groupadd devteam指定GID创建sudo groupadd -g 2010 devteam删除组sudo groupdel devteam删除组有两个我踩过的坑第一已经作为某用户主组的组不能直接删除会报错需要先把用户主组改成其他组第二被某目录当作属组的组删除后该目录的属组显示会变成数字ID比如2010看起来像乱码需要用chown或chgrp重新修正。比如sudo chgrp devteam /srv/shared把这个目录的属组重新指给devteam。如果你已经删掉了组那只能重建相同GID的组或者改用其他组。3.4 图形化麒麟桌面系统里的用户管理入口如果你是桌面用户不想每次敲命令可以直接打开“开始菜单—设置—系统管理—用户和组”在图形界面里给已有用户勾选附加组也可以新建用户时直接指定主组和附加组。这个工具等价于执行useradd和usermod但界面更直观适合在别人电脑上指导操作。不过要注意图形工具修改组时同样存在“覆盖”陷阱某些版本在编辑用户属性的界面里如果只勾选当前需要的组会把其他已勾选的组一并提交实际上等于移除了旧有组。我在帮同事处理打印机权限时遇到过他在图形界面勾选lpadmin组后sudo组被意外取消后面装软件更新系统时一路提示无权限。图形工具方便归方便改完最好用id重新核对一次。4. sudo组不是万能的提权配置与组策略要点加入sudo组后执行sudo报错这个问题出现频率极高。常见原因之一是用户在sudoers里被设置了NOPASSWD但系统仍提示输入密码原因可能是用户处于多个组而sudoers中的限制规则优先级不一致。先看规则sudo visudo安全做法是只对单个组设置允许提权并强制要求密码。不建议直接把某一行改成ALL (ALL) NOPASSWD: ALL除非这是专门的自动化测试机。桌面办公环境下每次sudo输入密码是值得保留的确认环节。如果自定义了一个组比如developers想让该组所有成员都能运行某个指定命令而不必每次输密码可以这样配置%developers ALL(ALL) NOPASSWD: /usr/bin/systemctl restart nginx这个规则表示developers组成员执行systemctl restart nginx时免密其他systemctl操作仍需要密码。这样的颗粒度比全部放行明智能得多。最小权限原则在桌面系统上同样适用。很多人喜欢把用户同时加入sudo、adm、cdrom、lpadmin看起来一劳永逸。但这意味着任何Web漏洞、恶意脚本拿到该用户会话后能访问日志、操作打印服务、挂载设备安全面很广。合理做法是只给用户当前工作场景需要的组需要新权限时再加不需要的及时收回。我自己习惯给办公用户只保留sudo和cdrom给开发人员额外加kvm和dialout给运维人员加adm和systemd-journal。5. 典型事故复盘组被误删、权限刷不出来、属主变成数字ID5.1 误删用户组导致属主变数字ID在清理系统时执行groupdel删除了一个看似闲置的组比如oldftp结果/opt/ftpdata目录是root:oldftp属主。组一删再执行ls -l属主显示可能还是oldftp也可能直接显示为2009这样的数字。这是因为系统找不到对应的组名只能退回显示GID。修复思路是重建同GID的组sudo groupadd -g 2009 oldftp重建后目录属组会重新对应到oldftp不用逐一chown。如果GID早已被其他组占用那只能新建一个不同GID的组再chgrp目录过去。这里引用一条热搜词“sfc scannow能不能修复删掉的用户组”这是Windows命令和麒麟无关不用去试。麒麟有自己的修复机制下面讲。5.2 改了组权限但当前会话不生效把用户加入某组后终端里执行id却看不到新组。原因是当前登录会话携带的组凭证已经缓存新加入的组需要重开终端或重新登录才识别。桌面环境里尤其明显因为图形会话自登录时就建立新加的组要注销重登才生效。不用重启机器注销再登录一次或者新开终端验证即可。如果测试过程中反复确认没有生效先检查命令是否落到了正确目标组sudo getent group kvm这行命令会输出kvm组的当前成员比翻/etc/group更可靠。5.3 用麒麟系统修复助手处理组件级异常少数情况下用户组配置本身没有改错但系统组织数据库出现异常getent输出结果与/etc/group不一致。这通常属于系统组件损坏不是普通权限问题。麒麟系统自带的“系统修复助手”可以扫描系统关键文件与配置一致性包括用户、组信息。操作路径是“开始菜单—系统管理—系统修复助手”执行扫描后按提示修复然后再重启验证。针对本文场景修复完成后无需重复把所有用户重新加组正常登录用户附加组成员信息会被系统重新读取。如果修复后发现某个组消失了再按前面提到的groupadd重建即可。5.4 添加组成员后无权限访问共享打印机打印机权限问题有几种混淆情况系统已经安装了打印机但另一名用户看不到打印队列或点击打印提示“拒绝访问”。这通常是该用户不在lpadmin组。排查时顺序如下第一确认打印机服务在运行systemctl status cups第二查看当前用户所属组groups 用户名第三确认该用户有没有进lpadmin没进就追加sudo usermod -aG lpadmin 用户名然后让用户退出登录重新进入。如果仍然提示无权限再检查打印机是否设置为“仅限管理员使用”这个选项在不同品牌驱动管理工具里展示不同必要时把访问权限改为“所有人”。6. 常用用户组速查表与一条龙命令清单我整理了一份麒麟V10-SP1桌面系统里最常接触的用户组速查表方便大家对照使用。组名核心用途普通用户是否需要典型补充场景root系统完全控制不需要仅建议作为保留项bin管理系统二进制文件历史组不需要基本不用daemon部分系统进程公共目录不需要基本不用sys设备节点管理不需要极少用到adm读取/var/log日志建议按人按需加日志排查cdrom访问光驱和光盘挂载经常需要外置光驱、刻录lp使用本地打印任务经常需要普通打印lpadmin管理打印机、队列管理员需要装驱动、设置队列dialout串口和调制解调器开发调试需要嵌入式开发板audio声卡设备访问通常不需要但保留无害多用户音频video视频设备访问通常不需要视频采集、GPU直通sudo执行sudo提权绝大多数用户需要日常安装、修改系统wheel老式系统提权组看系统配置兼容定制镜像systemd-journaljournal日志读取按需添加服务排错kvm访问/dev/kvm虚拟化节点虚拟机用户需要开虚拟机sshd配合AllowGroups限制SSH登录一般不直接用远程管理白名单最后给一套一条龙命令。假设要给用户zhangsan配置一个开发人员常用环境让他能sudo、使用串口、访问光驱、开虚拟机sudo usermod -aG sudo,dialout,cdrom,kvm,adm zhangsan # 验证 id zhangsan # 让组成员立即生效让他重新登录 sudo systemctl restart systemd-logindsystemd-logind重启会强制当前图形会话做一次重新识别部分桌面版本切换时个别应用可能卡顿更稳妥的仍是注销再登录。这套命令组合在我日常配置中命中率很高省掉了一个一个加的麻烦。还有一个容易被忽略的细节修改组成员后该用户目录下的历史文件属组不会自动改变。如果发现某个目录要共享给一个组协作访问除了把用户加组还得处理目录属组与权限位sudo chown -R zhangsan:devteam /srv/project sudo chmod -R 2770 /srv/project数字2表示对目录启用了setgid位新建文件自动继承目录的属组避免协作时文件属主组错乱。这一段是我在处理多用户协作目录时最推荐的配置能省掉后续很多“文件为什么属于别人”的疑问。我个人在实际操作中的体会是麒麟V10-SP1的用户组模型并不复杂真正麻烦的是版本差异和桌面环境缓存机制。遇到权限问题先别急着赋root先id看一下用户在哪些组比对一下需求场景往往几分钟就能定位。平时多用usermod -aG补充组少用-G覆盖组能避开绝大多数权限回退事故。这套经验在我维护的几台麒麟工作站上反复验证过稳定性和可控性都很不错推荐给大家直接采纳。