source

Android 디버그 브리지(adb) 장치 - 권한 없음

manysource 2023. 10. 7. 12:00

Android 디버그 브리지(adb) 장치 - 권한 없음

디버깅 모드에서 HTC Wildfire A3333을 페도라 리눅스 17과 연결하는 데 문제가 있습니다.ADB는 이렇게 말합니다.

./adb devices
List of devices attached 
????????????    no permissions

내 udev 규칙(삼성의 첫 번째 규칙은 정상적으로 작동하고 HTC의 두 번째 규칙은 그렇지 않음):

SUBSYSTEM=="usb",SYSFS{idVendor}=="04e8",SYMLINK+="android_adb",MODE="0666",GROUP="plugdev" 
SUBSYSTEM=="usb",SYSFS{idVendor}=="0bb4",SYMLINK+="android_adb",MODE="0666",GROUP="plugdev"

삼성 기기의 경우 모든 것이 괜찮습니다.

 ./adb devices
List of devices attached 
00198a9422618e  device

저는 운이 따르지 않고 비슷한 맥락으로 주어진 모든 답을 시도해 왔습니다.HTC 산불을 안드로이드 개발에 활용

제가 데비안 휘지 밑에서 이 문제를 겪었을 뿐입니다.저는 sudo와 함께 adb 데몬을 다시 시작했습니다.

sudo ./adb kill-server
sudo ./adb start-server
sudo ./adb devices

다 잘 되고 있어요 :)

이 문제의 원인은 시스템 사용 권한과 관련이 있습니다(이 제안에 대해 @Isaac Cisneros 감사합니다).어쨌든 HTC Wildfire(그리고 다른 것들도)는 시스템에서 삼성 기기보다 더 많은 것을 필요로 합니다.간단한 해결책은 이클립스를 루트로 실행하는 것이지만 페도라와 같은 비수도권 리눅스 시스템에서는 그다지 편하지 않습니다.

저는 동일한 목표를 달성하는 또 다른 방법을 찾았습니다. 이는 사용자 친화적이고 보안상의 구멍이 거의 없는 것처럼 보이며, 슈퍼 사용자 권한으로 전체 IDE를 실행하는 것보다 더 적습니다.이것은 여전히 문제의 해결책일 뿐입니다.시스템 루트 사용은 관리 작업으로만 최소화해야 하며, "adb"는 SUID 없이 정상적인 사용자 계정으로 작동하도록 설계되었습니다.SUID의 적절한 설정은 상당히 안전하지만, 모든 권한 증가는 잠재적인 시스템 보안 구멍입니다.

1. adb 바이너리(owner – root, owner group - user_group) 소유권 설정:

chown root:user_group adb

2. SUID로 권한 설정:

chmod 4550 adb

이 결과는 다음과 유사합니다(ls -llh).

-r-sr-x---. 1 root user_name 1.2M Jan 8 11:42 adb

그러면 일반 사용자 계정을 사용하더라도 루트로서 adb를 실행할 수 있습니다.일반 사용자로 이클립스를 실행할 수 있으며 HTC가 제대로 검색되어야 합니다.

./adb devices 
List of devices attached 
HT0BPPY15230    device 

저에게도 비슷한 문제가 있습니다.

$ adb devices
List of devices attached 
4df15d6e02a55f15    device
????????????    no permissions

조사

.lsusb할 수 있습니다

$ lsusb
...
Bus 002 Device 050: ID 04e8:6860 Samsung Electronics Co., Ltd GT-I9100 Phone ...
Bus 002 Device 049: ID 18d1:4e42 Google Inc. 

삼성 갤럭시S3넥서스7(2012)이 연결된 모습입니다.

다음에 대한 권한 확인:

$ ls -l /dev/bus/usb/002/{049,050}
crw-rw-r--  1 root root    189, 176 Oct 10 10:09 /dev/bus/usb/002/049
crw-rw-r--+ 1 root plugdev 189, 177 Oct 10 10:12 /dev/bus/usb/002/050

잠깐만. 뭐?그 "플러그데브" 그룹은 어디서 왔습니까?

$ cd /lib/udev/rules.d/
$ grep -R "6860.*plugdev" .
./40-libgphoto2-2.rules:ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="6860", \
  ENV{ID_GPHOTO2}="1", ENV{GPHOTO2_DRIVER}="proprietary", \
  ENV{ID_MEDIA_PLAYER}="1", MODE="0664", GROUP="plugdev"
