저는 운영 체제의 일종의 쉘인 그래픽 Java(javaFX) 애플리케이션을 작성하고 있습니다. 저는 현재 Java 8(JDK corretto 8.402), Debian 12 및 Xfce를 사용하고 있습니다. 문제는 내 Java 응용 프로그램 이 sudo
.sudoers
NOPASSWD
sudo
대략적으로 말하면, 컴퓨터를 켜면 사용자가 자동으로 로그인되고, 애플리케이션이 자동으로 실행되도록 만들어야 합니다. 모든 것이 안전해야 하며 사용자는 매우 제한된 권한을 가져야 하며 Java 애플리케이션이 수행할 수 있는 명령을 실행할 수 없어야 합니다.
저는 Linux를 잘 다루지 못하므로 여러분의 제안을 듣고 싶습니다.
- 다른 사용자를 만들어 보았습니다. 따라서
root
,user1
및 가 있습니다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
필요한 명령이라도 게스트는 sudoers 권한을 가질 필요가 없거나 게스트에게 sudo 액세스 권한을 부여하려는 경우). , OK 를 추가하면 guest ALL=(ALL) ALL
게스트가 비밀번호를 제공해야 합니다.
답변2
이것은 실제로 주석이지만 상자에 넣기에는 너무 깁니다.
이 명령은 sudoer에서 NOPASSWD로 작성됩니다. 사용자는 비밀번호 없이 sudo를 사용하여 이러한 모든 명령을 실행할 수 있는 것으로 나타났습니다. 이는 안전하지 않습니다. ...대략 말하면, 컴퓨터를 켜면 사용자가 자동으로 로그인되도록 만들어야 합니다.
따라서 사용자가 암호를 입력하지 않고 명령을 실행할 수 있기를 원하지만 암호를 입력하지 않고 명령을 실행할 수 있는 것도 원하지 않습니다.
귀하의 설명은 모순됩니다.
아이디어는 세션을 게스트로 갖고 응용 프로그램을 user1로 실행하는 것입니다.
이로 인해 상황이 더 복잡해질 수 있습니다. "애플리케이션"은 데몬으로 실행 중인 경우 시작하기 쉽지만 사용자 소유 화면과 상호 작용할 수 없습니다(추가 구성이 필요하지 않음). OTOH 사용자 세션에서 "애플리케이션"을 호출하는 경우 해당 uid를 변경하는 메커니즘이 필요합니다.
문제를 해결하는 가장 좋은 방법은 사용자가 uid를 전환하지 않고도 예상되는 작업에 대한 호출을 실행할 수 있도록 시스템을 구성하는 것입니다. 그러나 이에 대해 우리에게 아무 것도 알려주지 않았습니다.
Sudo(및 유사 도구)는 이전 접근 방식으로 해결할 수 없는 문제가 있기 때문에 존재합니다. 올바르게 사용하지 않으면 안전하지 않습니다. 다음과 같은 간단한 것조차도:
%support ALL=(ALL) NOPASSWD: less /var/log/maillog
루트 셸의 경우 이를 악용하는 것은 쉽지 않습니다.
그런 다음 게스트 사용자는 모든 Java 애플리케이션을 실행할 수 있음이 밝혀졌습니다.
sudo 구성이 잘못되었기 때문입니다. sudo 구성 라인에서 허용되는 매개변수와 실행 파일을 지정할 수 있습니다.
개인적으로 저는 모호함을 피하기 위해 항상 sudo 대상을 쉘 스크립트에 래핑하고 sudo 구성의 대상으로 쉘 스크립트를 구성합니다.