为用户和java应用程序设置不同的权限

为用户和java应用程序设置不同的权限

我正在编写一个图形java(javaFX)应用程序,它是操作系统上的一种外壳。我目前使用 Java 8 (JDK corretto 8.402)、Debian 12 和 Xfce。问题是我的 Java 应用程序使用sudo.这些命令被编写sudoersNOPASSWD.事实证明,用户无需密码就可以运行所有这些命令sudo,这是不安全的。

粗略地说,我需要做到当电脑打开时,用户自动登录并自动启动应用程序。一切都应该是安全的,用户应该拥有非常有限的权限,并且不应该能够执行 Java 应用程序可以执行的命令。

我对Linux不太擅长,所以想听听您的建议。

  • 我尝试过创建另一个用户。所以有root,user1guest.我们的想法是让会话以 guest 身份运行,应用程序以 user1 身份运行。
  • /etc/lightdm/lightdm.conf我配置了自动登录guest并在xfce4-session-settings应用程序中,我配置了一个自动运行脚本以java作为另一个用户运行应用程序,如下所示:
    sudo -S -u user1 java -jar /path/to/my.jar
    

我希望它无需密码即可运行,但随后/usr/bin/java需要将其添加到 sudoers 中NOPASSWD。然后事实证明,用户guest可以运行任何 Java 应用程序sudo并通过它做任何他想做的事情。

答案1

据我了解,由于您有两个用户,您可以向 user1 授予 NOPASSWD 所有命令,例如user1 ALL=(ALL) NOPASSWD: ALL甚至仅限于所需的命令,并且 guest 不需要拥有任何 sudoers 权限,或者如果您希望 guest 拥有 sudo 访问权限,请添加行guest ALL=(ALL) ALL,因此客人必须提供密码。

答案2

这确实是一条评论,但它太长,无法放入框中。

这些命令在 sudoers 中编写为 NOPASSWD。事实证明,用户无需密码就可以使用 sudo 运行所有这些命令,这是不安全的。 ...粗略地说,我需要做到当电脑打开时,用户自动登录

因此,您希望用户无需输入密码即可运行命令,但您也不希望他们无需输入密码即可运行命令。

你的描述是矛盾的。

这个想法是让会话作为访客,应用程序作为 user1 运行

这可能会让事情变得更加复杂。虽然如果“应用程序”作为守护进程运行,则很容易启动,但它无法与用户拥有的屏幕进行交互(无需额外的配置)。 OTOH 如果“应用程序”由用户会话调用,那么您需要某种机制来更改其 uid。

解决问题的最佳方法是配置系统,以便用户可以运行调用预期的操作而无需切换 uid - 但您没有告诉我们任何有关这些的信息。

Sudo(和类似的工具)之所以存在,是因为有一些问题是以前的方法无法解决的。如果您不正确使用它们,它们就不安全。即使是像这样简单的事情:

%support ALL=(ALL) NOPASSWD: less /var/log/maillog

对于 root shell 来说,利用它是微不足道的。

然后事实证明来宾用户可以运行任何 Java 应用程序

因为你的sudo配置不正确。您可以在 sudo 配置行中指定允许的参数以及可执行文件。

就个人而言,我总是将 sudo 目标包装在 shell 脚本中,并将 shell 脚本配置为 sudo 配置中的目标,以避免任何歧义。

相关内容