服务器用户管理,本质上就两件事:把每个运维人员的账号做成独立身份凭证,再把权限精确控制到“够用即止”的边界上。这两件事做扎实,比任何安全软件都管用。
服务器权限配置最基本的三个习惯
我见过太多团队管理服务器用户的方式,就是一个root密码轮流传,这个习惯不改,后面所有配置都是白搭,服务器权限配置的基础,其实是管理习惯的养成。
第一,严禁共享root账号。 这就像办公室大门只有一把钥匙,谁丢了都说不清,正确做法是每个维护人员一个独立账号,谁登录、敲了什么命令,全部记录在案,事后可追溯。
第二,权限分配遵循最小化原则。 绝大多数日常操作根本不需要root权限,查看日志、重启服务、部署代码,用普通用户加sudo授权足以搞定,我见过很多团队实施服务器用户权限配置方案时,第一步就是把所有人从root组踢出去,这一步做完,安全性直接提升一个等级。
第三,程序进程和服务账号独立运行。 Nginx、MySQL、Redis,每类服务单独建一个低权限的系统用户,禁止使用root跑任何服务进程,即便是被入侵渗透,攻击者拿到的也只是受限权限,无法直接控制整个服务器。
服务器用户权限配置的实操路径
下面说点能直接操作的,假设这是一台全新的Linux服务器,我们在上面完成一整套用户配置流程。
创建普通运维账号
使用adduser命令创建用户时,系统会自动生成home目录和默认邮件目录,比useradd更适合新手理解:
adduser zhangsan passwd zhangsan
在CentOS/RHEL系和一些Debian版本上,需要手动指定shell和home目录:
useradd -m -d /home/zhangsan -s /bin/bash zhangsan echo 'zhangsan:这里写密码' | chpasswd
创建完成后务必测试一次。用失败的安全壳层(SSH)登录新账号,确认能正常登录再往下走,这一步能避免搞半天结果用户根本连不上服务器的尴尬。
把用户加入sudo组
大多数发行版中,wheel组或者sudo组内的用户天然拥有sudo提权资格,执行:
usermod -aG wheel zhangsan # CentOS/RHEL系 usermod -aG sudo zhangsan # Debian/Ubuntu系
然后用zhangsan账号执行sudo whoami,如果输出root,说明sudo权限生效了。
配置sudo免密或限权策略
每次输密码确实麻烦,但直接改成NOPASSWD:ALL就完全放开了,普通用户和root没区别,比较稳妥折中的方式是只对指定命令放开免密,编辑/etc/sudoers文件时用visudo命令,不要直接改:
# 允许zhangsan无密码重启nginx和php-fpm zhangsan ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/systemctl restart php-fpm
这里就不展开用户sudo权限配置的所有细节,但核心思路是:能限制到单条命令就不放开整个目录,能限制到指定端口就不放开所有端口。
禁用root远程登录
在/etc/ssh/sshd_config中把PermitRootLogin改为no,执行systemctl reload sshd或systemctl restart sshd使配置生效,
务必保留一个已开着的SSH会话再尝试连接新会话,确认root账号确实不能远程登录,改坏配置是运维最常翻车的翻车点,保底方式防身不可少。
linux用户管理命令的日常巡检清单
现在我每天到公司第一件事,不是看邮箱,而是先过一遍服务器上的用户状态,linux用户管理命令体系本身不复杂,但需要形成习惯,以下是我的自用清单位:
检查当前在线用户:
who w lastlog
lastlog能看出每个账号上次登录时间和来源IP,那些几个月没登录的老账号,就得考虑是不是该清理掉。
检查用户密码有效期:
chage -l zhangsan
查看用户所属组和权限:
groups zhangsan id zhangsan
查看登录失败记录:
lastb
我的习惯是每周五下午巡检一次,把异常登录记录和长期未使用的账号整理成清单,该锁的锁,该删的删,月月如此,半年下来服务器里连个可疑的临时账号都留不住。
云服务器用户管理的安全加固
提到云服务器,就要多讲一步,云服务器的公网IP是互联网上公开的,IP暴露在全球扫描器的攻击范围内,密码爆破每时每刻都在发生。
改用SSH密钥登录
云服务器用户管理的第一个加固动作,就是关掉密码登录,强制密钥认证,具体操作两步走:
在本地生成密钥对:
ssh-keygen -t ed25519 -C "zhangsan@example.com"
把公钥复制到服务器上:
ssh-copy-id -i ~/.ssh/id_ed25519.pub zhangsan@服务器IP
然后在服务器上编辑/etc/ssh/sshd_config,找到PasswordAuthentication改为no,重启SSH服务,此后云服务器上任何账号都只能通过密钥登录,密码爆破直接失效,业内专家指出,这样配置之后,暴力破解尝试基本被杜绝,剩下的只是扫描器在门口空撞。
锁定登录失败次数
在/etc/pam.d/sshd或使用fail2ban工具设置失败锁定策略。连续失败3次即锁定10分钟,能有效延缓恶意爆破,很多云厂商的控制台自带安全组规则,可以设置入方向只允许公司公网IP访问22端口,效果也很好。
定期审查sudo授权记录
很多服务器被入侵都不是漏洞攻破的,而是sudo权限被滥用,每次执行sudo -l查看当前用户有哪些sudo权限,软件装多了之后,这些权限会越积越多,需要定期收敛,建议建立一个服务器用户权限配置台账,记录每个账号的托管权限、sudo授权范围、密钥指纹、归属人和联系方式谁停机离职,照着台账清算即可。
用户账号的停产和离职清理流程
做服务器运维的都知道,离职交接的混乱程度和公司规模成正比,刚才还在兼职的同事突然说不在公司干了,但手里还有root密码和SSH密钥这种情况并不少见。
规整化的处理流程是:先锁账号、再清密钥、最后改相关服务密码和token。
锁定账号:
usermod -L zhangsan
踢掉该用户的所有在线会话:
pkill -u zhangsan
清理其授权密钥:
rm /home/zhangsan/.ssh/authorized_keys
再顺手删除或接管他的cron定时任务:
crontab -u zhangsan -r
这四步走完,人虽然还在公司,但已经碰不到任何服务器了。把用户清理做成标准化流程,不管多紧急的离职,都能按步骤推进,不遗漏账。
常见问题解答
问:服务器添加新用户后登录报错“User not in sudoers”,怎么解决?
答:执行usermod -aG wheel 用户名(RHEL/CentOS系)或usermod -aG sudo 用户名(Debian/Ubuntu系),将用户加入对应管理组,如果仍不行,直接用visudo编辑/etc/sudoers,确认该用户名或组名规则存在且未被注释。
问:服务器用户忘记密码了,如何重置?
答:使用root账号执行passwd 用户名,输入两次新密码即可,若已禁用root远程登录且本地有sudo权限,可先以普通用户登录,再执行sudo passwd 用户名,需要注意的是,修改密码不会影响已有SSH密钥的有效性,仅密码登录方式会立即变更。
问:如何查看服务器上有哪些用户?
答:执行cat /etc/passwd | grep '/bin/bash'可列出所有可登录的普通用户账号;执行cat /etc/shadow可查看各个账号密码策略详情和后四位权限信息参考值,其中shadow文件权限为root专用,普通用户无权限读取。
最后一件事:服务器用户管理的核心结论就是闭环创建账号就走最小权限,使用账号就有操作审计,离职注销就及时回收,形成用户从开号到销号的完整生命周期管理。 无论多复杂的云环境还是传统的物理机,这套闭环一直适用,其他所有安全配置不过是在这之上的加固补充。