มีวิธีให้ฉันใช้เชลล์ Adb เป็น root โดยไม่ต้องพิมพ์ใน 'su' หรือไม่?


45

มีวิธีให้ฉันใช้เชลล์ Adb ในฐานะรูทโดยไม่พิมพ์suหรือไม่? ฉันต้องการสามารถเข้าถึงรูทได้โดยไม่ต้องเข้าไปในเชลล์

คำตอบ:


40

หากฉันเข้าใจคำถามของคุณถูกต้องคุณจะถามวิธีการเข้าถึงรูทโดยอัตโนมัติเมื่อคุณเรียกใช้adb shellเพื่อที่คุณจะได้ไม่ต้องเข้าสู่เชลล์และพิมพ์suคำสั่งเพื่อรูทเครื่องในโทรศัพท์ของคุณ

สิ่งนี้ถูกควบคุมโดยการตั้งค่าสถานะในพาร์ติชันสำหรับเริ่มระบบของคุณซึ่ง ROM ที่กำหนดเองส่วนใหญ่ได้ปรับเปลี่ยนเพื่ออนุญาตการรูทตามค่าเริ่มต้น หากคุณถูกทิ้งเป็น a $เมื่อคุณใช้งานadb shellคุณมีสองตัวเลือกถาวรและอีกหนึ่งตัวเลือกชั่วคราว (หมายความว่าไม่ติดถ้าคุณรีบูท):

  1. แฟลช ROM ที่มีการแก้ไข
  2. สร้าง boot.img ที่กำหนดเองและแฟลชไปยังโทรศัพท์ของคุณ
  3. รีสตาร์ทadbdบนอุปกรณ์ของคุณด้วยการอนุญาตราก

จริง ๆ แล้วหมายเลข 2 นั้นไม่ใช่เรื่องยาก แต่มันอาจเป็นอันตรายได้หากคุณไม่ประมาท มีบทความวิกิที่นี่ซึ่งอธิบายกระบวนการและรวมถึงสคริปต์ Perl สองสามชุดเพื่อช่วยคุณ คำแนะนำเหล่านี้ถือว่าเป็นสภาวะแวดล้อม Linux / Unix ฉันใช้คำแนะนำเหล่านี้เป็นการส่วนตัวกับ Fedora Linux และสามารถบอกคุณได้ว่าทำงานได้ดี แต่ฉันไม่รู้เกี่ยวกับระบบ * nix อื่น ๆ เช่น Macs ฉันไม่ทราบถึงคำแนะนำของ Windows ที่คล้ายกัน แต่ฉันสามารถลองติดตามดูว่าคุณใช้ Windows หรือไม่ คำสั่งที่แน่นอนจะแตกต่างกันบ้างจากโทรศัพท์ไปยังโทรศัพท์เนื่องจากอุปกรณ์ต่าง ๆ ใช้ตารางพาร์ทิชันที่แตกต่างกัน

โดยทั่วไปแล้วคุณต้องดึง boot.img ปัจจุบันของคุณออกจากโทรศัพท์แกะมันแตก ramdisk และค้นหาไฟล์default.prop ro.secureนี้เป็นไฟล์ข้อความธรรมดาที่คุณจะต้องเปิดในโปรแกรมแก้ไขข้อความแล้วหาบรรทัดที่มีค่า ถ้าบรรทัดกล่าวว่าแล้วคุณจะต้องเปลี่ยนไปro.secure=1 ro.secure=0หลังจากนั้นคุณสามารถแพ็ค ramdisk และ boot.img ใหม่จากนั้นแฟลชไปยังโทรศัพท์ของคุณ เมื่อคุณเริ่มต้นคุณจะได้รับการต้อนรับด้วย#พรอมต์เมื่อใดก็ตามที่คุณดำเนินการได้โดยไม่ต้องวิ่งadb shellsu

อีกวิธีหนึ่งถ้าคุณใช้ ROM แบบกำหนดเอง แต่ไม่มีการปรับแต่งนี้คุณสามารถคลายซิป ROM และแก้ไข boot.img ที่มาพร้อมกับมันโดยใช้ขั้นตอนข้างต้น จากนั้นคุณสามารถ zip ROM ด้วย boot.img ที่เพิ่งปรับปรุงใหม่และแฟลชไฟล์ zip ตามปกติ

