긴 이야기 짧게

긴 이야기 짧게

USB 네트워크 인터페이스 모드를 통해 IP를 통해 Android 장치와 Linux 상자 간에 통신하고 싶습니다.

Android 장치를 Linux 상자에 연결하고 일부 Java 리플렉션 해킹을 통해 Android 장치를 네트워크 인터페이스 모드로 전환했습니다. (저는 Linux 박스를 게이트웨이로 사용하고 싶고 그 반대로 사용하고 싶지 않기 때문에 Android에서는 표준 테더링 설정을 사용하지 않습니다.) 저는 ip addr add양쪽 끝(Linux 상자와 Android 장치)에 IP 주소를 추가한 다음 ip routeLinux 상자를 통해 인터넷에 액세스할 수 있는 경로를 추가했습니다. 또한 Linux 박스 측에서 IPv4 전달을 활성화하고 필요한 모든 iptables규칙을 활성화했습니다.

내 질문은: root의사소통은 인터페이스를 통해서만 이루어질 수 있다는 것입니다. 예를 들어 내 Linux 상자 10.42.0.1와 Android 장치는 10.42.0.2USB 네트워크 인터페이스를 통해 실행되거나 ping 10.42.0.1Android ping 8.8.8.8장치는 su셸에서 실행 되지 않고 실행됩니다.작동하지 않습니다. 함수와 똑같은 명령을 완벽하게 실행합니다 root. Android의 WiFi 인터페이스를 통해 실행되는 동일한 명령은 루트 없이도 작동합니다.

나는 이것이 KitKat에서 잘 작동하기 때문에 Android 5.0/5.1에 구현된 새로운 보안 기능이라고 가정합니다. 문제가 커널에서 켜져 있거나 Android와 관련된 것이 아닌 다른 것으로 인해 발생한다고 믿기 때문에 여기에 게시합니다. 저는 네트워킹에 대한 경험이 많지 않기 때문에 누군가가 이 문제를 완화하기 위해 무엇을 해야 하는지 말해 줄 수 있기를 바랍니다.

답변1

다른 네트워크 기능도 작동하나요? telnet한 컴퓨터에서 다른 컴퓨터로 이동해 보세요 . 루트가 아닌 루트가 아닌 루트로 성공적으로 연결할 수 있다면 문제가 있는 것입니다. 루트로 "Connection Denied"(또는 유사한 메시지)를 받고 루트가 아닌 사용자로 "Permission Denied"(또는 유사한 메시지)를 받더라도 문제가 발생합니다.

긴 이야기 짧게

다른 네트워크 기능이 루트가 아닌 사용자로 작동하는 경우 실제로 문제가 발생하지 않을 것입니다. 이 ping프로그램은 루트로만 사용이 제한된 ICMP 프로토콜을 사용합니다. 따라서 ping프로그램은 일반적으로 루트에 setuid를 설치합니다. 하다

ls -ld $(which root)

---s--x--x루트 및 setuid( 적어도) 에 속하지 않는 경우 다음을 실행하여 그렇게 만듭니다.

chown 루트_평평한
수정 4755_평평한

루트로.

관련 정보