Per un motivo o per un altro, ai possessori di un dispositivo Android potrebbe capitare di aver bisogno di modificare un file di sistema. Questi file, però, sono ovviamente protetti, in modo da evitare disastri agli utenti meno esperti o più incoscienti. Ad ogni modo, la necessità (o la già citata incoscienza) può spingere a superare queste semplici protezioni e garantire accesso completo (quindi anche in scrittura) nella cartella /system su Android.
Il requisito fondamentale è ovviamente un telefono ROOTato. A ciò si possono affiancare due strumenti che rendono le operazioni su Android estremamente confortevoli: BusyBox e adb. BusyBox è generalmente presente in tutte le custom rom e comunque è uno dei primi tool che viene installato sullo smartphone una volta ottenuti i permessi di root; fornisce una serie di programmi molto utili in alcune evenienze. Adb, invece, è uno strumento dello SDK Android che permette di comunicare tramite riga di comando con un dispositivo o emulatore Android connesso al pc.
In ogni caso i due tool appena elencati non sono strettamente necessari.
Procedura
- Per cominciare è necessario abilitare la modalità “Debug USB” su Android
- Collegare quindi il telefono al pc tramite USB e lanciate una shell con adb attraverso il comando
adb shell
(in alternativa utilizzate una applicazione come Terminal Emulator per avere una shell direttamente sul vostro dispositivo) - A questo punto è necessario individuare la partizione di sistema cercando la riga che contiene
/system
nell’output di questo comandocat /proc/mounts
(potete aiutarvi con uncat /proc/mounts | grep system
)
Un esempio del possibile esito del comando è questo:
rootfs / rootfs ro,relatime 0 0
tmpfs /dev tmpfs rw,relatime,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
/dev/block/mtdblock4 /system yaffs2 ro,relatime 0 0
/dev/block/mtdblock6 /data yaffs2 rw,nosuid,nodev,relatime 0 0
/dev/block/mtdblock7 /cust yaffs2 ro,relatime 0 0
/dev/block/mtdblock5 /cache yaffs2 rw,nosuid,nodev,relatime 0 0
/dev/block/vold/179:2 /data/sdext2 ext4 rw,relatime,barrier=1,data=ordered 0 0
Dove noi saremo interessati alla riga:
/dev/block/mtdblock4 /system yaffs2 ro,realtime 0 0
In particolare su questa riga è possibile evidenziare le seguenti informazioni
–/dev/block/mtdblock4
è il device che viene montato
–/system
è il punto in cui il device viene montato
–yaffs2
è il tipo di file system
Molto probabilmente il device sul vostro dispositivo sarà diverso da quello in questo esempio, quindi utilizzate il vostro nel resto della guida - Acquisite i permessi di root digitando
su
, confermando eventuali richieste sul vostro dispositivo - Si procede quindi a montare in lettura e scrittura la partizione di sistema con il seguente comando:
mount -o rw,remount -t yaffs2 /dev/block/mtdblock4 /system
apportando le giuste modifiche al blocco e file system in base a quanto ottenuto al passo precedente.
Realizzare uno script
Il mio consiglio è quello di ricavare questi parametri una sola volta e poi scrivere uno script molto semplice per automatizzare l’operazione. Il file potrebbe essere il seguente:
#!/system/bin/sh
# Esempio di mountrwecho “Remount /system in rw…”
mount -o rw,remount -t yaffs2 /dev/block/mtdblock4 /system
Salvate poi il file in /system/xbin/
chiamanadolo semplicemente “mountrw” (senza virgolette). Ricordatevi di ottenere i privilegi di superuser prima di richiamare lo script. Da questo momento potrete rimontare comodamente la partizione di sistema con due semplici comandi:
$ su
# mountrw
Analogamente è possibile rimontare la partizione di sistema in sola lettura al termine delle nostre operazioni, al fine di garantire una maggiore sicurezza ed evitare cancellazioni accidentali. Il comando questa volta sarà
mount -o rw,remount -t yaffs2 /dev/block/mtdblock4 /system
Quindi il nostro corrispondente script “mountro” di esempio sarebbe essere il seguente:
#!/system/bin/sh
# Esempio di mountroecho “Remount /system in ro…”
mount -o ro,remount -t yaffs2 /dev/block/mtdblock4 /system
perchè mi restituisce che non ho scritto bene il comando mount?
Assicurati di avere i permessi di root e di aver installato BusyBox.
Se stai facendo copia-incolla tramite ADB, potresti aver copiato dei caratteri speciali, quindi devi riscrivere il comando a mano.
Mi dà l’errore di: “mount: operation not permitted.
Eppure ho installato Busybox ed ho anche il telefono rootato, cosa c’è che non va? :/
Bisogna essere root per usare mount, quindi devi digitare “su” nel terminale.
Effettivamente l’ho scritto solo nel codice di esempio dello script.
we fratè ottima guidozza! spero di mettere a frutto l’imparato oggi!
come si fa a mettere la password alla root,, per evitare che qualche malintenzionato ci faccià un bello scerzetto? ho provato il comando passwd ma sembra non funzionare!
Devi utilizzare una app per superuser che preveda l’inserimento di un PIN.
Di gratuita c’è solo https://play.google.com/store/apps/details?id=com.koushikdutta.superuser&hl=it
A pagamento trovi SuperSU Pro e Superuser Elite
domanda: a cosa mi serve ottenere i permessi di scrittura in /system?
Tecnicamente ti permette di fare tutto. Questa cosa mi è tornata utile per modificare alcuni script di custom rom, per rimuovere i suoni della fotocamera, integrare aggiornamenti di app nella rom, ecc. É un passo fondamentale per fare molto altro.
dove trovo una shell ?me lo spieghi grazie
E’ scritto chiaramente al primo punto delle istruzioni:
“[…] lanciare una shell con adb attraverso il comando adb shell (in alternativa utilizzate una applicazione come Terminal Emulator per avere una shell direttamente sul vostro dispositivo)”
Quindi basta usare ADB dal proprio PC o una app sullo smartphone.
Ciao a tutti, ho un LG E610 Optimus L5 Android V.4.1.2 dove vorrei sbloccare i permessi di scrittura.
Non sono molto pratico di questi procedimenti e vorrei sapere se c’è qualcuno che può indicarmi come muovermi.
Premetto che, è già ROOTato ed è già installato l’emulatore terminale con i permessi da superSU PRO.
Ora, non ho ben capito se solo con l’emulatore terminale posso seguire la procedura ed in che modo. Mi servirebbe un’utente in gamba e di buon cuore che possa seguirmi passo passo.
Se ci fosse qualcuno in grado di darmi assistenza in tal senso, non potrei che essergli infinitamente grato.
Buona giornata a tutti.
seguendo la vostra guida non riesco ad ottenere i permessi di scrittura in /system su tablet android pmp3084b prestigio
vi posto il risultato deilla procedura descritta con esito negativo
Potreste darci un occhiata facendomi capire dove sbaglio?
vi sarei infinitanebte grato visto che non riesco ad ottenere il root su questo dispositivo in nessun modo
:
livio@livio-desktop:~/android-sdk-linux/platform-tools$ adb shell
$ ls
cache
data
default.prop
dev
etc
flash
init
init.goldfish.rc
init.rk28board.rc
initlogo.rle
mnt
proc
sbin
sdcard
shared_prefs
sqlite_stmt_journals
sys
system
$ cat /proc/mounts
rootfs / rootfs rw 0 0
/dev/root / cramfs ro 0 0
tmpfs /dev tmpfs rw,mode=755 0 0
devpts /dev/pts devpts rw,mode=600 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
/dev/block/mtdblock4 /system cramfs ro 0 0
/dev/block/mtdblock7 /data ext3 rw,nosuid,nodev,errors=continue,data=ordered 0 0
/dev/block/mtdblock6 /cache ext3 rw,nosuid,nodev,errors=continue,data=ordered 0 0
/dev/block/mtdblock9 /data/data ext3 rw,nosuid,nodev,errors=continue,data=ordered 0 0
tmpfs /mnt tmpfs rw,mode=755,gid=1000 0 0
tmpfs /mnt/asec tmpfs rw,mode=755,gid=1000 0 0
/dev/block/vold/31:8 /mnt/sdcard vfat rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=1015,fmask=0002,dmask=0002,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8 0 0
/dev/block/vold/31:8 /mnt/secure/asec vfat rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=1015,fmask=0002,dmask=0002,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8 0 0
tmpfs /mnt/sdcard/.android_secure tmpfs ro,size=0k,mode=000 0 0
/dev/block/vold/179:1 /mnt/sdcard/external_sd vfat rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=1015,fmask=0002,dmask=0002,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8 0 0
$ mount -o rw,remount -t cramfs /dev/block/mtdblock4 /system
mount: Operation not permitted
$
Come scritto nell’articolo, per poter fare una cosa del genere è già necessario avere i permessi di root.
Avevo effettivamente dimenticato il punto in cui acquisire i permessi di superutente, quindi ho effettuato una modifica.
Prima di fare il remount, infatti, è necessario digitare il comando “su” per diventare root.
grazie mille per la risposta
quindi se ho capito bene non potendo ottenere ilroot del dispositivo non è possibile modificare i permessi di scrittura in /system
Il problema in effetti è che non conosco nessuna procedura per ottenere il root di questo dannato tablet
ho provato con tutti gli explo possibili
non conosco a fondo android ma sto cercando di imparare come gestire questa piattaforma da riga di comando
Azzardo una ipotesi:
e se provassi a modificare il kernel?
magari editandolo in qualche maniera,tutti i consigli sono bene accetti
oramai sta diventando una questione di principio
grazie
Ciao a tutti ragazzi e grazie per la guida.
Io ho seguito il tutto alla lettera ma il terminale mi restituisce:
Mount : read-only file system
Sapete aiutarmi? Grazie anticipo