สิ่งนี้อาจไปโดยไม่บอก แต่ระวังเมื่อทำสิ่งนี้ การล้อเล่นกับพาร์ทิชันสำหรับบู๊ตของคุณสามารถทำลายโทรศัพท์ของคุณได้อย่างง่ายดายและบังคับให้คุณกู้คืนผ่าน HBoot ฉันอยากจะแนะนำการทดสอบ Fastboot เพื่อให้แน่ใจว่าคุณสามารถใช้คำสั่ง Fastboot เพิ่มเติมและทำการกู้คืน สิ่งนี้แตกต่างกันเล็กน้อยตามรุ่นของคุณ แต่โทรศัพท์ส่วนใหญ่มีซอฟต์แวร์เดสก์ท็อปบางประเภทที่สามารถเรียกใช้เพื่อเชื่อมต่อโทรศัพท์ใหม่ได้เช่นกัน


ตัวเลือกที่สามคือในหลายกรณีอาจเป็นไปได้ที่จะรีสตาร์ทadbdบนอุปกรณ์ของคุณด้วยสิทธิ์ของรูท ความเป็นไปได้อย่างหนึ่งคือการเรียกใช้งานadb rootจากพีซีปลายทางแม้ว่ามันจะไม่สามารถใช้ได้กับการกำหนดค่า ROM ทั้งหมด (ROM จะต้องสร้างขึ้นเป็น "userdebug" หนึ่ง) นอกจากนี้คุณยังสามารถลองแอปที่ไม่ปลอดภัย Chainfire ของ adbd สิ่งนี้จะไม่คงอยู่ในการรีบูตดังนั้นคุณจะต้องใช้แอพหรือadb rootอีกครั้งเมื่อใดก็ตามที่คุณรีสตาร์ทโทรศัพท์


โทรศัพท์บูตด้วยการอนุญาตรูทด้วยหรือไม่ อาจมีปัญหาด้านความปลอดภัย
แมทธิวอ่าน

1
@Matthew: AFAIK จะอนุญาตเฉพาะการอนุญาตadbdรูทบนโทรศัพท์เป็นค่าเริ่มต้น มีโพสต์จากสมาชิกของทีม Android ที่บอกเป็นนัย แต่ไม่ได้พูดอย่างชัดเจน การกระทำนี้ต่อ AOSP ยังบอกเป็นนัยว่ามันเป็นเพียงธงที่adbdตรวจสอบการเริ่มต้น (ฉันไม่เห็นที่อื่นในแหล่งที่มา) ดังที่ได้กล่าวไปแล้ว ROM ที่กำหนดเองส่วนใหญ่ที่ฉันได้เห็น (รวมอยู่ใน CM) ตั้งค่าเป็น 0
eldarerathis

ฉันจะบอกว่าฉันไม่ได้ 100% ข้างต้น แต่ ฉันไม่พบเอกสารอย่างเป็นทางการที่เกี่ยวข้องกับไฟล์ default.prop แม้ว่าบางที Google-fu ของฉันอาจจะอ่อนแอในคืนนี้ ...
eldarerathis

เพิ่งค้นพบadb rootคำสั่งเพื่อรีสตาร์ท adbd ในโหมด auto-su ดูเหมือนว่ามันอาศัยสิ่งนี้ ฉันคิดว่าคุณพูดถูกว่าเป็นแค่ธง
แมทธิวอ่าน

1
@MatthewRead: ซอร์สโค้ดในคอมมิชชั่น I ที่เชื่อมโยงกับจริง ๆ มีความคิดเห็นเกี่ยวกับเอฟเฟกต์// ... except we allow running as root in userdebug builds if the service.adb.root property has been set by the "adb root" command"ดังกล่าว:) อนึ่งนั่นเป็นวิธีที่ BurritoRoot รุ่นแรกสำหรับ Kindle Fire ทำงาน IIRC
eldarerathis

15

ถ้าโทรศัพท์ของคุณถูกรูทคุณสามารถเรียกใช้คำสั่งด้วยคำสั่ง "su -c"

นี่คือตัวอย่างของคำสั่ง cat บนไฟล์ build.prop เพื่อรับข้อมูลผลิตภัณฑ์โทรศัพท์

adb shell "su -c 'cat /system/build.prop |grep "product"'"

สิ่งนี้เรียกใช้การอนุญาตรูทและรันคำสั่งภายใน ''

สังเกตุ 5 เครื่องหมายอัญประกาศซึ่งจำเป็นต้องให้คุณปิดอัญประกาศสิ้นสุดทั้งหมดหรือคุณจะได้รับข้อผิดพลาด

เพื่อชี้แจงรูปแบบเป็นเช่นนี้

adb shell "su -c '[your command goes here]'"

ตรวจสอบให้แน่ใจว่าคุณป้อนคำสั่งอย่างแน่นอนในแบบที่คุณใช้ในเชลล์

ลองดูสิหวังว่านี่จะช่วยได้



1

คุณพยายามเรียกใช้ในฐานะรูทเพื่ออะไร คุณกำลังบอกว่าคุณต้องการรันเชลล์ ADB ด้วยรูท แต่คุณไม่ต้องการใช้เชลล์ ADB ใช่ไหม คุณช่วยอธิบายได้ไหม

