2023-04-15 12:10:49
Linux最小权限原则实践指南
最小权限原则的核心是确保用户、进程或程序仅拥有完成其任务所必需的最低权限,从而降低安全风险,防止误操作或恶意攻击扩大影响范围。以下是具体实践方法:
一、用户权限管理创建独立账户
为不同角色(如管理员、开发者、普通用户)创建独立账户,避免多人共用root或同一账户。
普通用户默认不应具备sudo权限,需通过visudo明确授权特定命令(如/sbin/service重启服务)。
专用服务账户
使用useradd -s /usr/sbin/nologin创建禁止登录的服务账户(如mysql、nginx)。
定期审查/etc/passwd和/etc/shadow,禁用或删除未使用的账户。
限制sudo权限
通过visudo编辑/etc/sudoers文件,按需分配命令权限(例如仅允许重启服务,禁止修改系统配置)。
启用日志审计(Defaults logfile="/var/log/sudo.log")记录所有sudo操作。
合理设置文件权限
敏感配置文件(如/etc/ssh/sshd_config)权限设为600(仅所有者可读写)。
目录权限设为750(所有者可读写执行,组用户可读执行,其他用户无权限)。
禁用全局可写权限(如chmod o-w /path),尤其是/tmp以外的目录。
明确文件归属
使用chown确保文件归属正确,避免多个用户共用所有权(如服务文件归专用账户所有)。
非root用户运行服务
Web服务器(如Nginx、Apache)配置为专用用户(如www-data)运行。
数据库服务(如MySQL)使用独立账户启动,限制其对系统其他部分的访问。
通过systemd指定运行身份
在服务单元文件(如/etc/systemd/system/nginx.service)中添加:User=www-dataGroup=www-data
执行systemctl daemon-reload后重启服务。
替代root密码共享
通过visudo分配可控提权权限,例如:%admin ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
禁止直接使用ALL=(ALL) ALL的宽泛授权。
记录与审计
启用Defaults log_input, log_output记录sudo执行的命令及输出。
定期检查/var/log/sudo.log,分析异常操作。
定期审查权限
检查/etc/sudoers、/etc/passwd和文件权限,移除不必要的授权或账户。
自动化检查工具
AIDE:配置文件完整性检查,检测未授权修改。
auditd:记录文件访问、权限变更等事件,规则示例:-w /etc/passwd -p wa -k passwd_changes
日志监控
结合rsyslog或ELK集中管理日志,实时分析权限异常。
通过严格执行上述方法,可显著提升Linux系统的安全性,降低内部误操作和外部攻击的风险。