2011-12-14 3 views
0

Linux 컴퓨터에서 C++로 응용 프로그램을 개발하는 중입니다. 응용 프로그램은 이더넷 어댑터와 네트워크를 사용하는 타사 라이브러리를 사용합니다. 라이브러리는 GigE Vision 카메라의 라이브러리입니다. 시작시 응용 프로그램에서 카메라에 연결하려고 시도한 다음 카메라에 대한 정보를 반환하고 응용 프로그램에 비디오 스트리밍을 시작합니다.응용 프로그램 용 네트워크 기능

잠시 후 응용 프로그램이 카메라 정보를 카메라에 연결하거나 얻을 수 없지만 응용 프로그램을 루트 (sudo)로 실행하면 문제가 해결됩니다.

나는 라이브러리의 공급 업체에 연락하고 그들은 내가 다음을 수행해야한다고 지적했다 :

    : 루트로 실행하면 자신의 시스템 보안이 만족 다음 구현을 찾을 수 있습니다 타협 느낄

    사용자

  1. 실행 가능한 소유자를 root로 설정하십시오.
  2. 가 실행 코드에
  3. , 응용 프로그램이 시작이 capset을 사용할 때() 해제에서 "setuid를"권한 비트를 설정을 제외한 모든 이러한 권한 : CAP_SYS_NICE, CAP_NET_ADMIN, CAP_NET_BROADCAST, CAP_NET_RAW 모든 루트 권한으로 시작됩니다 응용 프로그램이 있지만, 시작한 후 즉시 삭제됩니다.

이 작업을 수행하지만, 실행 파일을 변경하지 않고이 작업을 수행하는 나를 위해 다른 방법이없는? 내가 그 권한을 액세스 할 수있는 일부 그룹에 내 사용자를 추가 할 생각, 어떤 도움을 주시면 감사하겠습니다.

위의 해결 방법은 각 컴파일 후에 소유자를 변경하고 사용 권한을 설정해야한다는 점에서 최적이 아닙니다. 응용 프로그램은 비디오를 녹화하고 이미지를 캡처하는 데 사용됩니다. 언급 된 솔루션에서 이러한 녹음 및 캡처는 루트 사용자가 소유하므로 파일을 배포 할 때 사용자를 다시 변경해야합니다.

OS : 우분투 리눅스 11.10 환경 : 당신은 실제로 루트로 setcap()를 사용하여 손으로 필요한 기능을 설정할 수 있습니다 Qt는

답변

0

와 C++.

따라서이 명령을 사용하여 적절한 기능을 설정하면 root 일 필요없이 일반 사용자로 실행됩니다.

0

실제로 라이브러리가 루트 권한이 필요한 작업을하는 것처럼 들립니다.

아마도 가장 쉬운 해결책은 빌드 프로세스에 사용 권한을 추가하는 것입니다 (예 : Makefile).

이 문제를 부분적으로 해결할 수있는 방법 중 하나는 프로그램을 라이브러리를 사용하여 카메라와 통신하는 프로그램과 소켓이나 파이프를 통해 인터페이스 프로그램과 통신하는 사용자 인터페이스 용 프로그램으로 나눌 수 있습니다. 이렇게하면 인터페이스 프로그램을 변경할 때만 사용 권한을 변경하면됩니다. 이것은 또한 프로그램에 대해 일반적으로 좋은 아이디어가 될 것입니다. 높은 권한을 가진 작은 래퍼 프로그램이 있으며 더 큰 GUI 프로그램이 확장 권한없이 실행됩니다. setuid 프로그램을 감사하는 것이 더 쉽습니다 (특히 매우 간단하게 만들 수있는 경우).

관련 문제