Ubuntu 14.04에서 부팅 시 루트로 애플리케이션 실행

Ubuntu 14.04에서 부팅 시 루트로 애플리케이션 실행

저는 Ubuntu 14.04에서 작업 중이며 컴파일된 C++ 애플리케이션을 가지고 있습니다. "program"이라는 이름의 실행 파일을 얻습니다. 문제는 이 프로그램이 opencv와 소켓을 사용한다는 것입니다. 따라서 터미널에서 다음과 같이 실행하려고 하면:

./program

다음 오류가 발생합니다.

 listener: socket: Operation not permitted
 setsockopt: Bad file descriptor

소켓을 사용하고 있고 애플리케이션을 루트로 실행해야 하기 때문에 이 오류가 발생했습니다. 그래서 다음을 입력했습니다.

sudo ./program

이를 위해서는 내 비밀번호와 프로그램의 작업 속성이 필요합니다.

문제는 Ubuntu를 부팅할 때 이 "프로그램"이 자동으로 실행되도록 하고 싶지만 작동하지 않는다는 것입니다. 다른 응용 프로그램이 있는데 이름은 "카메라"입니다. 소켓 없이 opencv만 사용하므로 루트로 실행할 필요가 없습니다. 그래서 이 앱을 Ubuntu의 시작 앱에 넣었더니 "Camera" 앱이 문제 없이 처음부터 바로 시작되었습니다.

그렇다면 Ubuntu에서 소켓을 사용하는 애플리케이션을 자동으로 시작하는 방법은 무엇입니까?

나는 이것을 시도한다:

sudo chown root:root ./program
sudo chmod a+s ./program

그런데 내 프로그램은 비디오를 사용하기 때문에 비디오를 보려고 하면 프로그램이 중지됩니다. 내 프로그램에는 보안 허점이 없기 때문에 버퍼 오버플로 취약점 등에 취약하기 때문입니다.

기본적으로 문제 없이 프로그램을 시작하는 방법만 알면 됩니다.

답변1

RecvRawEth.c위 댓글에 게시한 파일 이름 으로 볼 때 원시 소켓( SOCK_RAW)을 사용하려고 하는 것으로 추측됩니다. 이것언제나원시 소켓에는 다음과 같은 다른 보안 메커니즘을 우회할 수 있는 가능성이 있으므로 프로그램을 루트로 실행해야 합니다.권한 있는 포트.

이 앱을 다시 생각해 보아야 합니다.매우원시 소켓을 합법적으로 요구하는 프로그램은 거의 없습니다. 거의 항상 더 나은 방법이 있습니다.

고려해야 할 적어도 두 가지 추가 문제가 있는데, 이는 실제로부정한 음식Stack Exchange 유형 사이트에서는 어쨌든 해결하겠습니다.

  1. 설정값root

    실제로 누가 시작했는지에 상관없이 원시 소켓 을 실행 중인 것으로 표시하여 root원시 소켓에 대한 제한 사항을 해결 하려고 합니다. 그렇게 하면 하나 이상의 보안 취약점이 발생할 수 있습니다. 저를 믿으십시오. 수십 년간의 Unix 역사를 보면 복잡한 setuid root프로그램에는 악용 가능한 문제가 있을 가능성이 높습니다. 이를 모두 찾아서 제거하는 데는 수년이 걸릴 수 있습니다.

    절대적으로 원시 소켓을 사용해야 하고 따라서 프로그램의 일부 요소를 루트로 실행해야 하는 경우 제한된 범위로 작성하는 것이 좋습니다.악마. 즉, 프로그램을 가능한 한 작게 만들고 이를 수행하는 데 필요한 최소한의 작업만 수행하고 root결과 정보를 일반 권한으로 실행되는 프로그램으로 내보내는 데 필요한 모든 작업을 수행합니다.

  2. 신병

    데몬을 생성하는 경우 시스템 시작 시 실행되도록 설정하는 것은 간단합니다. 데몬을 생성하는 방법을 보여주는 좋은 튜토리얼에서 이 내용을 다룰 것입니다. 우분투에서는 이것이 처리를 의미한다고 믿습니다.systemd.

    GUI 부분은 다음과 같습니다.세션 시작에 이것을 추가하십시오.

관련 정보