核心是查“谁在跑、以什么身份跑、有没有越权”,形成发现→定位→修正→固化的闭环,重点盯服务高权限低信任、监听地址暴露、配置文件权限过宽三类风险。

直接对所有系统服务做权限扫描,核心是查“谁在跑、以什么身份跑、有没有越权”,不是扫完就完事,而是要形成闭环:发现→定位→修正→固化。重点盯三类风险——服务用高权限干低信任活、监听地址暴露、配置文件权限过宽。
一、确认服务真实运行身份
别只信配置文件,要看进程实际用户。Linux下执行:
- ps aux --forest | grep -E "(sshd|nginx|mysqld|redis|httpd)" —— 查看父进程与子进程的UID,确认是否以root启动
- systemctl show servicename | grep User= —— 查看服务单元定义中声明的运行用户(但可能被覆盖)
- sudo ls -l /proc/$(pgrep -f "nginx")/exe —— 进入进程命名空间验证二进制归属与权限
Windows下可用 Get-WmiObject Win32_Service | Where-Object {$_.StartMode -eq "Auto"} | Select Name,StartName 批量导出服务登录账户,重点关注以LocalSystem或Administrator运行的服务。
二、检查服务监听与网络暴露面
服务若绑定0.0.0.0或::,又没做访问控制,等于把门敞开:
- netstat -tuln | grep -E ":22|:80|:443|:3306|:6379" —— 快速识别监听IP和端口
- ss -tulnp | awk '{print $5,$7}' | grep -v "127.0.0.1\|::1" —— 排除本地回环,聚焦外网暴露项
- 对MySQL/PostgreSQL:检查
bind-address是否为127.0.0.1或内网地址;对Redis:确认bind未设为0.0.0.0且启用了requirepass
三、核查服务配置文件权限
配置文件若可被普通用户读写,等于交出控制权:
- 执行脚本快速扫描高危路径:
find /etc/{ssh,nginx,apache2,mysql,redis} -type f \( -perm -o+r -o -perm -g+w \) 2>/dev/null - 重点加固项:
•/etc/ssh/sshd_config→ chmod 600
•/etc/nginx/nginx.conf→ chmod 644,属主root:root
•/etc/mysql/my.cnf→ chmod 600,禁止group/other读
四、自动化合规验证与修复
靠人工易漏,建议嵌入周期性机制:
- Linux用OpenSCAP扫描CIS基线:
sudo oscap xccdf eval --profile xccdf_org.ssgproject.content_profile_cis --results results.xml --oval-results /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml
结果中搜索service_.*_config_file_permissions类规则 - Windows用PowerShell批量审计:
Get-Service | Where-Object {$_.Status -eq "Running"} | ForEach-Object { Get-Acl "HKLM:\SYSTEM\CurrentControlSet\Services\$($_.Name)" } - 修复后立即固化:将
chmod/chown命令写入Ansible Playbook或systemd drop-in文件,在服务重启时自动重置权限










