首页/新闻资讯/正文详情

Linux普通用户管理实战:创建、查看与删除的权限细节

发布时间:2026/9/24 19:27:13 来源:云帆数科 栏目:资讯中心
Linux普通用户管理实战:创建、查看与删除的权限细节
我干了十几年Linux运维接手过的服务器没有一千也有八百台。说句实话刚入行那会儿觉得用户管理就是敲几条命令的事后来在生产环境里栽过跟头才明白创建、删除、查看普通用户这套操作看起来简单背后全是细节。你删一个用户可能只需要一条userdel但这一条命令下去家目录、文件权限、进程归属、审计记录全都会跟着受影响。标题里写风华与深邃一点不夸张Linux用户管理就是这么个东西——表面上是命令骨子里是权限哲学。这篇文章我打算用一台真实服务器的操作视角把普通用户的创建、查看、删除这三件事彻底讲透。适合刚接触Linux的新手也适合那些会用useradd但从来没细想过每一步在干什么的进阶用户。我会把命令背后的账算清楚把踩过的坑一个个摆出来保证你看完能直接在机器上照着做不踩雷。1. Linux用户管理到底在管什么1.1 普通用户和root的分工逻辑Linux从一开始就是多用户操作系统设计的时候就默认了一台机器会有很多人用。既然是很多人用那就必须有身份的概念——我是谁、我能干什么、我能碰哪些文件。这个逻辑落到系统里就是用户和用户组。用户分为两类超级用户root和普通用户。root拥有一切权限可以删任何文件、改任何配置、杀任何进程。普通用户只能在被允许的范围内活动自己的家目录里可以随便折腾但出了这个范围就得看权限脸色。我见过不少新手图省事直接拿root干活所有操作都顶着root身份执行。短期看是爽了但风险极大。举个例子你在root下敲一条rm -rf /home/user1/手一抖多打个空格变成rm -rf /home/user1 /整个系统可能就没了。相比之下普通用户天然有权限边界误操作造成的破坏会被限制在一定范围内。所以正规的服务器管理规范里都明确要求日常操作尽量用普通用户需要提权时再用sudo。这就是为什么普通用户管理这么重要——它是Linux安全模型的基石也是你有没有专业素养的分水岭。创建普通用户不是给系统加个人那么简单你是在给谁能用这台机器、用到什么程度建立规则。1.2 用户信息到底存在哪里要管理用户首先得知道用户信息存在哪。Linux把用户信息分散在几个纯文本文件里这也是为什么你不需要任何数据库就能管理用户。第一个是/etc/passwd这个文件存的是用户的基本信息每行一个用户用冒号分成7个字段。我直接拿一台服务器上的真实内容来看$ cat /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin zhangsan:x:1000:1000:Zhang San:/home/zhangsan:/bin/bashzhangsan这一行从左到右分别是用户名、密码占位符真正的密码不在这里、UID用户ID、GID主组ID、注释信息、家目录、登录shell。你注意看daemon的shell是/usr/sbin/nologin这说明它不能拿来登录系统这类是系统账号。第二个是/etc/shadow这个文件存的是加密后的密码和密码策略。普通用户看不到内容只有root能读。字段包括密码哈希、上次修改时间、密码最短使用天数、最长使用天数、过期前警告天数、宽限期、账户过期时间。第三个是/etc/group存的是用户组信息。用户和组是多对多的关系一个用户只能有一个主组但可以加入多个附加组。我刚开始学Linux的时候觉得直接记命令就行了完全不理解为什么要读这三个文件。直到后来有一次排查登录问题发现某个用户明明存在却登录不了一查/etc/shadow里他的密码字段是!被锁定了。从那以后我才明白命令只是操作手段这三个文件才是用户管理的真相。2. 创建普通用户useradd的一整套操作2.1 useradd最基础的用法创建用户的命令是useradd这是Linux系统自带的底层命令。基础的用法很简单$ sudo useradd zhangsan这条命令执行完系统会做几件事在/etc/passwd里添加一行zhangsan的记录在/etc/shadow里添加对应的密码字段在/etc/group里添加一个与用户名同名的组然后给这个用户分配一个UID。但有一个坑我必须提醒你——通过这条命令创建的用户默认可能没有家目录也没有密码。你试着切换过去会直接让你输入密码而密码压根没设置过就会陷入一个用户存在却无法登录的尴尬状态。虽然有些发行版修改了默认配置让useradd也会创建家目录但不同系统行为不一样所以真正常用的创建命令是这样$ sudo useradd -m -s /bin/bash zhangsan-m参数表示创建家目录-s /bin/bash指定登录shell为bash。创建好之后还要设置密码$ sudo passwd zhangsan系统会提示你输入两次密码设置完成后这个用户才能真正登录使用。2.2 常用参数逐个拆解useradd的参数非常多但实际工作中常用的就这么几个。我把它们整理成一张表括号里是我在实际操作中的习惯用法参数作用实际使用建议-m自动创建家目录给普通用户创建账号时建议加上-s /bin/bash指定登录shell日常用户用bash就行-d /home/xxx指定家目录路径默认是/home/用户名少改-G sudo加入附加组给用户sudo权限时用-u 1005手动指定UID偶尔用于保持多台服务器UID一致-c 备注信息增加注释类似用户的姓名、工号建议写-e 2025-12-31设置账户过期时间临时账号很好用-r创建系统用户给服务创建专用账号时用我举一个实际场景。公司来了一个实习生需要给他开一台服务器的账号要求有sudo权限并且三个月后账号自动失效。我会这样创建$ sudo useradd -m -s /bin/bash -G sudo -c Intern 2025 -e 2025-09-30 wangwu $ sudo passwd wangwu这样一条命令加一个passwd就把身份、权限、时效全安排好了。三个月后wangwu的账号自动过期不用我费心去记着删。这里要特别说一下-G sudo。如果你不给用户加sudo组他就是一个彻底的普通用户能干的事非常有限。生产环境里我一般会给需要管理权的用户加sudo组但会提醒他们sudo操作前想清楚。2.3 密码策略和强制改密创建用户之后密码策略也是要管的。默认情况下密码不会过期用户设了密码就可以一直用这在安全要求高的环境里显然不行。chage命令就是来管密码时效的。比如设置一个用户90天后必须改密90天到期前7天开始提醒$ sudo chage -M 90 -W 7 zhangsan-M 90表示密码最长使用90天-W 7表示到期前7天开始警告。设置完可以用chage -l zhangsan查看当前用户的密码策略脚本化的方式一目了然。我自己的习惯是所有新建的普通用户第一件事就是改用chage设置密码过期策略尤其是那些长期不用的测试账号定期强制改密能避免很多安全风险。3. 查看与验证判断用户状态的几种方式3.1 从配置文件里读信息用户创建好了怎么确认他确实存在最原始的方法就是读文件$ cat /etc/passwd | grep zhangsan zhangsan:x:1001:1001::/home/zhangsan:/bin/bash命令行再优雅一点用getent命令查询$ getent passwd zhangsan zhangsan:x:1001:1001::/home/zhangsan:/bin/bashgetent是专门用来查询各种系统数据库的命令它比直接读文件更正规因为它是通过系统的数据库服务去查询的如果服务器用了LDAP、NIS之类的集中账号服务getent也能查到远端用户而直接cat /etc/passwd只能看到本机用户。判断一个用户能不能登录系统要看两个地方。一是/etc/passwd里最后的shell字段如果是nologin或/bin/false就不能登录。二是/etc/shadow里密码字段如果是!或*开头说明密码被锁定同样无法登录。3.2 用命令看实时状态如果你想知道某个用户当前在不在线、在干什么光看配置文件就不够了要用实时命令。id命令可以查看用户的UID、GID和所属组这是最常用的验证方式$ id zhangsan uid1001(zhangsan) gid1001(zhangsan) groups1001(zhangsan),27(sudo)输出里能看到这个用户的UID是1001主组是zhangsan附加组里有sudo说明他有sudo权限。who和w可以看当前谁登录了系统。who输出登录用户和IPw更详细还能看到每个用户正在执行的命令$ w 10:12:33 up 2:10, 2 users, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN IDLE JCPU PCPU WHAT zhangsan pts/0 192.168.1.100 09:55 0.00s 0.10s 0.02s wlast命令能看到登录历史用于审计某个用户过去一段时间的行为$ last zhangsan zhangsan pts/0 192.168.1.100 Wed Aug 20 22:09 still logged in3.3 从用户组维度查看归属用户和组是绑定在一起的查看用户所属的组除了用id还可以用groups命令$ groups zhangsan zhangsan : zhangsan sudo如果你想知道一个组里都有哪些用户直接从/etc/group里grep就行$ grep sudo /etc/group sudo:x:27:zhangsan,wangwu实际排查问题的时候从用户和组两个方向交叉查询是很常见的思路。有一次我遇到一个用户反映自己sudo不了一查groups发现他根本不在sudo组里问题一下就定位了。4. 删除普通用户userdel的正确姿势4.1 删除前先做三件事userdel是用来删除用户的命令但我强烈建议你在敲这条命令之前先做三件事查看该用户的登录状态、查看该用户运行中的进程、确认该用户的家目录里有没有需要保留的数据。查看登录状态$ who | grep zhangsan查看进程$ ps aux | grep zhangsan如果这个用户还在线或者有进程正在跑直接删会出各种幺蛾子。我踩过最深的坑就是用户还挂着运行中的Python任务我直接把它删了结果那个进程变成了运行在系统里的幽灵进程。所以我的删除流程是这样第一步锁定用户让他无法再登录$ sudo usermod -L zhangsan第二步确认进程处理完毕。如果有必要终止他的进程$ sudo pkill -u zhangsan第三步确认没有残留数据。这一步不是必须的但建议做。userdel -r会把家目录一起删了如果里面有重要数据就麻烦了。4.2 userdel -r到底做了什么当确认没问题之后执行$ sudo userdel -r zhangsan-r参数会删除用户的同时删除家目录和邮件池mail spool。我的建议是如果你确定不再需要这个用户的数据就加-r如果你不确定就先用不加-r的方式删用户家目录留在那里后续再手动处理。举个例子你删掉用户zhangsan后原来属于他的家目录/home/zhangsan如果没删目录的属主和属组会变成一个数字UID比如1001。这是Linux的正常现象——用户记录已经没了但文件和目录还保留着原来的UID信息。时间久了这个数字UID可能被新用户复用这就产生了权限串扰。我处理这类残留文件会先确认没用了再手动删掉$ sudo rm -rf /home/zhangsan删用户前先检查家目录数据这真的不是废话。我原来带过的实习生就干过一次狠的他要删一个离职员工的账号没多想直接userdel -r结果那员工电脑里有半年的项目文档全没了。虽然最后找回来了部分数据但整个过程相当狼狈。4.3 删除时遇到提示怎么办userdel在操作过程中可能会报一些错都是正常现象关键是你要能看懂它在说什么。如果提示用户正在被某个进程使用$ userdel: user zhangsan is currently used by process 1234意思就是用户zhangsan还有PID为1234的进程在跑此时用户其实删不掉或者删掉了进程还在。处理方式是先杀掉相关进程或者让用户自己退出登录然后再执行userdel。如果提示邮箱文件不存在之类的大多是无害的不用理会。如果用户有sudo权限删完用户之后还要检查一下sudoers配置里有没有对应的条目。尤其是那种单独写了/etc/sudoers.d/zhangsan文件的情况用户删了文件还在虽然不会影响系统运行但审计的时候会看到一条无效配置。5. 常见问题与排查技巧实录5.1 用户删不掉一直提示currently in use我自己遇到得最多的问题就是userdel报错说用户正在使用中。排查思路是这样先看是谁在用、在用什么$ w $ ps -u zhangsan如果是有交互式终端登录让用户主动退出登录或者强制踢掉他的终端会话。如果是后台进程占着要么等进程结束要么确认安全后终止进程。我的经验是尽量不要在用户在线时直接删除账号。就算你能删掉那个还连着线的会话也会变得非常奇怪——用户仍然可以执行他原本有权限的命令但因为账号已经在系统里不复存在他新建文件时文件属主会变成一个数字UID。后台任务倒是能运行但管理员想再关联到人就难了。更稳妥的操作顺序是先usermod -L锁定再踢下线确认没有进程了最后userdel -r。这条流程走完基本不会出问题。5.2 删除用户后目录属主变成了数字这个前面也提到了删掉用户但没删家目录家目录的属主显示为数字UID。来看个例子$ ls -ld /home/zhangsan drwxr-x--- 2 1001 1001 4096 Aug 20 10:20 /home/zhangsan原来显示的zhangsan zhangsan变成了1001 1001。这是因为内核只认UID不认用户名。用户名只是UID在用户层的翻译用户记录没了翻译也跟着没了。这本身不是什么技术错误但会造成一个隐患如果后来新建了一个用户系统自动分配UID时复用了1001那新用户就会继承这个家目录的权限。如果目录里还有敏感数据新用户就能直接访问。我的建议是如果确认数据不再需要就手动清理掉这些残留目录。如果数据需要保留给其他人那就先把数据拷贝到别的地方或者用chown重新指定给合适的所有者。5.3 锁定用户和删除密码字段的区别锁定用户我用的是usermod -L这个操作会在/etc/shadow的密码字段前加一个!符号让密码失效。它和直接删除密码字段是两回事。删除密码字段用的是passwd -d 用户名会让用户没有任何密码反而变成了一个危险性极高的状态——如果SSH配置允许空密码登录任何人都能登进去。所以千万别用passwd -d来禁用用户。我自己在公司内部维护账号时如果只是暂时不让某人登录就用usermod -L。如果要彻底清理账号才走userdel。锁定是不可逆的解锁也很方便$ sudo usermod -U zhangsan解锁后用户就可以正常登录了。这个区分在管理离职员工、休长假员工的账号时特别好用不用删掉再重新创建也不用担心UID变化导致文件属主错乱。5.4 用户管理避坑速查表我把这几年用户管理踩过的坑整理成一个速查表分享出来希望对你有用场景错误做法正确做法创建用户只执行useradd 用户名用-m -s /bin/bash并设置密码删除在线用户直接userdel先锁定再踢下线再删除禁用用户登录passwd -d 用户名用usermod -L锁定删除用户数据直接rm -rf /home/用户名确认不需要后再删除给用户加sudo手动编辑/etc/sudoers用usermod -G sudo 用户名用户密码过期不设置chage策略用chage -M 90 -W 7 用户名设置最后一列是我的个人偏好在不同团队环境里可能有自己的规范但底层思路一致每一步操作都要有明确目的且都留有回退余地。6. 实操总结与个人体会这套Linux用户管理的流程说白了不外乎创建、查看、删除六个字但每一个操作背后都有一堆值得深挖的细节我应该算是用血泪换来的经验。创建用户时多敲一个-m少敲一个-m效果天差地别。查看用户时从配置文件到实时状态再到登录历史每一条命令都是补全这个用户到底是怎么用的这块拼图。删除用户时先锁定、再清理、最后删除的处理节奏能帮你避开大部分肉眼可见的坑。我还记得有一次离职员工的账号没有及时清理他的一个数据库备份脚本还挂在服务器上每天凌晨自动跑因为删用户时没注意到cron任务导致一个外部存储一直写新数据亏了不少空间。从那以后我删用户之前都会仔细查一遍crontab$ crontab -l -u zhangsan如果该用户有定时任务可以先导出备份处理完再决定留着还是删除。所以在你准备userdel -r之前我真心建议你多花一分钟查一下他的crontab再看看ps aux里有没有他的进程。这些小事耽误不了你多少时间但能帮你避开那些让人崩溃的生产事故。

