ARTICLE DETAIL

资讯详情

深耕网站SEO优化与搜索引擎排名提升的一线实战洞察。

Linux 常用命令学习笔记(用户管理篇):用户、组与权限的钥匙

Linux 常用命令学习笔记(用户管理篇):用户、组与权限的钥匙 在 Linux 常用命令学习笔记高级篇 里我们把文本处理这条线推到了深水区用正则给grep装上瞄准镜再请出 Vim / Emacs 让你能直接在终端里改文件。但那篇结尾我打了个包票下一篇正式进入「用户和管理」。今天就来兑现。你可能会想我天天sudo apt install敲得飞起还要专门学用户管理答案是——只要你在用 Linux你就活在一个多用户、权限隔离的世界里。为什么cat /etc/shadow会被拒绝为什么sudo之后就能看useradd一声令下系统悄悄改了哪几个文件这篇一次讲清。学完你会发现所谓权限底层就是用户 组 文件属主属组三个东西在博弈。先把用户和组搞明白下一篇讲chmod/chown才会顺理成章。前情回顾本篇要「接」上哪些旧工具之前学过的本篇怎么接上它whoami基础篇它只告诉你「我是谁」本篇讲清楚「我是哪个UID、属于哪个组、为什么root的 UID 永远是 0」cat/less/ls -la基础、进阶本篇用它们翻/etc/passwd、/etc/shadow、/etc/group并用ls -la看文件的属主与属组grep进阶、高级本篇用它从几百号用户里精准捞出某人grep ^bob: /etc/passwdVim / Emacs高级篇本篇郑重提醒改用户文件千万别手贱用 Vim 直接改/etc/passwd要用useradd/usermod这类专用命令记住一个核心心法用户和组是「权限的主体」文件属主属组是「权限的客体」。Linux 先把主体认清楚才谈得上给客体分配权限。一、为什么要有用户和组在任何多用户操作系统里管理用户和组都是基础概念Linux 尤其把这事做成了访问控制和权限管理的核心。每个用户有独立主目录通常在/home/用户名用来存你自己的文件和配置不同发行版路径可能略有差异。系统靠数字认人用户名只是给人看的可读标签真正干活的是UID用户 ID和GID组 ID。所有权限判断都基于这两个数字。组是用户的集合把一堆人归到一个组就能一次性给这一组人授权不用一个个配。进程也分身份你跑起来的进程是以「启动它的那个用户」的身份在运行文件访问同样按权限防止 A 用户翻看 B 用户的私货。在这个层级的最顶端站着一个凌驾于所有人之上的人root也就是超级用户。它的 UID 永远为0拥有无限权限——能读任何文件、管任何进程。但一直用 root 操作很危险一个手滑就可能把系统搞崩。所以 Linux 的设计哲学是平时用普通用户需要时用sudo临时提权。小实验试着看一眼存着加密密码的文件cat /etc/shadow # 报错Permission denied权限拒绝 ls -la /etc/shadow # -rw-r----- 1 root shadow 847 Jun 30 22:48 /etc/shadow # 只有 root 用户和 shadow 组的成员能读 sudo cat /etc/shadow # 输入密码后内容就显示出来了这个「被拒绝 → 加 sudo → 放行」的过程正是用户与权限管理最直观的体现了。二、root 与 sudo提权要有节制2.1sudo临时以 root 身份跑单条命令sudosuperuser do让你不用登录 root 账户就能以超级用户身份执行某一条命令。这是日常管理的首选方式sudo cat /etc/shadow # 以 root 权限查看受保护文件 sudo apt update # 以 root 权限更新软件源系统会提示你输入当前用户的密码认证通过后才放行。2.2su切换用户含切到 root除了sudo你还能用susubstitute user切换用户来获取别的身份。不带用户名时它默认切到rootsu # 开启一个 root 的 shell要输入 root 密码 su bob # 切到用户 bob要输入 bob 的密码2.3 为什么不建议常驻 root shell用su打开一个 root shell 看起来很爽但隐患不小持续以 root 操作犯系统级错误的风险陡增root shell 里的操作不会记在你个人用户名下出事后很难审计「是谁改的」。所以最佳实践明确需要超级权限的单条命令用sudo别长期泡在 root shell 里。2.4sudoers文件谁能 sudo 由它说了算系统怎么决定「你能不能用 sudo」答案在/etc/sudoers这个配置文件里——它列出了被授权以超级用户身份运行命令的用户和组。永远用visudo来编辑它而不是拿 Vim 直接改sudo visudovisudo会在保存前做语法检查能防止你把配置写错、结果把自己锁在 sudo 权限之外那种「改完 sudoers 然后 sudo 用不了」的惨剧八成就是手改惹的祸。三、三个核心文件Linux 把用户、组的信息分散在几个纯文本文件里像三本账本。理解它们的字段用户管理就通透了。3.1/etc/passwd用户信息总表7 个字段cat /etc/passwd # root:x:0:0:root:/root:/bin/bash # 1 2 3 4 5 6 7每一行代表一个用户7 个字段用冒号:隔开字段含义说明1 用户名登录名如root2 密码占位符x表示真密码在/etc/shadow*表示账户被锁、不能登录空白表示无密码3 UID用户 IDroot永远是0普通用户从 1000 起4 GID主组 ID用户主组的数字标识5 GECOS注释传统存放全名、电话、办公室等逗号分隔6 主目录家目录绝对路径如/root、/home/bob7 Shell默认登录 shell如/bin/bash/sbin/nologin表示禁止登录你会注意到文件里有一大堆系统账户如daemon、www-data它们不是给人登录用的而是以低权限跑特定服务/进程专门用来增强系统安全性。⚠️ 编辑警告技术上你可以用 Vim 或vipw直接改/etc/passwd但强烈不建议。手改极易引入语法错误可能把自己锁在系统外。请用下面要讲的useradd/usermod/userdel专用命令。3.2/etc/shadow密码保险柜9 个字段/etc/shadow存的是加密密码和密码老化策略。它和全局可读的/etc/passwd分开而且必须 sudo 才能看——这样非特权用户连密码哈希都摸不到更别提拿去离线破解。sudo cat /etc/shadow # root:MyEPTEa$6Nonsense:15000:0:99999:7:::每行 9 个字段仍以冒号分隔字段含义1 用户名登录名2 加密密码哈希后的密码*或!表示账户被锁3 最后改密日期距 1970-01-01 的天数0表示下次登录强制改密4 最小密码年龄改密后必须等多久才能再改5 最大密码年龄密码有效的最大天数过期必须改6 密码警告期过期前几天开始提醒7 不活跃期过期后账户被禁用前的宽限天数8 账户过期日绝对过期日期同样按 1970 起算天数9 保留字段留作未来扩展现代发行版还会叠加 PAM可插拔认证模块等更灵活的认证机制但/etc/shadow的基础地位不动摇。3.3/etc/group组信息表4 个字段cat /etc/group # root:*:0:pete每行一个组4 个字段字段含义1 组名组的唯一名称2 组密码遗留功能几乎不用通常*或x占位3 GID组的数字 ID4 成员列表属于该组的用户名逗号分隔示例root:*:0:pete表示组名root、无密码、GID0、成员里有用户pete。四、用户管理三板斧useradd / usermod / userdel理论讲完上实操。管理用户有专用命令比手改文件安全可靠得多。4.1 添加用户useraddsudo useradd [选项] 用户名常用选项日常几乎必加-m和-s参数作用实例-m自动创建家目录/home/用户名sudo useradd -m -s /bin/bash bob-s /bin/bash指定登录 shell/sbin/nologin禁止登录sudo useradd -m -s /bin/bash bob-u UID指定用户 UIDsudo useradd -m -u 1200 myuser-g 组/GID指定主组初始登录组sudo useradd -m -u 1200 -g 1001 myuser-G 组1,组2指定附属组逗号隔开sudo useradd -m -s /bin/bash testuser -G sudo-c 备注写入/etc/passwd第 5 字段GECOSsudo useradd -m -c Bob Lee bob-d /path手动指定家目录路径sudo useradd -m -d /data/bob bob-e YYYY-MM-DD设置账号过期时间sudo useradd -m -e 2026-12-31 bob-M不创建家目录服务账号常用sudo useradd -M -s /sbin/nologin appuser一条综合示例sudo useradd -m -s /bin/bash -u 1200 -g 1001 -G sudo testuser # -m 建家目录 -s 用 bash -u 指定 UID -g 主组 1001 -G 追加 sudo 附属组useradd是低级标准工具部分发行版还提供交互性更好的adduser脚本但useradd是通用写法。4.2 删除用户userdelsudo userdel 用户名 # 删用户保留家目录 sudo userdel -r 用户名 # -r连家目录一起删彻底删除4.3 改密码passwdpasswd # 普通用户改自己的密码 sudo passwd bob # root 改别人密码不用输入旧密码五、组管理主组 vs 附属组最容易混淆Linux 里每个用户一定属于1 个主组初始组 0 到多个附属组附加组。/etc/passwd第 4 字段的 GID → 对应用户的主组 ID/etc/group存所有组信息/etc/gshadow存组密码很少用5.1 主组与附属组的区别主组primary group-g每个用户有且只有一个。用户新建文件/目录时文件的默认属组就是主组。创建用户时默认会生成一个同名私有组如user:x:1001:1001::/home/user:/bin/bashGID1001 就是同名私有组。附属组supplementary group-G可以有 0 个或多个。用来获取额外权限比如加入sudo、docker组。它不影响新建文件的默认属组。5.2 查看用户所属组groups # 当前登录用户的所有组 groups 用户名 # 查看指定用户的所有组 id 用户名 # 输出 UID、主组 GID、以及全部附属 GID示例输出id user1 # uid1000(user1) gid1000(user1) 组1000(user1),27(sudo) # gid1000 → 主组逗号后面的是附属组这里 user1 还属于 sudo 组5.3 创建 / 删除组groupadd webgrp # 创建组 webgrp自动分配 GID groupadd -g 2000 webgrp # 指定 GID 创建 groupdel webgrp # 删除组 # 注意不能删除某个用户的「主组」要先改掉该用户的主组才能删5.4 修改用户组usermod# -g 修改主组 usermod -g webgrp user1 # -G 设置附属组不带 -a 会直接覆盖全部原有附属组 usermod -G sudo,docker user1 # -aG 追加附属组保留原有附属组最常用、最安全 usermod -aG docker user1大坑usermod -G docker user1如果忘了加-a会把 user1 从sudo等其他附属组里一脚踢出去要追加永远用-aG。六、文件属主与属组文件有两个关键属性属主哪个用户和属组哪个组。ls -la # -rw-r--r-- 1 user1 webgrp 123 test.txt # 属主:user1 属组:webgrp几条关键规律用户新建文件时文件默认属组 当前用户的主组如果用户只是某个组的附属组成员新建文件的属组不变还是主组只是该用户拥有这个组对应的权限。这正好引出下一篇的核心问题那一串-rw-r--r--到底是什么意思怎么用chmod改读写执行权限、用chown/chgrp改属主属组——也就是我们常说的「文件权限管理」。小结这一篇我们把「用户和管理」这根线立了起来为什么要有用户和组多用户、权限隔离的世界靠 UID / GID 认人rootUID0是顶端但别常驻root 与 sudosudo临时提权最安全su切用户有常驻 root 的风险sudoers用visudo改三本账/etc/passwd7 字段、/etc/shadow9 字段密码保险柜、/etc/group4 字段用户三板斧useradd-m -s -u -g -G 等、userdel-r 连家目录、passwd组管理主组 vs 附属组——groups/id查看groupadd/groupdel增删usermod -aG追加别漏-a文件属主属组新建文件默认属组主组这正好接上下一篇的chmod/chown。如果在练手时想有个能随手敲命令的环境基础篇、进阶篇、高级篇都推荐过的Linux Journeyhttps://labex.io/linuxjourney同样适合本篇网页里就能实操useradd、翻/etc/passwd边学边练印象最深。 Linux 学习系列 · 全部文章Linux 常用命令学习笔记基础篇基础命令Linux 常用命令学习笔记进阶篇I/O重定向和文本处理Linux 常用命令学习笔记高级篇正则表达式与 Vim / Emacs 编辑器习笔记Linux 常用命令学习笔记用户管理篇用户、组与权限的钥匙Linux 常用命令学习笔记权限管理篇看懂 rwx管好每一份文件的生杀大权
返回列表