资讯动态

Linux用户与组账号管理:从命令到密码策略的运维实战

发布时间:2026/10/13 15:25:16 来源:尧图企业网站定制
说实话Day01到Day04学完基础命令之后很多人会有一个错觉Linux好像也就这样了无非是ls、cd、cp这些换来换去。但真到了要负责一台服务器、要给一个项目组开账号、要处理“为什么新同事登录不了”这种问题的时候才会发现自己缺的不是命令量而是把命令串起来解决实际问题的能力。用户及组账号管理、密码管理之所以被安排在“命令补充”之后就是因为这些知识不是孤立的概念它们是日常运维里绕不开的一组真实操作。这篇文章就围绕这三块展开先补上一些高频但容易被忽视的命令再讲清楚用户和组的底层逻辑、配置文件、常用操作最后用一个常见的排障场景把密码管理的细节串起来。内容偏实操适合刚学完Linux基础、准备接手服务器管理或者正在系统梳理账号体系的人参考。1. 命令补充不是堆命令量先捋清日常运维里真正缺的部分1.1 从定位文件到查进程三类高频命令的典型场景Day01到Day04大概率已经覆盖了ls、cd、cp、mv、rm、ps、top这些基础操作。但到了“给服务器开账号、查登录状态、看磁盘占用”这个阶段你会发现有几类命令是基础篇里讲得不够细、但日常工作里几乎是天天用的。第一类是查找类代表是find和grep。很多初学者会把它们搞混find是沿着目录树找“文件名”的grep是读“文件内容”做匹配的。举一个实际场景某同事反馈说某个配置文件改了之后服务起不来但你不知道配置在哪。这时候grep可以全局搜内容find可以按路径、按时间、按权限找文件。比如find /etc -name *.conf -mtime -1这条命令的意思是在/etc下找名字以.conf结尾、最近一天内被修改过的文件。结合修改时间能很快锁定嫌疑人文件。第二类是磁盘与资源排查类代表是df、du、free。服务器出问题最经常遇到的就是“磁盘满了”“内存不够”“CPU 跑满”。定位磁盘问题的标准组合是df -h du -sh /var/log/*df -h看的是“哪个分区满了”du -sh看的是“某个目录到底占了多大”。这两个命令一全局一局部配合起来能快速缩小范围。free -h看内存top看实时负载这类基础命令虽然学过但在账号管理场景里有一个容易被忽略的应用——查某个用户跑着的进程用ps -u 用户名这是后续排查“用户登录后卡死”“用户进程占满CPU”时必用的手段。第三类是打包归档类代表是tar。备份一个用户的家目录、迁移一批账号的数据都会用到tar -czvf backup.tar.gz /home/某用户其中-c是创建归档-z是gzip压缩-v是显示过程-f指定归档文件名。解包则用-x。这类命令的掌握程度直接决定了你做账号数据迁移时是十分钟搞定还是折腾一下午。为了方便阅读我把这三类命令整理成一个速查表命令核心用途高频参数组合典型场景find按文件名、类型、时间、权限查找-name-type-mtime-exec找最近改过的配置文件grep在文件内容中匹配文本-r-n-i-E查日志中的报错行、查关键配置项df查看文件系统整体空间-h-T磁盘满了先看哪个分区出问题du查看目录/文件实际占用-sh-h定位具体是哪个目录把空间吃掉了tar归档压缩-czvf-xzvf-tf备份用户家目录、批量迁移文件ps查看进程快照-ef-u查看某个用户下运行了哪些进程free查看内存使用情况-h内存不足排查1.2 把命令串起来以“磁盘满”为例的操作链路单学命令很容易学完就忘因为每条命令都是孤立的知识点。真正值钱的是“组合思路”。我举个实际例子某台服务器告警磁盘空间不足正确的排查链路是df -hT先看根分区有没有满如果/或/var满了就进/var继续du -sh /var/*这一步能立刻看到底是日志目录、缓存目录还是某个应用数据目录在膨胀。假如发现/var/log很大再往下定位du -sh /var/log/* find /var/log -type f -size 100Mfind配合-size参数可以直接筛出超过 100MB 的文件。这样三步下来从分区到目录再到具体文件问题范围一层层缩小。整个过程用到的命令都是基础命令但组合起来的思路才是真正需要练习的东西。我把这种排查方法叫“从全局到局部”先用df看全局后用du看局部再降级到find锁定目标。这套思路在后面账号排障中同样适用——先看整体状态再逐步收敛范围。补充命令的学习重点从来不在命令本身而在这种组合使用的方法论上。2. 用户与组的账号体系先理解配置文件再动手建号2.1 一个账号落在系统里到底改了什么四个核心文件速览“用户账号管理”这个词听起来像是一个抽象的概念但落到 Linux 系统里它非常具体——本质上就是在改几个文本文件。理解这几个文件比死记命令参数重要得多。第一个是/etc/passwd保存用户的基本信息。一行一个用户字段用冒号分隔。很多初学者看这文件的第一反应是被里面的x唬住担心密码泄露。实际上密码并不存在这里x只是一个占位符真正的密码哈希在/etc/shadow里。/etc/passwd每行格式如下用户名:x:UID:GID:注释信息:家目录:登录Shell举个例子tom:x:1001:1001:项目A开发人员:/home/tom:/bin/bash这里的 UID用户ID和 GID组ID是数字形式的身份标识。Linux 内核并不认识“tom”这个字符串它只认数字。理解这一点特别重要因为后面你会遇到“改了用户名但 UID 没变”这类问题——本质就是文件里的名称变了数字身份没变。第二个文件是/etc/group保存组的基本信息组名:x:GID:组成员列表组是管理权限的基本单位。Linux 的权限模型中用户属于一个或多个组文件通过“属主、属组、其他人”三组权限来控制访问。给用户配权限通常不是直接给用户配而是建一个组、把用户加进去、再给组配权限。这样管理起来清晰得多。第三个文件是/etc/shadow保存密码及密码策略。这个文件普通用户读不了只有 root 或对应权限的用户能看。后面专门讲这里先知道它是“密码的真正存放地”就够了。第四个文件是/etc/gshadow保存组密码和组管理员信息。日常用的频率比较低但有些复杂场景会涉及组切换时的认证知道它的存在即可。2.2 建号的正确姿势useradd 参数怎么选理解了配置文件再看命令就顺理成章了。创建用户我推荐用useradd不要手动去编辑/etc/passwd。手动编辑风险太高格式一错可能直接导致系统登录异常后患无穷。先看一个完整的创建命令useradd -m -s /bin/bash -c 项目A开发人员 -G dev_group tom参数的含义分别是-m创建用户的同时建立家目录默认是/home/tom。不加这个参数用户连家目录都没有登录后会落到根目录或系统默认目录体验非常奇怪。-s /bin/bash指定登录 Shell。如果不指定不同发行版默认值不一样有的会指向一个功能很少的sh有的甚至可能是/bin/false意味着这个账号无法登录。所以建议新建交互式登录用户时显式指定为/bin/bash。-c注释信息一般写用户的职责或联系方式方便后期维护。-G dev_group把用户加入附加组。如果这个组还不存在得先建组。组用groupadd创建groupadd dev_group构建账号体系的推荐顺序是先建组再建用户然后把用户分配进组最后设置密码。原因很简单如果你先建了用户再建组还得额外执行一次usermod -aG dev_group tom才能把用户挂到组下不如一步到位。建完账号之后两步验证非常重要id tom grep tom /etc/passwd /etc/groupid tom会输出用户的 UID、GID 和所属组列表这是判断账号结构是否正确的最快方式。grep则是确认配置确实写入了文件。2.3 改账号三件套usermod、userdel、id账号建好之后日常维护最常用的三个命令是usermod、userdel和id。usermod用来修改已有用户的属性。常见场景有把用户加入新的附加组usermod -aG dev_group tom。这里的-a是 append 的意思没有它-G会直接覆盖用户的附加组列表把原来所在的组清掉。这个参数是新手最容易踩的坑很多人用了usermod -G之后发现用户“消失”在其他组里了。修改用户的登录 Shellusermod -s /sbin/nologin tom。典型的应用场景是把离职同事的账号从“可登录”改成“不可登录”保留数据但禁止操作。修改账号注释usermod -c 新的注释 tom。锁定账号usermod -L tom解锁用usermod -U tom。锁定和解锁在密码管理环节和passwd -l/-u效果类似后面细说。userdel用来删除用户。推荐习惯是带上-ruserdel -r tom-r的意思是连同家目录和邮件文件一起删除。不带-r删除用户之后系统里会残留一个以该用户 UID 为属主的目录。如果不及时处理后面新建一个 UID 相同的用户就会“继承”这堆没人认领的数据这是个很隐蔽的安全隐患。id除了查看用户信息另一个高频用途是查“某个组下都有谁”。这个动作一般这样组合grep ^组名 /etc/group因为在/etc/group里组成员列表写在该行的末尾字段。用grep按组名过滤再读字段就能快速看到组内成员。这里我想强调一个原则凡是涉及创建、修改、删除账号的操作优先用系统提供的命令而不是直接去编辑/etc/passwd、/etc/shadow这两个文件。命令会做格式校验、文件锁定、缓存更新等一大堆后台工作直接改文件虽然看起来“更懂底层”实际上很容易弄出不可预期的结果。只有在特殊恢复场景比如后面说的忘记密码下才需要动用直接操作文件的手段。3. 密码管理这件事从 shadow 文件到策略配置3.1/etc/shadow字段逐行拆解密码管理是账号管理里最核心、也最容易让人困惑的部分。用户能不能登录、密码什么时候过期、过期后还有没有宽限期这些信息全部记录在/etc/shadow文件里。每行格式如下tom:$6$随机盐$哈希值:19000:0:90:7:14::看着头大拆开看就清楚了。字段按冒号分隔字段位置含义示例值第1列用户名tom第2列密码的哈希值以$分隔算法、盐、哈希!或*表示锁定$6$...第3列最后一次修改密码的日期按1970年1月1日至今的天数计算19000第4列两次修改密码之间的最小间隔天数0第5列密码最长有效天数超过就必须改90第6列密码过期前多少天开始警告7第7列密码过期后的宽限天数宽限期内不修改则账号锁定14第8列账号的失效日期空第9列保留字段空看一眼表格里的示例这个账号最后一次改密码是第19000天密码最长用90天到期前7天开始提醒过期后还能宽限14天。如果14天内还没改账号就会被锁定无法登录。理解第3列“天数算法”很重要。它是从1970年1月1日开始数的天数不是一个直观的日期。比如你想确认“这个账号密码是不是上个月改的”得把天数折算成日期。不过在命令行里不用手动换算chage -l tom可以直接查看密码的修改时间、过期时间、失效时间人性化得多。3.2 passwd 的三种用法日常修改密码最高频的命令是passwd。交互式用法最简单passwd tom系统会提示输入新密码然后要求再次输入确认。这种方式适合人工操作但有个问题是自动化脚本里没法用——因为它是交互式提示。非交互式用法在 RHEL/CentOS 系系统上很常用echo StrongPass_2025 | passwd --stdin tom--stdin的意思是直接从标准输入读取密码。注意不同发行版对--stdin的支持不一样。Debian 系默认不一定支持这个参数此时可以用chpasswdecho tom:StrongPass_2025 | chpasswdchpasswd的输入格式是“用户名:密码”逐行处理特别适合批量修改多个账号的密码。还有一种场景是批量把一批账号的密码重置成同一个初始密码可以在脚本里循环调用chpasswd一次搞定。我团队里处理新同学入职账号时就是先写入一个临时密码然后在第一次登录时强制其改密。强制改密的操作后面会讲到是chage -d 0这个参数含义是把最后一次改密日期设为0系统就会在下一次登录时要求用户设置新密码。3.3 密码策略不是因为记性好而是因为有机制兜底“密码策略”这个词听起来很高级核心其实就是四个问题多长时间必须改一次、最短要多长、密码复杂度要求多高、连续输错几次锁定。用chage命令可以设置前三个问题中的时效部分。比如给tom设置一个常见的策略90 天必须改一次提前 7 天提醒最短改密间隔为 0 天chage -M 90 -W 7 -m 0 tom-M最长有效天数-W过期前警告天数-m最小修改间隔天数查看设置是否正确chage -l tom输出里会显示Maximum number of days between password change: 90 Number of days of warning before password expires: 7密码的复杂度和长度限制则不是由chage控制而是由 PAM可插拔认证模块控制。具体的策略文件在 RHEL 系上通常是/etc/security/pwquality.conf里面可以配置minlen12、dcredit-1要求至少一个数字、ucredit-1要求至少一个大写字母等。默认策略不够用时调整的是这个文件而不是去改系统里的某个“密码规则表”。账号锁定策略连续输错密码锁定也是在 PAM 层配置比如pam_faillock模块。这个主题可以展开很多但对基础阶段的读者来说知道“密码策略由两个系统协作完成时效类由 chage 控制复杂度类由 PAM 控制”这个分区就够了。实际配置时按提示在/etc/security/pwquality.conf里改行或者用配套命令调整都能生效。4. 真实排障新账号建好了为什么还是登录失败4.1 现场账号能建、密码能设但就是登不进去讲完前面的理论和命令来看一个实际工作中一定会遇到的场景。某项目组新增一名同学管理员执行了以下步骤useradd -m -s /bin/bash -d /home/newuser newuser echo InitialPass_123 | passwd --stdin newuser账号和密码都设置成功了但新同事 SSH 登录时被拒绝或者登录之后落到了一个奇怪的目录连基本的ls、bash都会报错。这种时候光靠“重设一次密码”大概率是解决不了的问题可能出在账号本身的属性上。正确的做法是按照下面的排查链路一步步来。4.2 完整排查链路六步定位法第一步确认账号的登录 Shell 是否合法。grep newuser /etc/passwd看最后一个字段是不是/bin/bash或者某个真实存在的 Shell 路径。如果写成了/sbin/nologin或者/bin/false那不管密码怎么输系统都不允许登录——这是故意的很多服务账号就是这么配置的。但如果本意是给这个账号做交互式登录Shell 却写成了这些值那问题就出在这里。修改方式usermod -s /bin/bash newuser第二步确认密码不是锁定状态。passwd -S newuser输出类似newuser PS 2025-...表示密码状态正常如果显示LK或者NP说明账号被锁定或者根本没有密码。被锁定的原因可能是有人执行过passwd -l、usermod -L也可能是密码过期后宽限期已过。解锁passwd -u newuser如果是因为密码过期导致的状态异常先重置密码再解锁也不迟。注意这里的“锁定”和“密码过期”是两回事前者是冻结状态后者是强制要求换密码虽然表现上都可能无法登录但处理路径完全不同-S的状态输出里能区分这也是为什么第一步不要跳过passwd -S的原因。第三步检查家目录是否存在、属主和权限是否正确。ls -ld /home/newuser chown -R newuser:newuser /home/newuser家目录属主不对或者目录权限过松会出现两个问题一是用户登录后可能落在/根目录二是 SSH 对家目录的.ssh/authorized_keys权限要求很苛刻权限太开放会直接拒绝公钥登录。具体规则是家目录本身不能是其他用户可写.ssh目录权限不能超过700authorized_keys不能超过600。这类问题在新建账号时特别容易发生尤其当你用 root 手动拷贝了别人的公钥但没有修正属主时。第四步检查 SSH 层是否有账号白名单/黑名单限制。grep -E AllowUsers|DenyUsers|AllowGroups /etc/ssh/sshd_config如果AllowUsers里写了固定列表却没有newuser那么不管账号本身多正常SSH 登录都会被拒。类似的还有Match User、Match Group限定块。这一步最容易让人一头雾水明明密码正确、账号正常却一直报 Permission denied。检查这个配置之前我建议先看一眼系统日志比如journalctl -u sshd里面有明确的拒绝原因比猜快得多。第五步验证密码哈希本身是否正常写入。getent shadow newuser如果第二列是!或*表示密码被锁如果是空值表示没有密码如果是一长串$6$...或$1$...说明密码是有的。有的管理员习惯直接手改/etc/shadow文件写坏了格式却不知道这一步能帮你快速判断。第六步检查账户是否已经过期或被系统级策略限制。chage -l newuser看 Account expires 是不是已经过了再看/etc/shadow第8列是否有过期日期。如果账号被配置了失效日到了日期后就算密码正确也是一样进不去。这类“定时账号”常用于实习生或临时外包账号到期自动失效但如果忘了续期或临时要延期就会卡在登录这一步。4.3 排障之外为什么不要直接手改配置文件排障链路里我多次提到用命令而不是直接改文件。这里再强调一下/etc/passwd、/etc/shadow这类文件一旦格式被写坏最轻的情况是某个用户无法登录最严重的情况是整个系统所有用户都无法登录。真到了非得手动修的时候也要用vipw和vigr这两个命令——它们带文件锁可以防止多人同时编辑导致写坏改成shadow格式时也做了校验。用法和 vi 完全一样vipw vigr记住vipw编辑的是/etc/passwd编辑 shadow 文件用vipw -svigr编辑/etc/group编辑 gshadow 用vigr -s。我把排障链路整理成一张表方便日后直接对照步骤检查内容命令常见异常1登录 Shellgrep 用户名 /etc/passwd/sbin/nologin或不存在路径2密码状态passwd -S 用户名LK锁定或NP无密码3家目录ls -ld /home/用户名属主不对、目录不存在4SSH 白名单grep AllowUsers /etc/ssh/sshd_config账号不在允许列表5shadow 密码列getent shadow 用户名第二列是!或*6账号失效日chage -l 用户名已超过失效日期这套“六步法”我反复用过很多次。实际情况下步骤不一定完全按顺序执行因为日志信息有时候会直接帮你跳过两步。比如journalctl -u sshd里如果明确写着User newuser not allowed because listed in DenyUsers那就直接跳去第四步改 SSH 配置。但作为基础把每一步的检查对象和命令都理解清楚遇到新问题才不会慌。5. 账号生命周期管理从创建到回收的完整闭环5.1 先设计组再设计账号前面说了建号的顺序这里把它放到“生命周期管理”的角度再看一次。一个清晰的账号体系组的设计应该走在账号前面。举个例子某项目组有四个同事都做后端开发。如果直接给四个人建四个账号然后给每个人单独配权限后期维护一定很痛苦——下次再来一个人你得把前四个人的权限操作全部重复一遍。正确的做法是groupadd backend_dev useradd -m -s /bin/bash -G backend_dev user1 useradd -m -s /bin/bash -G backend_dev user2 useradd -m -s /bin/bash -G backend_dev user3 useradd -m -s /bin/bash -G backend_dev user4权限全部配到backend_dev这个组上。新同事来了只需要一条useradd -G backend_dev有人离职一条userdel -r不会影响其他任何人。这种“权限绑定组、账号绑定人”的思路和很多大型系统里的 RBAC基于角色的访问控制是一个道理只是规模小了很多。组在设计时还可以考虑继续细分比如按项目分组长、按运维权限分管理员组。基本原则是一个用户可以属于多个组但角色单一化最好维护。比如backend_dev负责代码目录权限ops_admin负责 sudo 权限互相独立。5.2 创建账号时把密码策略一起带上创建账号时最容易忽略的不是useradd的参数而是密码策略。很多管理员把密码设置完就结束了结果三个月后某账号因为从不改密被爆了又或者某刚离职的同事账号密码还没过期、还能登录系统。我个人的习惯是在建号的同一天就把策略设置好。一组典型的初始策略chage -M 90 -m 0 -W 7 newuser chage -d 0 newuserchage -d 0的作用是强制用户在首次登录时修改密码这对新入职账号特别有用——管理员知道临时密码用户第一次登录后必须改成自己的密码管理员就不再知道用户的真实密码了。这既保护了用户隐私也避免了“管理员能登录所有账号”这种极其危险的局面。5.3 定期巡检密码过期状态账号多了以后靠大脑记住“谁的密码快过期”不现实。我喜欢用一条命令批量检查awk -F: ($2 ! ! $2 ! *) { print $1, $3 } /etc/shadow或者直接用chage -l循环遍历所有用户把输出重定向到文件里慢慢看。更简单的办法是写一个几行的巡检脚本对每个账号执行passwd -S然后筛选状态正常的账号。这套操作虽然简单但能提前发现密码快过期的账号避免用户突然登录不了再来找你。巡检频率取决于公司安全要求一般建议每月一次。重点关注的账号类型是共享账号多人共用的账号密码过期影响面大服务账号可能没有人工维护、密码过期了也没人知道离职未回收账号要尽快禁用或删除 检查项命令关注点账号状态passwd -S 用户名是否PS正常、LK锁定密码过期chage -l 用户名Password expires日期是否临近账号失效chage -l 用户名Account expires是否已过期组内成员grep ^组名 /etc/group是否还有不应存在的账号登录记录last/lastlog是否存在异常时间点的登录5.4 删除账号的三步习惯处理离职或废弃账号我建议操作顺序是先锁定再确认最后删除。一上来就userdel -r虽然干脆但如果对方的家目录里还有项目代码或关键数据删除就是不可逆的。第一步先锁定usermod -L username passwd -l username锁定的同时把账号从所有附加组里移出usermod -G username然后可以观察一段时间确认没有再登录的需求、数据也已经备份再执行userdel -r username如果只是临时借调或者不确定是否还要用那就停留在“锁定”状态不要轻易删除。锁定的账号不影响文件系统中的数据归属以后再唤醒也很简单usermod -U解锁即可。这套流程做一次两次觉得是小题大做但当服务器上有几十个账号、项目交接频繁的时候能帮你躲掉很多“啊那个文件是之前离职同事留下的但它的属主 UID 已经错位了”之类的麻烦。账号管理的本质不是把系统默认支持的增删改查做一遍而是让整个账号体系始终处于“可控、可查、可交接”的状态。最后分享一个我自己的习惯给每个新建账号加一个清晰的注释字段用-c参数写清楚“姓名-项目-联系方式”或“服务用途-负责人”。Linux 的账号列表一旦长了grep 注释关键字 /etc/passwd能比脑子里的记忆更准地告诉你这个账号的来龙去脉。这些细节看起来很小但就是这些习惯决定了你三个月后回头看这套账号体系时是清清楚楚还是两眼一抹黑。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