相关推荐

大模型能力评估误区:为什么单句测试不科学
大模型能力评估误区:为什么单句测试不科学

1. 这个“GPT6降智测试”根本不存在,但为什么人人都在传?“都说问一句就能测出 GPT6 降智,我试完更困惑了”——这句话最近在多个内容平台高频出现,语气带着调侃、怀疑,又隐隐透着一丝焦虑。它像一个未经验证的都市传说… · 2026/9/24 19:27:06

用Python拆解豆瓣评论区:情感分析与关键词提取实战
用Python拆解豆瓣评论区:情感分析与关键词提取实战

简介:基于Python的豆瓣电影评论情感分析与关键词提取WordCloud设计源码,面向对自然语言处理、文本挖掘或数据可视化感兴趣的Python学习者与研究者。项目覆盖评论数据预处理、情感分类模型训练、TF-IDF/TextRank关键词提取,最终生成词云图与情… · 2026/9/24 19:27:00

手机存储与运行内存清理:卡顿根治指南
手机存储与运行内存清理:卡顿根治指南

1. 为什么“清理手机”成了现代人的日常仪式?你有没有过这种体验:早上刚解锁手机,微信还没点开,屏幕就卡在启动动画上三秒;刷短视频时滑到第三条,画面突然定格,进度条原地打转;拍照想… · 2026/9/24 19:27:00

