服务器和数据密码都是写在代码的配置文件里的,开发人员离职需要重新修改一遍,比较麻烦,有没有比较好的解决方案不需要修改?

不修改.
他离职了又连不上, 有啥好改的

线上配置脱离代码库呗

#2 都在阿里云上

没有堡垒机么,加一层堡垒机可解

#4 没懂你意思, 在阿里云咋了

不修改吧
发现职场氛围越好的公司对这些越不在意(可能我待的是小公司的问题)

服务器的数据库密码都是绑定在内网的,仅允许内网 VPN 登陆

数据库哪里都可以连?没有白名单吗?

一般员工都不知道服务器以及数据库密码,通过 ssh 免密或者堡垒机登陆,离职后直接把员工对应的密钥或者账号禁用就行
跟氛围没什么关系,虽然很少有人会搞前公司,但要真遇上了就损失很大

config.cfg,env

限制线上数据库的接入 IP,阿里云的数据库有白名单可以设置的。你们公司不会是外网直接就能连生产数据库吧?阿里云有 DMS 。

线上数据库限制为只能生产服务器连,这个问题就解决了。

居然能直连数据库,我们连运维都进不去,只有 DBA

#12 应该是没有设置,我在家也可以连,阿里云账户都是领导管理的,就是每次员工离职 都要修改一遍,所有挺烦的 就是想知道大家都是咋做的

楼主问这个问题,想必是个小公司了,可以按回复里的方案改造一下,不然以后有人离职就改下密码,多麻烦。

1 、服务器统一使用堡垒机控制员工登入,阿里云有现成方案,支持 2FA,安全性很好。有员工离职,移除对应密钥即可。
2 、数据库使用白名单关闭外网接入,限制为仅生产服务器接入。员工需要增删改查,使用阿里云的 DMS 。这样就不必考虑修改密码的问题了。

登录应该用令牌吧,每个员工一个令牌,离职了就把令牌失效就可以了

阿里云吗..
小公司大多数都是直接密码给了员工 自己登陆不是
其实阿里云有很多管理操作系统的 比如 DMS ip 限制 白名单 等等 如果你都不会用可以做个堡垒机
然后来一个人给个密钥 人走了删了就行..

开发为什么会有生产环境密码?

IP 白名单

不能远程直连就行了,密码万年不变,还很简单。数据库的安全还真不能靠密码。

个人感觉 最好的还是 全部 kerberos+ldap 吧 freeipa

我这里也是不改,毕竟有国法和保密协议🤣🤣

我们的方案很粗糙很简单,除了主要几个人其他人不知道生产服务器密码,测试服务器密码就知道了。

生产配置文件不在 git 里存在 jenkins 里,
每次发版时候有权限那几个人肉眼核对配置文件的修改,然后去 jenkins 里修改对应生产配置文件。

搭个堡垒机,限制连接 ip,完事

常见的做法是,人是不可以直接掌握密码的,掌握的只是权限,人走了取消权限即可,

比如我们有个操作平台 /堡垒机,你的操作都是登录平台 /主机来操作,这也是常说的“白屏化”。

楼主公司应该没配置好开发和管理规范吧。 要不就加一层代理才可以链接服务器。要么一个一个改。然后参考上面大佬们的方法。以后就可以一劳永逸了。

如果经常性有员工离职的话,可以给服务器设置用户组,给数据库设置用户组。比如在职人员的用户组有哪些权限,离职后把该权限撤销即可。

写个配置文件应该不难吧

一般这些库都是内网环境访问的,都得挂 vpn,离职了就把 vpn 账号删除就行

数据库开公网端口真不怕出事啊?改成内网访问就好了,就不用关心密码的问题了。然后记得配 VPC 保证只有自己的产品才能互相访问

你们数据库还能从外网直连?

把配置文件抽出来放在服务器里面,部署的时候进行替换就好了

数据库开公网端口,看样子你们是没被勒索软件盯上过

这么好的表现机会就这么浪费了?一顿权限操作然后周报、绩效总结里猛夸不就漂漂亮亮的。

小公司都是这么干的,数据库账号密码写在项目配置文件里面,加上用的云服务,公网也可以访问很正常。

通常来说,为了安全,这些密码一般定期会修改一次,比如 3 个月一次。

再者,不改也没事,谁会离职了还想着搞破坏,那得多大仇啊,平时多处理好员工关系吧!这种损人不利己的事情,搞不好还要坐牢的事情不到万不得已没人敢干。