./40-libgphoto2-2.rules:ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6860", \
  ENV{ID_GPHOTO2}="1", ENV{GPHOTO2_DRIVER}="proprietary", \
  ENV{ID_MEDIA_PLAYER}="1", MODE="0664", GROUP="plugdev"

(그 선들을 감쌌습니다)

를 합니다.GROUP="plugdev" 또한 line에 하지 않습니다. 또한 다른 장치 ID에서는 작동하지 않습니다.

$ grep -Ri "4e42.*plugdev" .

(아무것도 반환되지 않음)

고치기

좋아요 그럼 해결책이 뭔가요?

규칙 추가

을 만듭니다. /etc/udev/rules.d/99-adb.rules다음 줄을 포함합니다.

ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4e42", ENV{ID_GPHOTO2}="1",
  ENV{GPHOTO2_DRIVER}="proprietary", ENV{ID_MEDIA_PLAYER}="1",
  MODE="0664", GROUP="plugdev"

이건 한 줄이어야 해요, 가독성을 위해 여기에 포장해뒀어요.

udev 다시 시작

$ sudo udevadm control --reload-rules
$ sudo service udev restart

바로 그겁니다.

장치의 플러그를 뽑거나 꽂습니다.

먹어봐.

$ adb devices
List of devices attached 
4df15d6e02a55f15    device
015d2109ce67fa0c    device

유데브 규칙이 잘못된 것 같습니다.이걸 사용해봤는데 효과가 있었어요

SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"

(ATTRSYSFS)

전화기에서 USB 모드를 변경하는 것이 나에게 도움이 되었습니다. (파일 전송으로 설정했습니다.)

ubuntu 12.04 아래, eclipse juno.저도 같은 문제에 직면해 있습니다.이유 블로그에서 발견한 내용입니다.

그 해결책은 Leon과 같습니다.

sudo -s
adb kill-server
adb start-server
adb devices

Stephan의 대답은 (sudo adb kill-server를 사용하여) 효과가 있지만, 일시적입니다.재부팅할 때마다 재발급해야 합니다.

영구 솔루션의 경우 udev 구성을 다음과 같이 수정해야 합니다.

Witrant의 대답은 올바른 생각입니다. (Android 공식 문서에서 복사)하지만 그건 그저 템플릿일 뿐입니다.장치에서 사용할 수 없는 경우 장치에 대한 올바른 장치 ID를 입력해야 합니다.

lsusb

Bus 001 Device 002: ID 05c6:9025 Qualcomm, Inc.
Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
...

목록에서 Android 장치를 찾습니다.

그러면 idVendor는 ID의 전반부(4자리)를 사용합니다(마지막 반은 idProduct이지만 광고작업을 할 필요는 없습니다).

sudo vi /etc/udev/rules.d/51-android.rules합니다 idVendor유입니다.

SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", MODE="0666", GROUP="plugdev"

그렇게 간단하다.일부 답안에 제시된 다른 모든 필드가 필요하지는 않습니다.파일을 저장합니다.

그럼 재부팅.변경 사항은 영구적입니다(Roger는 재부팅하지 않으려면 udev를 다시 시작하는 방법을 보여줍니다).

OP 자체의 답변은 지금까지 잘못된 것입니다. "특별한 시스템 허가"가 없다는 것입니다.– "허가 불허" 문제는 결국 ...로 귀결됩니다.허락이 없습니다.

불행히도 디버그하는 것은 쉽지 않은데, 왜냐하면 adb는 어떤 장치에 접근하려고 하는지를 비밀로 하기 때문입니다!Linux의 경우 전화기의 "USB 직렬 변환기" 장치(예: /dev/bus/usb/001/115)를 열려고 합니다(버스 번호와 장치 주소는 달라집니다).때때로 /dev/android_adb에서 링크되어 사용됩니다.

lsusb버스 번호와 장치 주소를 찾는 데 도움이 될 것입니다.포트가 어떤 속도를 사용할지(예: 물리적 포트가 논리적 버스에 연결되는 경우) 버스 번호와 마찬가지로 플러그를 다시 꽂으면 장치 주소가 확실히 변경됩니다.

alsusb-line은 다음과 유사합니다.버스001 장치 115 : ID 4321 : fedc blabla

lsusb -v"블라블라"가 충분히 암시되지 않은 경우(제조사나 전화기 모델이 포함되지 않은 경우도 있음) 장치를 찾는 데 도움이 될 수 있습니다.

