SSH 只是一种远程连入的方式,而登录到一个用户是有很多种方法的,有正常的方法,也有利用漏洞越权操作的方法,所以最好彻底禁用运行应用程序的用户被登录,也就是说哪怕我从别的用户使用 su 指令要求切过去,甚至哪怕我走到机房里直接操作那台机器输入正确的账号密码,都不能直接登录这个受限用户(在不能登录到 root 用户改系统配置的情况下)。
用户的登录是由系统底层来控制的,系统配置里会记录不同用户对应的默认 Shell 是什么,然后当用户登录成功的时候会自动启动相应 Shell 以便于用户操作,但如果系统里对应这个用户配置的 Shell 不是一个可用的 Shell (比如 /sbin/nologin ),那么即便用户登录成功了也无法操作。
具体方法可以参考这个:
https://www.thegeekdiary.com/unix-linux-how-to-lock-or-disable-an-user-account/Deno 只是个应用引擎,顶多带有一定的沙盒功能,Deno 的依赖包是直接暴露在 Linux 文件系统里的,不是放在 Deno 沙盒的文件系统中,而沙盒只能保证代码使用沙盒来执行的时候不会逃逸(越权),但无法保证代码不利用沙盒以外的机制运行,理论上恶意代码完全可以不依赖 Deno 来访问当前用户的所有权限(比如 Linux 系统层级的木马,利用系统的调用来自动运行,或者冒充正常程序引诱管理员运行)。
如果确实有需要将代码与 Linux 系统进行隔离,可以使用具备文件系统隔离能力的方案,比如容器和虚拟机,所有代码都存在于 image 中,不会直接被系统或管理员调用,必须在容器或虚拟机里运行,而容器和虚拟机确保其不会逃逸。
用容器和虚拟机还有一个好处,就是 image 可以在 CI 环境里构建,构建完成能够进行安全扫描,确保没有恶意代码再部署到服务器正式环境,这样也可以消除恶意代码在应用业务层上的破坏。