
去年装一套存储设备,厂商派了两个人来,要登三台服务器改多路径配置。当时图省事,把一台跳板机的账号密码写在纸上给了他们,说好用两天。设备调完,人走了,密码没人改,那个账号一直留到半年后做账号清理才翻出来。
这事想起来后怕。那台跳板机能连内网十二台机器,账号是共用的,日志里只有"某某账号登录过",看不出是谁。后来我们把外协接入改成临时授权,进门要申请,出门自动回收。这篇文章写清楚授权策略怎么配、流程卡在哪几道、跑起来之后有哪些坑。
纸条这种载体的问题是没法收回。给出去的那一刻,密码就脱离了控制,对方抄在手机里、存在记事本里,你都不知道。
更麻烦的是共用账号。三个人用同一个账号登录,操作日志里只能看到账号名,看不到具体是谁。真出了误操作,追责追不到人,只能整组担。
我们把需求拆成三条。一是时间:授权只在约定窗口内有效,过了就登不上,不依赖人记得去关。二是范围:只能连指定的几台机器,用指定的系统账号,不能顺手连别的。
三是动作:能执行什么命令有边界,改配置可以,删库不行。三条里时间能即时做到,范围次之,动作难度高,但没有它,前两条的意义会打折。
有人以为上了堡垒机就安全了。实际堡垒机解决的是"统一入口和录屏",账号怎么给、给多久、给到哪,还是策略层面的事。
我见过堡垒机上开了几十个长期有效的临时账号,跟没上一样。工具提供能力,策略决定效果。这一层想不明白,买什么设备都是摆设。
还有一层常被忽略:外协进入的不只是服务器,还有网络设备、数据库、存储管理界面。只把服务器收进堡垒机,网络设备还在用本地账号,等于侧门一直开着。资产台账要按设备类型一起纳管,不能只列服务器。
时间窗写绝对时间,不写"两天"。写"从某日九点起四小时",比写"两天有效"清楚,也便于审批人判断这段时间是否覆盖作业窗口。
主机范围按主机组给,不按单台给。主机组在资产台账里维护,加机器改台账,不改策略。这么做的好处是策略数量可控,一百台机器的环境里,主机组通常不超过十个。
命令控制有两种做法:黑名单禁危险命令,白名单只放允许的命令。黑名单看着省事,实际挡不住变体,改个路径、加个管道就绕过去了。
我们选白名单,代价是前期要梳理。做法是先放开一周,把实际执行的命令按前缀归类,取前二十条做成白名单,跑两周再补。录屏同时开着,白名单之外的命令直接拒绝,拒绝记录也进审计。
下面的配置是实际在用的模板,一份授权一个文件,由审批系统生成,落到堡垒机侧执行。字段不多,但每个都有对应的检查点。
grant:
id: tmp-20260412-07
subject: vendor_xie
ticket: CHG-20418
window:
start: 2026-04-12T09:00:00+08:00
hours: 4
targets:
- group: db-staging
accounts: [opsdba]
protocol: ssh
- group: app-node-3
accounts: [deploy]
command_policy:
mode: whitelist
allow:
- "systemctl status *"
- "systemctl restart app-*"
- "tail -n 200 /var/log/app/*.log"
- "df -h"
deny:
- "rm -rf *"
- "passwd *"
controls:
session_record: true
file_transfer: upload_only
max_sessions: 1
idle_timeout_min: 10
on_expire:
kill_sessions: true
disable_account: true
notify: [oncall, owner]on_expire 这一段是重点。授权到期不只是"登不上",还要把已经登录的会话踢掉,把账号置为禁用,再通知值班和申请人。只做到期时间戳,会话可以一直挂着,等于没到期。
把多份授权写在一个文件里,回收的时候容易改错行。一份一个文件,回收就是删文件加禁用账号,动作单一,出错概率低。
文件按授权编号命名,编号里带日期。这样翻目录就知道哪些是过期的,不用打开看内容。命名规范这种事听着琐碎,真出事的时候省时间。
没有工单号不批。工单号是变更管理的锚点,出了事能追到是哪次变更、谁提的、影响哪些系统。
我们试过让申请人手填"作业内容",结果十张单有八张写"设备调试"。后来改成必选变更单,从变更系统里带过来,内容自然就有了。
审批走两级:申请人的接口人确认作业必要性,资产负责人确认范围合理。两级都过,系统才生成凭证。
凭证不发密码,发一次性登录链接或者临时密钥,四小时有效,用过一次即失效。这样即使凭证被转发,也只能用一次,而且能定位到使用时间。
到期回收这一层,我们挂在搭贝的定时任务里跑,每小时扫一次。扫描做三件事:关会话、禁账号、比对实际登录记录和授权范围,有超出范围的登录单独报出来。
残留检查比回收更容易被忽略。常见残留有三种:账号禁用了但公钥还在,主机组的成员关系和申请时不一致,上传的文件留在目标机上没清。三种都要在回收后一小时内核对完。
授权到期不等于作业完成。我们要求外协的人和接口人各确认一次:外协确认作业做完、临时配置已回退;接口人确认业务验证通过。
两次确认都完成,工单才能关。这个动作把"人走了但配置还挂在那"这类问题堵住了。上个月就有一例,外协改完多路径没回退测试参数,接口人确认时发现了,当场改回来。
起初担心流程拖慢交付,实测下来首次接入多花二十分钟,后续同类作业复用模板,五分钟能提完。
真正的等待在审批,不在技术。为了压这段时间,我们把常用作业做成模板,模板里的主机范围和命令白名单提前审过,申请时只需要填时间窗和工单号,审批人看到的是"复用已审模板",点一下就过。
卡点一是命令白名单太严,外协的人干活干到一半被拒。解决办法是申请时勾选"允许临时放开",放开要二次审批,记录单独标记。
卡点二是文件传输。很多作业要传安装包,我们只开上传不开下载,避免把数据带走。上传的文件落在隔离目录,作业结束自动清理。
卡点三是时区。时间窗写带时区的时间,服务器时区不一致时,不带时区的写法会差几个小时。这个坑我们踩过一次,授权早了四小时生效,虽然没出事,但流程上算事故。
审计查三样:谁进了哪台机器、执行了什么、带走了什么。三样里前两样靠会话记录,第三样靠文件传输日志。
我每月抽十条授权看一遍,重点看两处:白名单之外被拒的命令有哪些,说明作业需求没被模板覆盖;实际在线时长和申请时长差多少,差得多的说明申请时估得太随意。
抽查之外还有一条季度动作:把过去一个季度没用到的授权模板清掉。模板越攒越多,新人申请时看着一屏选项容易选错,而选错模板等于给错范围。清理比新增更能减少事故。
问:临时授权和长期账号能共存吗?
答:能,但要分场景。内部运维用长期账号加多因素认证,外协和临时作业走临时授权。共存的风险是边界模糊,有人图省事把临时作业挂到长期账号上,所以要在制度上明确哪类作业走哪条路,系统层面则限制长期账号的登录来源。
问:命令白名单拦不住脚本怎么办?
答:白名单按命令前缀匹配,脚本内部调用的命令确实拦不住。补的办法是限制解释器,禁止直接调用 shell 和脚本解释器,只允许执行登记过的脚本路径。更强的做法是把作业做成平台上的固定任务,人不登机器,只触发任务。
问:会话录屏存多久合适?
答:看合规要求和存储成本,常见做法是六个月到一年。录屏文件按授权编号归档,和工单关联,查的时候从工单进,不从文件名找。存储上做冷热分层,三个月内的在线可查,更早的转归档。
问:外协人员自带电脑怎么接?
答:不让自带设备直连内网。做法是提供云桌面或者受控的跳板环境,作业在受控环境里做,本地只看到画面。文件进出都走受控通道,剪贴板按需开放。这条比命令白名单更难落地,但它是防数据带走的有效手段。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。