Linux安全能力提升路径_长期防护思维说明【指导】

发布时间 - 2025-12-31 00:00:00    点击率:
默认 sudo 配置不等于安全,因 %wheel ALL=(ALL) NOPASSWD: ALL 等宽松策略易被滥用;需最小化授权、限定命令路径、启用日志审计与 seccomp-bpf 等深度防护措施。

为什么默认的 sudo 配置不等于安全

很多管理员以为只要开了 sudo、禁了 root 登录,系统就算“加固”了。实际上,/etc/sudoers 里一行 %wheel ALL=(ALL) NOPASSWD: ALL 就足以让任意 wheel 成员绕过所有命令级约束,执行 sudo setcap 'cap_net_bind_service+ep' /usr/bin/python3 后直接监听 80 端口——这和拥有 root 权限几乎无异。

真正需要做的是最小化授权:

  • visudo -f /etc/sudoers.d/app-deploy 拆分策略,避免主文件被误改
  • 显式限定命令路径:deployer ALL=(www-data) /usr/bin/systemctl start nginx,禁用通配符和 shell 元字符
  • requirettyenv_reset,防止伪终端逃逸和环境变量污染
  • 启用 sudo_logfile 并轮转日志,否则攻击者删掉 /var/log/sudo.log 就没痕迹

seccomp-bpf 不是容器专属,普通服务也能用

很多人只在 Docker 的 --security-opt seccomp=... 里见过 seccomp-bpf,但 systemd 从 v245 起就支持为任意 service 单独加载过滤器。比如运行一个只读配置解析器,完全不需要 openat 以外的文件操作,更不该调用 execvesocket

实操步骤:

  • libseccomp 工具生成策略:scmp_bpf_compile -m 2 -o nginx-seccomp.bpf nginx-seccomp.json
  • 在 service 文件中添加:SystemCallFilter=@system-service @file-system ~@privileged ~@mount
  • 注意:@system-service 是白名单组,不是通配符;漏掉 clock_gettimegetrandom 可能导致进程启动失败
  • 测试时先加 SystemCallErrorNumber=EPERM,避免直接 kill 进程,方便抓 syscall 日志

SSH 登录后第一件事不是改密码,而是查 ~/.ssh/authorized_keysPAM 模块链

入侵者很少暴力破解密码,更多是复用已有密钥或通过 PAM 模块注入。一次看似正常的登录,背后可能是 auth [success=done] pam_exec.so /usr/local/bin/pam-backdoor.sh 在静默执行。

应立即检查:

  • grep -r "pam_exec\|pam_python" /etc/pam.d/ —— 非标准模块需人工审计
  • ssh-keygen -l -f ~/.ssh/authorized_keys 查看密钥指纹,比对上次备份
  • systemctl show sshd | grep -i "pam\|permit" 确认未启用 PermitRootLogin yesPasswordAuthentication yes
  • 检查 /etc/ssh/sshd_config 中的 AuthorizedKeysCommand,它可能动态拉取远程密钥列表

日志不是存着就行,journald 默认配置会丢关键事件

journalctl --since "2 hours ago" 查不到东西?大概率是 Storage=volatile(默认值),所有日志只存在内存里,重启即清空。更隐蔽的问题是 RateLimitIntervalSecRateLimitBurst 过严,导致暴力破解尝试被合并成一条 “Failed password for user”,掩盖真实攻击频次。

必须调整的几项:

  • 编辑 /etc/systemd/journald.conf,设 Storage=persistent 并确认 /var/log/journal/ 目录存在且属 root:systemd-journal
  • 加大速率限制:RateLimitIntervalSec=30sRateLimitBurst=10000,避免漏记高频登录失败
  • 启用字段过滤:ForwardToSyslog=yes + rsyslog 转发到远程服务器,本地日志仍可被删,远程不可逆
  • 定期用 journalctl --verify 检查日志完整性,返回非零码说明有篡改或损坏

长期防护不是堆工具,是持续验证每个环节是否真在生效——比如改完 sudoers 后,立刻用受限用户跑一遍预期命令;加了 seccomp 就用 strace -e trace=all 看实际调用是否被拦截;连上 SSH 后第一行命令永远是 sudo journalctl -n 20 --no-pager,而不是急着改配置。


# linux  # word  # python  # js  # json  # go  # docker  # nginx  # app  # 端口  # 工具  # ai  # 环境变量  # for  # volatile  #   # var  # 事件  # ssh  # 的是  # 不需要  # 已有  # 见过  # 很多人  # 开了  # 一遍  # 就行  # 就没  # 问题是 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  如何快速使用云服务器搭建个人网站?  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  利用JavaScript实现拖拽改变元素大小  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  如何快速搭建高效服务器建站系统?  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  Android okhttputils现在进度显示实例代码  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  java中使用zxing批量生成二维码立牌  Laravel如何与Pusher实现实时通信?(WebSocket示例)  如何在景安服务器上快速搭建个人网站?  如何快速建站并高效导出源代码?  JS弹性运动实现方法分析  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  如何用VPS主机快速搭建个人网站?  详解vue.js组件化开发实践  linux top下的 minerd 木马清除方法  图册素材网站设计制作软件,图册的导出方式有几种?  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  高防服务器租用指南:配置选择与快速部署攻略  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  Python文件操作最佳实践_稳定性说明【指导】  Laravel如何升级到最新版本?(升级指南和步骤)  实例解析Array和String方法  北京专业网站制作设计师招聘,北京白云观官方网站?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  动图在线制作网站有哪些,滑动动图图集怎么做?  iOS发送验证码倒计时应用  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  详解jQuery停止动画——stop()方法的使用  Laravel怎么为数据库表字段添加索引以优化查询  JavaScript Ajax实现异步通信  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  如何在云主机上快速搭建网站?  如何在宝塔面板中修改默认建站目录?  详解Oracle修改字段类型方法总结  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  长沙做网站要多少钱,长沙国安网络怎么样?  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】  网站建设整体流程解析,建站其实很容易!  如何在万网自助建站中设置域名及备案?