堡垒机这种办法确实是个好办法,但是也得花点时间去弄,我觉得吧,小公司就用最简单最粗暴的方法,定时改密码,或者某些高风险人物离职之后主动改密码。。。

堡垒机

线上库一般只有特定的机器 才能连接, 并不是向全网开放的。

如果你们没有堡垒机的话,可以添加 IP 白名单,阿里云 RDS 有这功能。

迷惑行为
1 、线上数据库密码写在代码的配置文件里,你们拿生产数据库开发测试的?
2 、线上数据库居然可以外网访问
3 、外网可以访问也就算了,起码来个 ssh 跳板,并且加 ip 限制吧,离职了把 ssh 公钥删掉,并且人不在公司也连不上服务器

小公司也不能这么搞,公司再没钱 买台公司内部的开发测试服务器的钱总有的吧,怎么能直接连线上的,而且带宽也是问题。改密码也不是改数据库的,一改所有服务都要重启。

看使用的框架,SpringBoot 的话,可以从命令行参数或者系统环境变量里设置密码,会覆盖配置文件里设置的密码。

天啊,贵司没有运维吧。最起码搞一台跳板机,限制 IP 吧。

所有的服务不对公网暴露,泄露了也没什么。

公网只能访问到 LB 这一层~

对于你们来说,比较现实的方案应该是,由一个人控制密码,其他人不给接触密码 就好了

IP 限制

建议参考 mybatis-plus 文档中的数据安全章节

同样有这样的疑惑:
1 、如果禁止外网连接,在项目的快速迭代期,数据库需要不停的设计修改,或者倒入一些清洗好的数据,如何才能方便的进行操作
2 、如果使用堡垒机,特定的 IP 可以连接,那本地的机器就不行了,毕竟公司的机器肯定是一个或者几个出口,多台机器都可以登录,如果当令一台公网的堡垒机,是不是就会增加成本,需要一只放一台 windows 服务器( Linux 操作起来可能比较麻烦,不如图形化的方便)
3 、单人配置密钥,我觉得这个还是的基于堡垒机,不然光有密钥,可以登录服务器,但是无法直接访问操作数据库( navicat 之类),还是比较麻烦
4 、使用 Jenkins 自动部署,这是一个比较好的方法,但是有一定的学习成本,还没学会怎么用呢

那请教一下还有啥方便又比较安全的实现思路呢(主要是没钱,堡垒机、买服务估计比较艰难)

你们线上数据库端口暴露给了公网?不是吧?不是吧?

ip 白名单

网络隔离做的不对

公司 ip 才能登录
指定机器登录

阿里云可以设置 IP 白名单, 想直连就向公司的管理员申请

你们都担心这个啊。我离职了,如果有人还问我密码的问题,我一概说不知道。我早就删的一干二净了。免得惹麻烦。

1.springboot 直接引用外部 yaml,生产环境密码不放代码里面
2.数据库采取白名单 IP
3.除了 springboot 等业务系统可以直连,其他一律走堡垒机的 ssh 通道
4.人员离职,直接删掉其 ssh 公钥

服务器( esc 、ssh )等这些账号密码:
密码管理器(如 enpaas 、keepass )离线或通过 webdav 同步,多个开发人员可共享出来

项目链接账号密码( mysql 、redis )等:
配置中心(如 nacos ),或存在密码管理器中

交接之后离职、交付对应的 [密码管理器、配置中心] 的账密就行了然后改密、或者账号中踢出离职人员账号

前提是你可以决定或者推荐对方可采用这些管理方法!

我们就是这样操作的

跳板机

数据库开放外网访问的吗?

正常不是应该限内网,然后 SSH 隧道过去,离职就把他的 SSH KEY 删除就好了。

还是换密码吧。。。

很正常啊,一般项目都是整 3 个配置文件,dev,pre,prod,不同的环境启动使用不同的配置。不写配置文件难道整个配置中心啊,那不又是更麻烦……

难道最佳实践不是每天把密码修改一遍吗?🤣

我司都是将秘钥放在 LastPass 上

内外网隔离啊

你们公司没有 AAA 系统的吗?

