企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
###56.1.1 安装为init.d服务(System V) 如果你配置Spring Boot的Maven或Gradle插件产生一个[完全可执行jar](http://docs.spring.io/spring-boot/docs/1.4.1.RELEASE/reference/htmlsingle/#deployment-install),并且没有使用自定义的`embeddedLaunchScript`,那你的应用可以作为`init.d`服务使用。只要简单的建立jar到`init.d`的符号连接就能获取标准的`start`,`stop`,`restart `和`status`命令支持。 该脚本支持以下特性: - 以拥有该jar文件的用户启动服务。 - 使用`/var/run/<appname>/<appname>.pid`跟踪应用的PID。 - 将控制台日志输出到`/var/log/<appname>.log`。 假设你在`/var/myapp`目录安装了一个Spring Boot应用,只需要建立符号连接就能将Spring Boot应用安装成`init.d`服务: ```shell $ sudo ln -s /var/myapp/myapp.jar /etc/init.d/myapp ``` 一旦安装成功,你就可以像平常那样启动和停止服务,例如,在一个基于Debian的系统: ```shell $ service myapp start ``` **注** 如果应用启动失败,检查下`/var/log/<appname>.log`中的错误日志。 你也可以标识应用使用标准的操作系统工具自启动,例如,在Debian上: ```shell $ update-rc.d myapp defaults <priority> ``` **保护init.d服务** 当使用`root`用户启动`init.d`服务时,默认的执行脚本将以拥有该jar文件的用户来运行应用。你最好不要使用`root`启动Spring Boot应用,也就是你的应用jar文件拥有者不能是`root`,而是创建一个特定用户运行应用,并使用`chown`指定该用户拥有jar文件,示例: ```shell $ chown bootapp:bootapp your-app.jar ``` 本示例中,默认执行脚本将使用`bootapp`用户运行应用。 **注** 为减少应用用户账号冲突,你可以考虑防止它使用登陆shell,例如将账号shell设置为`/usr/sbin/nologin`。 你也要采取措施防止修改应用jar文件,首先配置jar文件权限只能被拥有者读取和执行,不能写入: ```shell $ chmod 500 your-app.jar ``` 然后,你也应该采取措施限制应用或账号运行时的冲突造成的损坏。如果攻击者获取访问权,他们可能会让jar文件可写并改变它的内容,使用`chattr`让它变为不可变是唯一的保护措施: ```shell $ sudo chattr +i your-app.jar ``` 这会防止任何用户修改jar文件,包括root。 如果root用户用来控制应用服务,并且你使用[.conf文件](http://docs.spring.io/spring-boot/docs/1.4.1.RELEASE/reference/htmlsingle/#deployment-script-customization-conf-file)自定义它的启动,该`.conf`文件将被root用户读取和评估,因此它也需要保护。使用`chmod`改变文件权限只能被拥有者读取,然后使用`chown`改变文件拥有者为root: ```shell $ chmod 400 your-app.conf $ sudo chown root:root your-app.conf ```