หากแอปพลิเคชันร้องขอการเข้าถึงรูทแอปพลิเคชั่น SuperUser บนโทรศัพท์ของคุณควรจัดการกับการอนุญาตหรือไม่ กระบวนการที่คุณรูตโทรศัพท์ควรมีแอปพลิเคชั่น SuperUser


ฉันต้องการที่จะเรียกใช้ adb gdbserver เปลือกจากสถานีของฉันแทนจะเข้าไปในเปลือกจะรัน
แฮงค์

2
@ แฮงค์: เทอร์มินัลเกือบทุกครั้งจะต้องเชื่อมต่อกับเชลล์เพื่อทำงานที่มีประโยชน์ บางทีคุณควรอธิบายความหมายของคำว่า "terminal" และ "shell" เนื่องจากดูเหมือนว่าคุณจะมีความคิดที่แตกต่างไปจากสิ่งที่พวกเขาพูดถึงในภาษา Linux / Android มาตรฐาน
Lie Ryan

เพื่อให้คุณสามารถทำadb shell psหรือadb shellจากนั้นpsรับรายการกระบวนการทำงาน ดังนั้นบางสิ่งจำเป็นต้องมีการเข้าถึงรูทฉันต้องการที่จะทำสิ่งที่เป็นอดีต
แฮงค์

1
เหตุผล "ทำไม" (โดยเฉพาะอย่างยิ่งที่เกี่ยวข้องกับ gdbserver) เพื่อให้สามารถใช้ความสามารถในสคริปต์ที่ทำงานบนเครื่องพัฒนา อย่างไรก็ตามเป็นไปได้สำหรับสคริปต์ที่ไพพ์คำสั่งเกี่ยวกับสิ่งที่ adb คิดว่าเป็นเชลล์แบบอินเทอร์แอคทีฟดังนั้นการมีค่าเริ่มต้นของ adb ไปที่รูทจึงไม่จำเป็นสำหรับเหตุผลนั้น
Chris Stratton

1

คุณสามารถเขียนสคริปต์ของคุณบนโทรศัพท์และเพียงแค่ให้ adb รันมันตัวอย่างเช่น:

adb shell sh /sdcard/myscript.sh

สคริปต์สามารถยกระดับตัวเองโดยไม่มีการแทรกแซงของคุณ (สมมติว่า SuperUser ตั้งค่าให้จดจำการอนุมัติ) ตัวอย่างเช่น:

su
pm setInstallLocation 1

ฉันเพิ่งทำสิ่งนี้บนโทรศัพท์ของฉันด้วยความสำเร็จปัญหาเดียวคือฉันไม่ได้คิดวิธีที่จะจบเซสชัน adb shell อย่างหมดจด ฉันต้อง Ctrl-C ในเชลล์ Windows ของฉันเพื่อกลับไปที่พรอมต์คำสั่งของ Windows - ไม่เช่นนั้น adb จะอยู่ที่#พร้อมท์และไม่ยอมรับอินพุต


0

ฉันใช้สำหรับการซ่อมแซมปัญหาปุ่มบ้านซ่อมไม่ได้


อุปกรณ์ adb

adb shell su -c commands

หรือ

adb root shell sqlite3 /data/data/com.android.providers.settings/database/settings.db "INSERT INTO ปลอดภัย (ชื่อ, ค่า) ค่า ('device_provisioned', '1');"

adb kill-server


-1

คุณสามารถตั้ง suid bit บน 'sh' ของคุณ ฉันใช้ BusyBox ดังนั้นคำแนะนำอาจไม่ตรงกับการตั้งค่าของคุณ:

  1. adb shell
  2. su
  3. mount -o remount, rw / system (หรือ: adb remount)
  4. ls -la / system / bin / sh lrwxr-xr-x เชลล์รูท 2012-11-10 15:20 sh -> mksh
  5. chmod 4755 / ระบบ / bin / sh
  6. ls -la / system / bin / mksh
    -rwsr-xr-x root shell 157520 2012-11-10 09:54 mksh (สังเกตว่า suid bit ถูกตั้งค่าไว้)
  7. ^ D
  8. adb shell

และคุณควรได้รับพรอมต์รูต


3
-1 จากฉัน สิ่งนี้ไม่ปลอดภัยและเปิดหลุมขนาดใหญ่ แอปใด ๆ ก็ตามอาจกลายเป็นรูตและทำลายความเสียหาย
ce4

6
อย่างไม่ทำอย่างนั้นนี่คือการรักษาความปลอดภัยหลุมภัยพิบัติ (ข้อจำกัดความรับผิดชอบ: ฉันเป็นผู้mkshดูแล)
mirabilos
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.