不同公司有不同做法,这里有体量不同和对安全重视不同。下面说说我知道的各种解决方案:

  1. 首先,像数据库这类比较敏感的服务是绝不应该暴露到公网上的,并且一般仅设置为相关业务 ip 内网网段访问,甚至 127.0.0.1 本地访问。其次,一般公司都有 VPN,堡垒机或跳板机,数据库这类服务一般也都放到子网网段内。这样能一定程度杜绝直连问题,但也有人通过 SSH 隧道等方式去连接绕过这种限制。当员工离职后,失去内部网络访问权,即使知道密码也无法连进去。问题是很多人为了图方便,或者借口不得已而为之。将这类服务暴露到公网上,出了问题其实也没啥可说的。
  2. 说到正题,将密码写到配置文件,这种情况很多。配置文件一般也分环境,像开发环境测试环境的密码,为了开发方便,有时候会和项目仓库放在一起。生产环境配置文件单独放在一个仓库,仅在发布或打包时会自动打成镜像。当然这里也需要 DBA 搞网段隔离限制访问。但是这样也仅是一定程度避免了密钥泄漏。你还需要最小权限原则,例如线上的机器不能谁都可以访问,那个放生产环境配置文件同理。但是,谁也保不准线上机器或镜像不泄漏密钥。
  3. 还有,你也可以为每个用户建立一个账号,有一个地方统一管理这些 token 或凭证,当离职后直接删除掉即可。
  4. 密码策略,不定期更改。
  5. 你也可以利用 zk 或配置中心,动态调用或下发。
  6. 还有你可以使用一些诸如 vault 这类的密码保护方案。
  7. 当然这都是比较「术」的东西,要理解,安全绝不止是这些东西。更重要的是人的管理,坚决不行方便之门。

数据库只开放内网访问 如果要用可视化工具 就在能连接的服务器 ssh 过去就好了 有人离职 改一下 ssh 密码就好了

弱小又小气

阿里云好解决,按步骤做:

  1. 使用 RAM 访问控制,让每个需要访问阿里云资源的人用自己的子账号,并配置相应权限,相关设备仅由授权了的子账号可以访问,此时各个设备的密码就是个形式了,有密码没有权限也访问不了。
  2. 使用堡垒机,要求各个子账号必须通过堡垒机登录(一些地区的等保要求必须这么做)。
  3. 数据库账号用途分离,应用程序用独立账号,且限制应用服务器的 IP ;人员一人一号。

人员离职操作流程:

  1. 删除其 RAM 子账号。
  2. 删除其数据库账号。

我司,给普通人的开发机只有公司内网可以访问。
我在家办公,每天开电脑第一件事就是连 V○N,然后才连我的虚拟机。
别的不说,给服务器的防火墙限制一下只有公司 IP 能访问就行了吧,最简单了。
离职了自然就失去访问权限了。

给员工发 yubikey,yubikey 里面创建不可导出的密钥对,其余的认证都基于 yubikey 来做 比如 ssh 、gpg 、fido2 、ga 等等。 离职的时候收回 yubikey 硬件就可以了。

数据库不是只能内网连吗,知道也没啥事吧

二楼说的很明白了

说下我的做法
用了 springcloud-config,配置独立,可以是加密的,返回的都是加密串,但是如果有心思还是能看到了,但是里面的地址都是内网的,外网基本访问不了,主要是 appkey,appscert,这一块,一定要加密,生产和测试一定要分开,测试泄漏了没什么问题,但是生产泄漏了,就危险了

数据库访问直接走 ssh,人走了直接删公钥,公钥是和用户绑定的,没什么问题

你建个测试库,然后就没有然后了

我们 prod 是从不写在代码里,而且就算要写 也应该是内网地址

核心项目的一些核心配置肯定也是不写在配置文件里面的,但是大部分时候那些项目的安全性要求并没有那么高,也没人专门去维护这些配置,图省事肯定是开发人员开发的时候弄了。。。小公司哪有内网这个说法,都是买的阿里云服务器、阿里云数据库。。。有时候为了图省事还要直接连线上数据库查看数据啊等等。没你们想象那么严格。

然后就那知道密码的人离职了,然后呢?

配置中心

那就改呗,其实不改也无所谓,有 ssh 密钥还知道生产内网数据库密码的就那么两三个人,而且离职率也不高,就你离职了然后公司的生产环境就被黑了那不是找死么...
我离职的时候是直接把我电脑格式化了,密钥和电脑里记密码的笔记都一起格式化了,我也不想知道。