합니다.ls -a /dev/bus/usb/001/115문제의 사용자가 정말로 접근할 수 있습니다!합니다.chmodudev합니다를 합니다.

PS1: /dev/android_adb는 하나의 장치만 가리킬 수 있으므로 원하는 대로 작동하는지 확인합니다.

PS2: 이 질문과는 무관하지만 잘 알려지지 않았습니다. adb에는 벤더 ID의 고정된 목록이 있습니다.이 목록은 ~/.android/adb_usb.ini에서 확장할 수 있습니다. 여기에는 0x4321이 포함되어야 합니다(위의 예제 lsusb 행을 따르는 경우).– 공급업체 ID를 알 수 없는 경우 "권한 없음"이 발생하기 때문에 여기서는 필요하지 않습니다.

여기 맨 위에 이 포스트스크립트를 붙여서 제가 앞서 설명한 내용을 놓치지 않도록 하겠습니다.

USB 연결 유형을 카메라(PTP)에서 미디어 장치(MTP)로 변경하기만 하면 사용 권한 없음 문제를 안정적으로 생성하고 해결할 수 있습니다.카메라 모드는 디버깅을 허용합니다. 미디어 모드는 ADB에서 권한 없음 응답을 발생시킵니다.

그 이유는 잠시 생각해보니 꽤 분명해 보입니다.미디어 서버 모드에서 디버거를 사용하면 장치의 보안되지 않은 컨텐츠에 액세스할 수 있습니다.

===========

디버그된 디바이스에서 RSA 암호화 경고를 수락할 때까지 디바이스가 허용되지 않습니다.연결 후 어느 시점에서 디바이스가 디버깅 연결을 수락하도록 요청합니다.초기 스와이프 잠금 이상으로 장치에 접근할 수 있도록 보장하는 최소한의 보안 프로토콜입니다.개발자 모드를 활성화해야 할 것 같습니다.

"권한 없음" 플래그는 실제로 adb가 장치를 유효한 디버깅 대상으로 인식하는 좋은 첫 번째 지표입니다.다른 USB 장치는 목록에 표시되지 않습니다.

자세한 내용은 다음 및 관련 페이지에서 확인할 수 있습니다.

http://developer.android.com/tools/device.html

6월 4일부터 4.2.2 stock으로 업그레이드 후 Pipo S1S에도 동일한 문제가 발생하였습니다.

$ adb devices
List of devices attached  
????????????    no permissions

위의 모든 제안들은 당신의 usb 장치를 인식하기에는 유효하지만, 나에게 문제를 해결해 주지는 못합니다. (Mint 15에서 실행되는 Android Debug Bridge 버전 1.0.31.)

을 업데이트하면 Android sdk가 됩니다.~/.android/adb_usb.ini.

Pipo Vendor를 인식하는 방법ID 0x2207은 다음 단계를 수행합니다.

하기 /etc/udev/rules.d/51-android.rules

SUBSYSTEM=="usb", ATTR{idVendor}=="0x2207", MODE="0666", GROUP="plugdev"

:~/.android/adb_usb.ini:

0x2207

그런 다음 adbkey 파일을 제거합니다.

rm -f ~/.android/adbkey ~/.android/adbkey.pub

장치를 다시 연결하여 올바른 adb 연결로 키 파일을 재구성합니다.일부 장치에서는 재승인을 요청합니다.

sudo adb kill-server
sudo adb start-server   
adb devices

같은 문제가 있었습니다.udev 규칙의 문제였습니다.위에 언급된 몇 가지 규칙을 시도했지만 문제를 해결하지 못했습니다.여기서 일련의 규칙을 찾았습니다. https://github.com/M0Rf30/android-udev-rules .가이드를 따라 거기까지 가서, 코흘리개, 고쳤습니다.

저는 오늘도 같은 문제에 봉착했습니다.

공식적인 지침을 따랐지만 "chmoda+r /etc/udev/rules.d/51-android" 명령을 실행해야 한다는 것을 인지하지 못했습니다.규칙들"

이 파일을 world readible로 설정하고 usb 케이블 ,을 다시 꽂으면 상태가 승인되지 않습니다.그럼 그냥 허락만 해주시면 다 잘 될 겁니다.

저는 로버트 시머와 마이클 ë 위트란트의 의견에 동의합니다.작동하지 않는 경우 다음을 사용하여 디버그를 시도합니다.strace

