以 root 身份运行服务

以 root 身份运行服务

我有一个 Java 程序,用于自动执行为客户端创建 VPN 设置的过程。该程序调用几个 Bash 脚本,创建并复制文件。我必须在 root 用户下运行它,因为整个 VPN 配置位于 /etc/openvpn 下。对于此目录,我需要 root 权限。在同一台机器上,我有 Glassfish 应用程序服务器,它将调用上述 Java 程序。Glassfish 在非 root 用户下运行。

如果我通过 sudo 运行程序,那么以 root 用户身份运行程序的最佳、最安全的方法是什么,当然无需输入密码?

答案1

最安全的选择是找出 openvpn 所属的组,并添加一个有访问权限的非特权用户 -推荐的方法是创建一个 openvpn 用户,并授予其使用 sudo 使用 openvpn 的权限。

将您在其下运行此程序的用户添加到组(可能仅具有读取权限)以授予其访问 openvpn 的权限,并授予其必要的 sudo 权限(以运行 openvpn - 与 openvpn 用户使用的设置相同)应该可以安全地完成此操作。

使用 root 是一种偷懒的方法 ;)

答案2

我发现,除了以 sudo 身份运行命令而不输入密码之外,还有两个选项:

  • echo 密码 | sudo -S 命令
  • 将以下行添加到 /etc/sudoers

    用户名 ALL=(ALL) NOPASSWD: 命令

请注意,此行必须位于所有组定义之后。您可以使用 检查您拥有的 sudo 权限sudo -l。对于此情况,结果如下:

(ALL) ALL
(ALL) NOPASSWD: COMMAND

这意味着除了 COMMAND 之外的所有命令都需要密码。如果我们将其放在username ALL=(ALL) NOPASSWD: COMMAND组定义之前,sudo -l则会产生:

(ALL) NOPASSWD: COMMAND
(ALL) ALL

这仍然需要 COMMAND 的密码,因为(ALL) ALL它在 NOPASSWD 行后指定。

相关内容