智能运维AI平台集成Istio服务网格的架构设计与落地实践
智能运维AI平台集成Istio服务网格的架构设计与落地实践

接手智能运维AI平台的架构工作之前,我预料到算法选型和数据管道不会太轻松,但没想到团队里争论最凶的,居然是要不要在这时候引入服务网格(Istio)。反对的理由很现实:Istio的复杂度有目共睹,平台… · 2026/9/24 20:57:29

CLM独立运行完整实战:从环境配置到结果可视化指南
CLM独立运行完整实战:从环境配置到结果可视化指南

1. 先说清楚:CLM独立运行到底解决什么问题,以及你学它值不值先说个我在超级计算机上花了整整一个学期才想明白的道理:CESM全耦合模式不适合用来学陆面过程,CLM独立运行才是入门和科研的正确姿势。CESM(Community Earth… · 2026/9/24 20:57:29

Unity异步文件拷贝工具类:分块读写与进度上报实战
Unity异步文件拷贝工具类:分块读写与进度上报实战

从实际项目角度出发,这种工具类几乎是 Unity 工程里绕不开的“基建”。无论是做热更新资源准备、存档导出、编辑器批处理,还是运行时把大型文件从托管目录搬到持久化目录,一个稳定、不卡主线程、能反馈进度、还能处理重命名和错误回调的拷贝工… · 2026/9/24 20:57:29

TwinCAT ADS句柄泄漏怎么治?从Sample11看C#上位机资源管理
TwinCAT ADS句柄泄漏怎么治?从Sample11看C#上位机资源管理

做倍福TwinCAT上位机开发的,几乎都绕不开ADS通讯。不管是老牌的.NET Framework还是后来的.NET Core/.NET 5,只要用C#跟PLC交换数据,TwinCAT.Ads这套库基本就是标配。Beckhoff官方提供了一整套ADS示例工程,从Sample01一路排下来&am… · 2026/9/24 20:57:23

大模型加速射频无源器件电磁仿真:架构、微调与实操指南
大模型加速射频无源器件电磁仿真:架构、微调与实操指南

1. 射频无源器件仿真为什么需要大模型介入射频无源器件的电磁仿真,做过的人都知道,它是个"慢工出细活"的领域。一个滤波器、一个功分器、一个耦合器,从建模到扫频再到优化收敛,动辄几个小时甚至几天。传统HFSS、COMSOL这… · 2026/9/24 20:57:23

Java Base64编码原理与实战:从URL安全到图片传输及乱码排查
Java Base64编码原理与实战:从URL安全到图片传输及乱码排查

前几天有个同事接了个第三方接口,对方文档里写着"对参数做Base64处理"。他下意识就把密码直接Base64编码后传了过去,结果对方秒拒。排查半天才发现,对方要的是URL安全的Base64变体,而他交的是标准版——加号在URL里被当… · 2026/9/24 20:57:23

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码