1. Linux用户与权限管理核心概念在Linux系统中用户和权限管理是系统安全的基础架构。每次当我给新入职的运维工程师培训时都会强调这个知识点的重要性——它直接关系到系统能否稳定运行数据是否安全可控。Linux采用多用户分时操作系统设计这意味着每个用户拥有独立的UID用户ID和GID组ID所有进程都归属于特定用户文件/目录通过权限位控制访问规则特殊权限位如SUID可以实现临时提权关键提示永远不要用root用户执行常规操作这是我见过新手最常犯的错误也是90%安全事故的根源。2. 用户账户全生命周期管理2.1 用户创建与基础配置创建用户的正确姿势应该是sudo useradd -m -s /bin/bash -c 开发工程师 dev_user这个命令包含几个关键参数-m自动创建用户家目录/home/dev_user-s指定登录shell建议用/bin/bash-c添加用户描述信息创建后需要立即设置密码sudo passwd dev_user我强烈建议密码复杂度至少包含12位以上长度大小写字母混合数字和特殊符号避免使用字典单词2.2 用户属性深度调优/etc/passwd文件中存储着用户核心属性格式为username:x:UID:GID:comment:homedir:shell需要特别关注的几个配置文件/etc/login.defs密码过期策略/etc/default/useradd默认创建参数/etc/skel/新用户模板文件修改用户属性的正确方式sudo usermod -aG developers dev_user # 附加到补充组 sudo chage -M 90 dev_user # 设置密码90天过期2.3 用户删除与遗留处理删除用户时常见的坑sudo userdel -r dev_user # -r参数会删除家目录和邮件池但这样操作可能遗漏cron定时任务检查/var/spool/cron/正在运行的进程用pgrep -u检查其他目录下的个人文件建议先find / -user dev_user3. 组管理实战技巧3.1 组的基本操作创建工程组并添加成员sudo groupadd engineers sudo gpasswd -a user1 engineers sudo gpasswd -a user2 engineers查看组关系的几种方式groups user1 # 查看用户所属组 getent group engineers # 查看组内成员3.2 组权限的最佳实践我总结的组使用原则功能组按角色划分如devops、dba项目组按业务划分如projectA临时组为特定任务创建记得事后清理重要配置文件/etc/group组定义文件/etc/gshadow组密码文件很少用4. 文件权限深度解析4.1 权限位本质解读通过ls -l看到的权限字符串-rwxr-xr-- 1 owner group 4096 Jun 10 10:00 file拆解说明第1位文件类型-普通文件d目录2-4位所有者权限rwx5-7位组权限r-x8-10位其他用户权限r--权限数字表示法r4, w2, x1例如rwxr-xr--就是7544.2 特殊权限位详解SUIDSet User ID表现形式s出现在所有者x位如rwsr-xr-x作用执行时临时获取所有者权限典型应用/usr/bin/passwdSGIDSet Group ID对目录设置时新建文件自动继承目录的组对可执行文件设置时运行时获得文件所属组权限Sticky Bit表现形式t出现在其他用户x位如rwxrwxrwt作用只有文件所有者能删除/tmp下的文件设置方法chmod us file # 设置SUID chmod gs dir # 设置SGID chmod t /tmp # 设置Sticky Bit5. ACL高级权限控制当基础权限不够时就需要ACL访问控制列表5.1 ACL基础操作查看ACLgetfacl /data/project设置ACLsetfacl -m u:testuser:rwx /data/project setfacl -m g:developers:rx /data/project常用选项-R递归设置-d默认ACL影响后续新建文件-b删除所有ACL条目5.2 ACL实战案例实现开发团队协作目录创建共享目录mkdir /data/team_project chown :developers /data/team_project chmod 2775 /data/team_project # 设置SGID配置ACLsetfacl -d -m g:developers:rwx /data/team_project setfacl -m u:scmuser:r-x /data/team_project这样配置后所有新文件自动属于developers组组内成员有完全控制权SCM用户只有读和执行权限6. sudo权限精细化管理6.1 sudo基础配置/etc/sudoers文件格式user host(runas) commands %group host(runas) commands安全编辑方法sudo visudo6.2 生产环境sudo策略我推荐的权限分配原则按角色分配最小必要权限限制危险命令如rm、dd记录所有sudo操作配置Defaults logfile示例配置%developers ALL(ALL) NOPASSWD: /usr/bin/systemctl restart nginx %ops ALL(ALL) NOPASSWD: /usr/bin/docker * User_Alias ADMINS user1, user2 ADMINS ALL(ALL) ALL7. 用户环境隔离方案7.1 家目录权限控制安全的家目录配置chmod 750 /home/* find /home -type d -exec chmod 700 {}/.ssh \; find /home -name *.ssh -exec chmod 600 {} \;7.2 使用chroot监狱创建受限环境mkdir -p /chroot/user1/{bin,lib,lib64} cp /bin/{bash,ls} /chroot/user1/bin/ ldd /bin/bash | awk {print $3} | xargs -I {} cp {} /chroot/user1/lib/8. 审计与监控8.1 关键日志文件/var/log/auth.log认证日志/var/log/secureRedHat系认证日志/var/log/sudo.logsudo操作记录8.2 审计工具配置安装auditdsudo apt install auditd监控用户操作sudo auditctl -w /etc/passwd -p wa -k passwd_change sudo auditctl -w /etc/shadow -p wa -k shadow_change查看审计日志ausearch -k passwd_change9. 常见问题排查9.1 权限拒绝问题典型错误bash: ./script: Permission denied排查步骤ls -l检查文件权限groups查看用户所属组getfacl检查ACLmount检查nosuid/noexec挂载选项9.2 用户无法登录检查清单密码是否过期chage -l账户是否锁定passwd -Sshell是否正确/etc/passwdPAM限制/etc/security/access.conf10. 安全加固建议根据多年运维经验我总结的必做安全措施密码策略修改/etc/login.defs安装libpam-cracklib配置密码复杂度要求账户锁定sudo pam_tally2 --usertestuser --resetSSH加固禁用root登录使用密钥认证限制登录IP定期审计sudo find / -nouser -o -nogroup # 查找孤儿文件 sudo lastlog # 检查最近登录在实施权限管理时我始终坚持最小权限原则。给用户刚好够用的权限既保证工作效率又最大限度降低安全风险。记住权限管理不是一劳永逸的工作需要定期review和调整。