Có cách nào để tôi chạy Adb shell với quyền root mà không cần nhập 'su' không?


45

Có cách nào để tôi chạy Adb shell với quyền root mà không cần nhập sukhông? Tôi muốn có thể có quyền truy cập root mà không cần đi vào shell.

Câu trả lời:


40

Nếu tôi hiểu chính xác câu hỏi của bạn, bạn đang hỏi cách tự động truy cập root khi bạn chạy adb shell, để bạn không phải vào shell và gõ suđể thực thi lệnh dưới quyền root trên điện thoại.

Điều này được kiểm soát bởi một cờ trong phân vùng khởi động của bạn, mà hầu hết các ROM tùy chỉnh đã sửa đổi để cho phép quyền root theo mặc định. Nếu bạn bị rớt xuống $khi bạn sử dụng adb shellthì bạn có hai tùy chọn vĩnh viễn và một tùy chọn tạm thời (nghĩa là tạm thời nó không bị dính nếu bạn khởi động lại):

  1. Flash ROM bao gồm sửa đổi
  2. Tạo một boot.img tùy chỉnh và flash nó vào điện thoại của bạn
  3. Khởi động lại adbdtrên thiết bị của bạn với quyền root

Số 2 thực sự không khó lắm, nhưng nó có thể hơi nguy hiểm nếu bạn bất cẩn. Có một bài viết wiki ở đây giải thích quá trình và bao gồm một vài tập lệnh Perl để giúp bạn. Các hướng dẫn này giả định môi trường Linux / Unix. Cá nhân tôi đã sử dụng các hướng dẫn này trên Fedora Linux và có thể cho bạn biết rằng chúng hoạt động, nhưng tôi không biết về các môi trường * nix khác như máy Mac. Tôi cũng không biết bất kỳ hướng dẫn tương tự nào của Windows, nhưng tôi có thể thử theo dõi một số nếu bạn ở trên Windows. Các lệnh chính xác sẽ thay đổi phần nào từ điện thoại này sang điện thoại khác vì các thiết bị khác nhau sử dụng các bảng phân vùng khác nhau.

Tuy nhiên, nói chung, bạn cần phải rút boot.img hiện tại khỏi điện thoại của mình, giải nén nó, giải nén ramdisk và tìm tệp default.prop . Đây là một tệp văn bản gốc, bạn cần mở trong trình soạn thảo văn bản và sau đó tìm dòng chứa giá trị ro.secure. Nếu dòng nói ro.secure=1thì bạn cần thay đổi nó thành ro.secure=0. Sau đó, bạn có thể đóng gói lại ramdisk và boot.img, sau đó flash nó vào điện thoại của bạn. Khi bạn khởi động lại, bạn sẽ được chào đón bằng #lời nhắc bất cứ khi nào bạn thực hiện adb shellmà không phải chạy su.

Ngoài ra, nếu bạn đang sử dụng ROM tùy chỉnh nhưng nó không có sửa đổi này, bạn có thể giải nén ROM và sửa đổi boot.img đi kèm với nó bằng các bước trên. Sau đó, bạn có thể nén ROM bằng boot.img vừa được sửa đổi và flash tệp zip như bình thường.

Điều này có thể đi mà không nói, nhưng hãy cẩn thận khi làm điều này. Lộn xộn với phân vùng khởi động của bạn có thể dễ dàng phá hỏng điện thoại của bạn và buộc bạn phải khôi phục thông qua HBoot. Tôi đặc biệt khuyên bạn nên thử nghiệm Fastboot để đảm bảo bạn có thể sử dụng các lệnh Fastboot mở rộng và thực hiện khôi phục. Điều này thay đổi một chút dựa trên kiểu máy của bạn, nhưng hầu hết các điện thoại đều có một số loại phần mềm máy tính để bàn có thể chạy để phản hồi điện thoại.


Tùy chọn thứ ba là trong nhiều trường hợp có thể khởi động lại adbdtrên thiết bị của bạn với quyền root. Một khả năng là thực thi adb roottừ thiết bị đầu cuối PC, mặc dù điều này sẽ không hoạt động trên tất cả các cấu hình ROM (ROM phải được xây dựng dưới dạng "userdebug"). Bạn cũng có thể dùng thử ứng dụng không an toàn adbd của Chainfire . Điều này sẽ không tồn tại trong quá trình khởi động lại, vì vậy bạn sẽ cần sử dụng ứng dụng hoặc adb rootmột lần nữa bất cứ khi nào bạn khởi động lại điện thoại.


Điện thoại cũng khởi động với quyền root? Có thể là một vấn đề bảo mật.
Matthew Đọc

1
@Matthew: AFAIK, nó chỉ cho phép adbdcó quyền root trên điện thoại theo mặc định. Có một bài đăng từ một thành viên của nhóm Android ngụ ý điều này, nhưng không nói rõ ràng. Cam kết này với AOSP cũng ngụ ý rằng nó chỉ đơn giản là một lá cờ adbdkiểm tra khi khởi động (tôi không thấy nó ở nơi nào khác trong nguồn). Như tôi đã đề cập, phần lớn các ROM tùy chỉnh mà tôi đã thấy (bao gồm CM) đã được đặt thành 0.
eldarerathis

Tôi sẽ nói rằng tôi không 100% ở trên, mặc dù. Tôi không thể tìm thấy bất kỳ tài liệu chính thức nào liên quan đến tệp default.prop, mặc dù có lẽ Google-fu của tôi chỉ yếu tối nay ...
eldarerathis

