gpt4 book ai didi

linux - 在实例启动时运行 shell 脚本

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:30:54 24 4
gpt4 key购买 nike

我正在尝试在我的 EC2 实例启动时运行 bash 脚本。我只想在服务器启动时启动 GlassFish。我尝试运行的命令是:

sudo /glassfish3/bin/asadmin start-domain

这在我手动输入时有效。

我曾尝试在几个地方添加此命令,但没有成功:

  • 在/etc/rc.local 的末尾
  • 在/etc/rc.d/rc.local 的末尾
  • 在/etc/init.d/中创建了我自己的脚本

我给了每个脚本 777 个权限。

有人知道我做错了什么吗?

最佳答案

除非奇怪的配置,sudo 需要在运行时进行身份验证。它通常意味着以交互方式运行。

假设脚本 /glassfish3/bin/asadmin 属于 root, 您可以将其文件权限设置为 6755。这可能符合您的意思 sudo 来做。当然,它也可能很危险,可能存在安全风险。

(顺便说一句,@jcomeau_ictx 是对的。您应该按照他的建议检查日志。)

为了存档的利益而更新:幸运的是,上面的答案似乎已经解决了 OP 的直接问题,所以我们就此打住。但是,由于此答案将保留存档,其他人可能会在以后查找,因此我应该添加更多内容。

可以将任何可执行文件的文件权限更改为 6755,但这并不总是一种好的做法。此类权限的作用是 (a) 让任何人以 (b) 可执行文件所有者的全部权限运行可执行文件。有时,这正是您想要的,但请注意:在 OP 的情况下,具有此类权限的 /glassfish3/bin/asadmin 现在可以由任何人以任何参数以完全 root 权限调用。如果这不是您想要的,那么您必须格外小心。

有几种方法可以采取额外的措施。一种如下。

  1. 保留文件权限为 755 的可执行文件。
  2. 编写并编译一个小包装程序,该程序使用 unistd.hexecv() 来启动可执行文件。
  3. 如果可行,不要让包装器带任何参数;否则,就让它的论点尽可能地局限和死板。让包装器严格控制传递给可执行文件的参数。
  4. 让包装器由 root 拥有,但使用 chown 为其分配一个合适的组,其成员不包括任何用户。为此,您可能更愿意创建一个新组,但是,如果您扫描系统上的 /etc/group 文件,您很可能会找到适合的现有组。作为引用,您可以通过 ls -l/bin/usr/bin | 列出已经属于系统上特殊用途组的命令。 grep -vE '^([^[:space:]]+[[:space:]]+){2}(root[[:space:]]+){2}' 等。
  5. 为包装文件授予 6754 权限,从而使其除相关组外不可执行。
  6. 将调用脚本加入组,并赋予调用脚本文件权限2755。

如果调用脚本已经属于一个组,您可以自始至终使用同一个组。

该技术有多种变体,您不太可能完全使用上面列出的技术,但是如果您阅读了 chown 命令的联机帮助页和/或信息条目并了解了文件权限的详细信息,如果您进行一些试验,您应该能够设计出适合您的解决方案,而不会带来安全风险。

关于linux - 在实例启动时运行 shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9952917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com