开始一个新员工的上手流程,或者要批量为一个项目组开账号,这件事看着不难,真正做起来,尤其是要把每一步都处理干净、不出纰漏,其实挺考验管理者对系统深度的理解。下面我们把创建和删除用户的整个过程拆解开,一点点过一遍。
创建用户的12个步骤
创建新用户,不是简单地敲个useradd就完事。一个滴水不漏的创建过程,大致可以分成下面这些环节。
1. 分配一个唯一的UID
第一步,先翻翻你们的系统策略文档,看有没有关于UID分配的硬性规定。通常的做法是取下一个可用的UID,但得确认几件事:它没有被系统保留,当前没有任何其他用户在用,甚至要留个心眼——确保它和远程服务器(比如挂载了NFS文件系统的那台机器)上的某个UID没有冲突。这个细节容易忽略,但一旦撞上了,权限问题会让人很头疼。
2. 选择一个默认的GID
同样的,先查策略文档对GID怎么要求。不仅要给用户定一个主要的组ID,还得评估一下,是否要把他添加进其他的用户组里去。这些组是本地的(在/etc/group里)还是远程的(比如NIS的netgroups映射),都要提前搞清楚。
3. 分配一个唯一的用户名
生成用户名也有讲究。看看公司有没有命名规范(比如“姓.名”或者“工号”这种)。确保拟定的用户名既不和系统保留名字冲突,也没有其他人在用。
4. 分配home目录空间
确认一下分配home目录的策略。不止要看当前磁盘空间够不够用,还得盘算一下,给用户留出多少合理的余量来存放个人文件。空间不够,后面天天出告警,那体验就很糟糕了。
5. 选择shell
策略文档里有没有对登录shell做出限定?确认设定的shell在各个相关的机器上都已经安装了,并且出现在/etc/shells这个文件里。否则用户登录时会被拒。
6. 创建/etc/passwd项
拿到前面几步敲定的参数,用vipw手动在/etc/passwd里加一行。虽然用任意文本编辑器都能改,但vipw的好处是自带文件锁,能防止多个管理员同时编辑把root项搞坏。加完之后要不就先锁定账户,要不就立刻设一个强密码。
7. 在必要时修改/etc/group和netgroups
编辑/etc/group文件,把用户加到那些不属于默认组的组里去。这一步很多人会忘记,导致用户无法访问共享资源。
8. 创建home目录
用mkdir命令在指定的路径下建立用户的home目录。
9. 复制配置文件
根据系统策略,把本地定制的环境配置、帮助文件和各种“点文件”(比如.bashrc、.profile)复制到用户的home目录下。这样才能保证用户开箱即用。
10. 设置配额
查看策略中对home目录和其他文件系统的配额要求。然后为每个相关的文件系统设置好软硬限制,别让个别用户把整个磁盘撑爆。
11. 设置所有权
用户要有权利读写自己的家目录和里面的文件。用chown -Rh来设置用户和组的所有权。加上-Rh选项会让命令递归处理所有子目录,而且最关键的是,它不会顺着符号链接去更改目标文件本身的所有权——这是非常有用的保护。
12. 测试
最后这一步特别值钱。花几分钟时间,以新用户的身份登录,检查一下他看到的环境、能访问的目录、脚本是否都像预期的那样工作。这时候多花一点时间,能省掉后面无数次的开单咨询。
删除用户的12个步骤
有创建,就有回收。当一个员工离职了,或者账户不再需要,干净彻底地删除是安全合规的重要一环。同样,也不是一条userdel -r就了事的。
下面是标准的删除流程:
1. 先锁定用户帐户
用passwd命令先把账户锁死,防止删除过程中有人用它做坏事。
2. 使用户所有文件失效
执行find / -user UID -xdev -exec {} chmod 000 \;。这里的-xdev会告诉find命令只搜索当前文件系统,不跨挂载点。而且默认情况下,find不会去跟着符号链接走,它只会改掉那个链接文件自身的权限。
3. 查看用户的状态
确认这个用户当前没有登录系统,也没有任何遗留的进程还在用他的身份在跑。
4. 备份账户信息和用户所属文件
用户的home目录、邮件文件等等,打包备份到可移动存储设备上。万一过两天上面要调阅数据,你有据可查。
5. 邮件转发处理
如果这个用户是公司邮箱的常用联系人,考虑设置邮件转发,把发给他的信转到他的主管或最终接替者那里。
6. 检查哪些文件系统为用户设置了配额
把所有涉及到该用户的配额记录都找出来,为后面的清理做准备。
7. 删除/etc/passwd和/etc/shadow中的项
用vipw删除对应的行。之后运行pwck来检查整个/etc/passwd文件的一致性,再用pwconv更新/etc/shadow文件的内容。这里有个细节点:一旦您从主邮件服务器上删除了/etc/passwd项,这个用户就再也没法接受本地邮件了。而他的UID和用户名虽然可以重新被新用户使用,但最好隔一段时间再释放,防止文件系统里残留的旧文件权限识别错误。
8. 从/etc/group中删除对用户名的引用
编辑组文件,去掉对已删除用户的引用。随后运行grpck来验证组文件的一致性。
9. 删除home目录及相关文件
把用户的个人目录和里面的一切清理干净。
10. 删除邮件目录
找到用户的邮件存储目录(通常在/var/spool/mail/下),一并移除。
11. 查看无主文件
用find / -xdev -nouser扫描文件系统,看看有没有因为删除用户而留下的无主文件。注意,不要自动批量删除——某些关键的系统文件有时恰好属于一个“不存在的用户”,这是历史原因或者一些特殊安装脚本导致的,直接清除会出大问题。
12. 删除用户配额
在文件系统上清除针对该用户的配额记录。
虽然可以用userdel -r一把梭,但在生产环境里,还是按上面这12个步骤手工来一遍最放心。自动化工具能省力,但很多边界条件和细节,最终还是得靠管理员自己确认。
关于UNIX用户管理的注意点
最后,分享几条在实战中被反复验证过的经验,可以作为日常运维的检查清单。
核心策略
提前把规则写清楚,比出了事再补救要高明得多。所有管理员都应该熟悉策略,并且知道在什么情况下可以灵活处理。要清晰地定义谁有资格申请账户、用户名怎么生成、账户怎么发放和回收。
用户名与UID
强制做到“一人一户”,不允许多人共享或一人多号(除非有明确的业务理由)。小于100的UID作为系统账户保留,别分配给普通员工。保证UID和用户名在整个组织范围内都是唯一的。定期运行pwck来检视/etc/passwd的健康状态。
组名与GID
保证组名和GID都唯一。为了避免与某些软件包的默认配置冲突,建议GID尽可能控制在60000以内。另外,本地系统通常对每个用户在组数量上有上限(比如最多16个),别让用户超出这个限制。定期运行grpck,特别是如果系统提供了gpasswd这类工具时。
账户锁定
对登录失败的尝试做出强制锁定。在/etc/shadow文件的密码散列值字段里,使用“*”或“!”等特殊字符来标识账户已被锁定。为了更清晰,个别系统也提倡使用“*LK*”这样的短语。不过,技术上空空密码散列值字段虽然能做,但千万不要这么干,它会给安全留下巨大的缺口。如果需要彻底禁止shell登录,把用户登录shell指定为/dev/null或者/bin/true、/bin/false,是标准的做法。