Chỉ cần phát hiện ra adb rootlệnh khởi động lại adbd trong chế độ tự động su, rõ ràng nó phụ thuộc vào điều này. Tôi nghĩ rằng bạn đã đúng về việc nó chỉ là một lá cờ, mặc dù.
Matthew đọc

1
@MatthewRead: Mã nguồn trong cam kết tôi liên kết đến thực sự có một nhận xét về hiệu ứng đó :) // ... except we allow running as root in userdebug builds if the service.adb.root property has been set by the "adb root" command". Ngẫu nhiên, đó là cách phiên bản đầu tiên của BurritoRoot cho Kindle Fire hoạt động, IIRC.
eldarerathis

15

Vâng, nếu điện thoại của bạn đã được root, bạn có thể chạy các lệnh bằng lệnh "su -c".

Dưới đây là một ví dụ về lệnh mèo trên tệp build.prop để lấy thông tin sản phẩm điện thoại.

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

Điều này gọi quyền gốc và chạy lệnh bên trong ''

Lưu ý 5 dấu ngoặc kép, yêu cầu bạn đóng TẤT CẢ dấu ngoặc kép của bạn nếu không bạn sẽ gặp lỗi.

Để làm rõ định dạng là như thế này.

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

Hãy chắc chắn rằng bạn nhập lệnh CHÍNH XÁC theo cách mà bạn thường làm khi chạy nó trong shell.

Hãy thử, hy vọng điều này sẽ giúp.



1

Bạn đang cố gắng chạy root để làm gì? Bạn đang nói rằng bạn muốn chạy shell ADB bằng root nhưng bạn không muốn sử dụng shell ADB? Bạn có thể làm rõ?

Nếu ứng dụng yêu cầu quyền truy cập root, thì ứng dụng SuperUser trên điện thoại của bạn có nên xử lý cho phép hay không. Quá trình bạn root điện thoại nên có ứng dụng SuperUser.


Tôi muốn chạy gdbserver adb shell từ thiết bị đầu cuối của mình thay vì vào shell để chạy nó
Hank

2
@Hank: một thiết bị đầu cuối hầu như luôn luôn cần được kết nối với vỏ để thực hiện bất kỳ công việc hữu ích nào; có lẽ bạn nên làm rõ định nghĩa của bạn về "thiết bị đầu cuối" và "vỏ" vì dường như bạn có một ý tưởng khác về những gì chúng là so với cách nói chuẩn của Linux / Android
Lie Ryan

vì vậy bạn có thể làm adb shell pshoặc adb shellsau đó psđể có được danh sách quy trình đang chạy. Vì vậy, đôi khi yêu cầu quyền truy cập root, tôi muốn có thể làm trước đây.
Hank

1
Lý do "tại sao" (đặc biệt là khi gdbserver có liên quan) sẽ có thể sử dụng khả năng trong tập lệnh chạy trên máy phát triển. Tuy nhiên, tập lệnh có thể chuyển các lệnh vào những gì adb nghĩ là vỏ tương tác, do đó, việc mặc định adb để root thực sự không cần thiết vì lý do đó.
Chris Stratton

1

Thay vào đó, bạn có thể viết tập lệnh của mình trên điện thoại và chỉ cần adb thực thi nó, ví dụ:

adb shell sh /sdcard/myscript.sh

Tập lệnh có thể tự nâng cao mà không cần sự can thiệp của bạn (giả sử SuperUser được đặt để ghi nhớ phê duyệt), ví dụ:

su
pm setInstallLocation 1

Tôi đã thực hiện điều này trên điện thoại thành công, vấn đề duy nhất là tôi chưa tìm ra cách kết thúc sạch phiên adb shell. Tôi phải Ctrl-C trong trình bao Windows của mình để trở về dấu nhắc lệnh của Windows - nếu không thì adb chỉ nằm ở #dấu nhắc và không chấp nhận đầu vào.


0

tôi sử dụng để sửa lỗi nút home


thiết bị adb

vỏ adb su -c commands

hoặc là

adb root shell sqlite3 /data/data/com.android.providers.sinstall/database/sinstall.db "INSERT INTO an toàn (tên, giá trị) VALUES ('device_provisioned', '1');"

máy chủ tiêu diệt adb


-1

Bạn cũng có thể đặt bit suid trên 'sh' của mình. Tôi đang sử dụng BusyBox để hướng dẫn có thể không khớp với thiết lập của bạn:

  1. vỏ adb
  2. su
  3. mount -o remount, rw / system (hoặc: adb remount)
  4. ls -la / system / bin / sh lrwxr-xr-x shell root 2012-11-10 15:20 sh -> mksh
  5. chmod 4755 / hệ thống / thùng / sh
  6. ls -la / system / bin / mksh
    -rwsr-xr-x shell shell 157520 2012-11-10 09:54 mksh (chú ý bit suid được đặt)
  7. ^ D
  8. vỏ adb

và bạn nên có dấu nhắc gốc


3
-1 từ tôi. Điều này là không an toàn và mở ra một lỗ hổng lớn. Bất kỳ APP nào cũng có thể trở thành root và tàn phá.
ce4

6
Tuyệt đối không làm điều đó, đây là một lỗ hổng bảo mật thảm khốc . (Tuyên bố miễn trừ trách nhiệm: Tôi là người mkshbảo trì.)
mirabilos
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.