strace adb devices

를(를) 하는 데 이 됩니다./tmp/ADB_PORT은 ()입니다./tmp/5037).

이 문제의 또 다른 원인은 USB 테더링입니다.USB 테더링을 사용한 경우 전원을 끈 다음 USB에서 장치의 플러그를 뽑고 다시 꽂은 다음 수행합니다.

adb kill-server
adb devices

그것은 내 경우에 효과가 있었습니다(Ubuntu 12.04, Nexus S, SDK in home dir, 실행하기 위해 루트가 필요하지 않았습니다).다를 해야 할 수도 .adb devices하지만 근본적으로는

"안드로이드 업데이트 adb" 명령을 시도합니다.삼성 갤럭시 기어를 사용하는 데 도움이 됩니다.

.ls -al /usr/bin/adb가(가) 을 표시해야 .root 그룹p.root을 에게 .리눅스 ACL(액세스 제어 목록) 에 을 부여할 수 있습니다.adb다음과 같이

setfacl -m "u:userName:rwx" /usr/bin/adb

./usr/bin/adb합니다를 할 수 합니다.adb사용자 이름과 루트를 입력합니다.

답은 여기에 있는 여러 게시물들 사이에서 짜여져 있습니다, 최선을 다하겠지만, 정말 단순하고 분명한 이유인 것 같습니다.

1) 일반적으로 udev 규칙에 "user" 변수가 있는 것은 아마도 GROUP="plugdev" 직후에 USER="your_user"와 같은 것입니다.

2) 디바이스/s에 올바른 SYSFS{idVendor}=="####″ 및 SYSFS{idProduct}=="####" 값을 사용해야 합니다.예를 들어 삼성 제품과 HTC 제품과 같이 두 개 이상의 제조업체의 장치가 있는 경우 각 장치별 엔트리가 아니라 사용할 각 벤더별 엔트리(규칙)가 있어야 하므로 HTC 및 삼성 제품의 엔트리가 필요합니다.삼성에 입사하실 자격이 있으신 것 같네요. 이제 다른 직원이 필요합니다.USER="your_user"를 기억합니다.Robert Seimer가 idVendor와 idProduct를 찾기 위해 제안하는 것처럼 'lsusb'를 사용합니다. 일반적으로 X#X#:#X#X 형식의 일부 숫자와 문자입니다. 첫 번째 것은 idVendor이고 두 번째 idProduct라고 생각하지만 사용자가 가지고 있는 각 브랜드의 전화기/태블릿에 대해 이 작업을 수행해야 합니다.

3) 51-adb.rules와 99-adb.rules가 어떻게 다른지, 또 왜 다른지 저는 이해하지 못했습니다.

4) "user mode -a -G plugdev your_user"로 사용자에게 "plugdev" 그룹을 추가해 볼 수도 있습니다. 비록 나는 그것이 gui를 루트로 시작하는 것보다 위험하다고 생각하지 않지만, 나는 필요하다면 최소한 "gksudo eclipse"를 사용해야 한다고 믿습니다.

그것이 몇 가지를 명확하게 하는 데 도움이 되었기를 바랍니다. udev 규칙 구문은 저에게도 약간 신비롭지만, 제가 들은 바로는 시스템마다 다를 수 있기 때문에 몇 가지를 시도해보고, 한 번에 식사하고, 어떤 변화가 작동하는지 주목하십시오.

  1. 클로즈 런닝adb, 안드로이드 studio을 운영하다가 닫힐 수도 있습니다.

  2. 장치 목록,

/usr/local/android-studio/sdk/platform-tools/adb devices

장치를 루트로 실행하는 THL W100에서는 테더링이 활성화된 상태에서만 작동했습니다(AirDroid를 사용했습니다).

하나의 호스트에 3개의 디바이스가 연결되어 있지만 다른 디바이스 중 하나만 '권한 없음' 상태인 상황도 마찬가지였습니다.

저는 광고에 SUID나 SGID를 추가하는 것이 또 다른 문제였습니다.adb가 재시작될 때마다 오프라인으로 표시되는 장치 - 매번 장치에서 확인할 때까지.

장치 파일에 대해 'o+w' 권한을 추가하여 '권한 없음' 문제를 해결했습니다.

chmodo+w/dev/bus/usb/00n/xx

언급URL : https://stackoverflow.com/questions/14460656/android-debug-bridge-adb-device-no-permissions