Bagaimana cara saya memanggil "su" dari terminal prompt?

7

Saya bisa mendapatkan root prompt di terminal dengan menjalankan satu exploit yang didokumentasikan di tempat lain. (misal di sini: http://wiki.cyanogenmod.com/wiki/Motorola_Droid_2_Global:_Full_Update_Guide )

Pada titik ini, saya dapat menginstal biner "su" dan memberikannya izin 4755. Ini harus memungkinkan siapa pun untuk mengeksekusinya, dan karena pemilik biner adalah "root" dan bit lengket diatur, saya harus menjadi root. Tapi saya rupanya tidak punya cara un-menjadi root dari terminal sebelum reboot. Tapi, setelah saya reboot, sepertinya saya tidak bisa menjadi root menggunakan 'su'.

$ ls -l /system/bin/su
-rwsr-xr-x root    app_101    26234 2012-07-09 15:00 su

Ok, izin terlihat baik-baik saja, seharusnya saya bisa menjalankannya untuk menjadi root, tetapi hanya dalam permohonan khusus terminal ini.

$ /system/bin/su
Permission denied

Itu juga gagal jika saya menentukan perintah untuk dijalankan sebagai root, atau dengan argumen lain:

$ /system/bin/su /system/bin/sh
Permission denied

Mengapa? Apakah ada mekanisme lain yang bekerja? Saya tidak ingin menginstal Superuser.apk, karena saya hanya ingin cara agar saya dapat sementara mendapatkan root shell jika diperlukan, misalnya untuk menghapus file yang tidak diinginkan secara manual. Selain itu, Superuser.apk juga bergantung pada su binary, jadi ia harus memiliki beberapa cara untuk memanggilnya, jadi mengapa saya tidak bisa meniru itu di terminal?

Sunting: Saya punya pemikiran lain, jadi saya mencoba menyalin / bin / sh ke lokasi lain dan membuatnya suid root. Tapi sementara saya bisa menjalankan biner baru, itu tidak memberi saya root. Apakah Android melakukan sesuatu yang rumit / berbeda dengan suid yang Linux biasa tidak lakukan?

Michael
sumber
1
Memiliki 'su' yang tidak terlindungi pada perangkat ini cukup berisiko, karena apa pun yang mencoba menggunakannya akan mendapatkannya tanpa ada konfirmasi pengguna yang ingin ditambahkan oleh aplikasi superuser sebagai gateway.
Chris Stratton
Benar, yah ... saya sedang mencoba merencanakan ke depan. Tidak yakin bagaimana pembaruan berikutnya akan mencoba untuk menyingkirkan su, jadi saya meletakkannya di banyak tempat yang berbeda dengan nama yang berbeda. Ternyata pembaruan menghapus bit yang lengket, dan saya tidak dapat menjalankan suid dari tempat lain selain sistem. Baiklah
Michael

Jawaban:

6

Petunjuknya ada di id pemilik / grup ...

$ ls -l /system/bin/su
-rwsr-xr-x root    app_101    26234 2012-07-09 15:00 su

Perhatikan id grup diatur ke 'app_101', yang seharusnya menjadi 'root', tetapi sekali lagi, Anda membutuhkan busyboxbiner (yang merupakan bagian dari biner SuperUser.apk, ketika diinstal, ia menyalin biner yang bersangkutan ke dalam /system/xbin) agar untuk dapat melakukannya chown.

t0mm13b
sumber
Ya, ini akan menjadi masalah. Pada akhirnya busybox tidak diperlukan karena stok android chown dapat mengubah grup juga, menggunakan nama pengguna chown. Grup nama file (setidaknya dari Froyo-ICS)
Chris Stratton
1

Coba tambahkan -copsi. misalnya

su -c sh

atau

 su -c 'echo bogus'

(untuk argumen lainnya)

d14b0ll0s
sumber
0

Sedikit lebih menggali dan saya pikir saya telah menemukan jawabannya. Alasan tidak berfungsi adalah karena aplikasi Terminal tidak meminta izin pengguna super dalam manifesnya, misalnya:

<uses-permission android:name="android.permission.ACCESS_SUPERUSER"/>

Lapisan keamanan tambahan ini tampaknya karena aplikasi terminal adalah aplikasi java, meskipun ia menyembunyikannya dengan baik. Superuser tampaknya menipiskan hal-hal entah bagaimana sehingga aplikasi java bisa mendapatkan izin ini, bahkan jika mereka tidak tahu mereka membutuhkannya ketika mereka dibuat.

Michael
sumber
2
ACCESS_SUPERUSERizin tidak terhubung dengan masalah Anda
janot