내 웹 스크립트에 대한 단위 테스트를 설정하려고 합니다. 단위 테스트는 루트가 아닌 사용자(일반적으로 "jenkins")에 의해 실행되므로 jenkins가 내 네트워크에서 전송된 패킷 스크립트를 테스트하는 데 사용할 수 있는 네트워크 인터페이스를 설정할 수 있기를 원합니다. 내가 테스트하고 있는 프로그램은 "무차별" 모드에서 네트워크 인터페이스를 사용하고 궁극적으로 루트 사용자 아래에서 Linux 서비스로 실행됩니다. 그러나 루트 로그인이나 대화형 입력 없이 기능 단위를 테스트하고 싶습니다. jenkins "사용자"는 시스템의 대화형 사용자가 아닙니다.
다음을 사용하여 Tap 인터페이스(CentOS 7.x)를 설정할 수 있습니다.
sudo ip tuntap add tap0 mode tap user jenkins
sudo ifconfig tap0 promisc up
그러면 를 사용하여 볼 수 있는 인터페이스가 표시되지만 ifconfig
"실행 중"은 아닙니다.
을 사용하여 프로그램을 실행하여 데이터를 보낼 수 있으므로 sudo XXXX
프로그램이 예상대로 작동합니다. 그러나 jenkins 계정을 통해 프로그램을 실행하면 패킷이 통과되지 않습니다. 이를 시도하기 위해 일시적으로 jenkins 사용자 계정을 "대화형"으로 전환할 수 있습니다. 저는 이 인터페이스의 처리량을 보기 위해 Wireshark를 사용하고 있습니다.
내 사용자 계정과 다른 계정으로 이것을 시도했지만 루트 계정만 작동합니다.
루트가 아닌 사용자가 (개인, 사용자 소유) 네트워크 인터페이스를 사용하도록 허용하는 데 사용할 수 있는 몇 가지 명령줄 호출이 있다고 생각했지만 아무 것도 찾을 수 없었습니다.
나할 수 있다sudo
루트 권한으로 단위 테스트를 실행할 수 있는 권한 및/또는 suid() 권한을 사용하여 시스템을 설계하는 것이 가능할 수도 있지만 chmod 4755 XXX
, 이렇게 다소 힘든 과정을 거치지 않고도 자동화된 테스트를 실행할 수 있어야 할 것 같습니다.
사용자 계정에 대한 클릭 인터페이스를 사용하는 방법을 아는 사람이 있습니까?
참고: 궁극적으로 내 프로그램은 libpcap
'를 사용하여 pcap_inject
인터페이스에 패킷을 주입합니다.
또한 루트가 아닌 사용자로서 실제 네트워크 인터페이스에 패킷을 삽입할 수 있는데, 이는 작동하지만 내 패킷(아마도 잘못된)을 실제 네트워크에 느슨하게 두는 것은 약간 위험합니다. 사용자가 실제 인터페이스를 사용할 수 있지만 테스트를 위해 "포인트 앤 클릭" 인터페이스를 사용할 수 없다는 것은 어울리지 않는 것 같습니다.
나는 (다른 프로젝트 중에서) 네트워크 네임스페이스를 조사했습니다. AFAIK, 도움이 되지는 않겠지만 수정하도록 하겠습니다.
이것은 이 질문의 변형일 수 있지만 불행히도 아직 답변이 없습니다.탭 인터페이스가 패킷을 수신하지 못함
답변1
이는 사용자 및 네트워크 네임스페이스에 대한 작업이며 커널 구성에 따라 호출은 unshare -Urn
가상 네트워크 인터페이스가 별도의 시스템에 루트인 것처럼 생성될 수 있는 개인 네트워크 네임스페이스(기본적으로 셸)를 사용하여 프로그램을 실행합니다.