[java] Chmod op Android

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ObAt
  • Registratie: Januari 2009
  • Laatst online: 12-09 13:59

ObAt

Loading...

Topicstarter
Hallo Tweakers,

Het lukt mij maar niet om bepaalde bestanden te chmodden. Ik heb een gerootte Galaxy Tab waar Busybox op is geinstalleerd, maar deze commando's willen niet werken:

Java:
1
2
Runtime.getRuntime().exec("su");
Runtime.getRuntime().exec("/system/bin/chmod 777" + "/data/.nvmac.info");


In de Android Terminal werken deze commando's wel gewoon, en dat vind ik raar.

Hopelijk kan iemand mij helpen,

ObAt

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG


Acties:
  • 0 Henk 'm!

  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 11:37

TheNephilim

Wtfuzzle

Misschien heb je hier wat aan: http://stackoverflow.com/...a-chmod-on-rooted-devides

Wel een oudere versie, maar zoveel is er vast niet veranderd op dit gebied

Acties:
  • 0 Henk 'm!

  • ObAt
  • Registratie: Januari 2009
  • Laatst online: 12-09 13:59

ObAt

Loading...

Topicstarter
Ik ben vrij nieuw in de Java wereld, daarom snap ik de code ook nog niet helemaal. Ik heb de volgende code gevonden maar ik weet nog niet echt hoe ik deze kan toepassen.

Java:
1
2
3
4
5
6
7
8
9
10
11
Process process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
DataInputStream osRes = new DataInputStream(process.getInputStream());
for (String single : commands) {
   os.writeBytes(single + "\n");
   os.flush();
   res.add(osRes.readLine());
}
os.writeBytes("exit\n");
os.flush();
process.waitFor();

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG


Acties:
  • 0 Henk 'm!

  • EddoH
  • Registratie: Maart 2009
  • Niet online

EddoH

Backpfeifengesicht

ObAt schreef op dinsdag 01 mei 2012 @ 11:33:
Hallo Tweakers,

Het lukt mij maar niet om bepaalde bestanden te chmodden. Ik heb een gerootte Galaxy Tab waar Busybox op is geinstalleerd, maar deze commando's willen niet werken:

code:
1
2
Runtime.getRuntime().exec("su");
Runtime.getRuntime().exec("/system/bin/chmod 777" + "/data/.nvmac.info");


In de Android Terminal werken deze commando's wel gewoon, en dat vind ik raar.

Hopelijk kan iemand mij helpen,

ObAt
Misschien te simpel, maar mis je daar niet een spatie? (Runtime.getRuntime().exec("/system/bin/chmod 777" + "/data/.nvmac.info");)

Acties:
  • 0 Henk 'm!

  • ObAt
  • Registratie: Januari 2009
  • Laatst online: 12-09 13:59

ObAt

Loading...

Topicstarter
Klopt wat slordig! Maar deze code werkt ook niet.

Java:
1
2
Runtime.getRuntime().exec("su");
Runtime.getRuntime().exec("/system/bin/chmod 777 /data/.nvmac.info");


Of deze code:


Java:
1
2
Runtime.getRuntime().exec("su");
Runtime.getRuntime().exec("/system/bin/chmod 777" + " /data/.nvmac.info");

[ Voor 3% gewijzigd door ObAt op 01-05-2012 13:54 ]

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG


Acties:
  • 0 Henk 'm!

  • rhoolwerf
  • Registratie: November 2007
  • Laatst online: 11:11
Weet je zeker dat het "su" commando wel goed gaat?
Als ik het goed herinner moet je daar nog een wachtwoord o.i.d. aan meegeven (in ieder geval als ik op mijn ubuntu "sudo cat /iets" doe moet ik mijn sudo-wachtwoord opgeven)

Misschien dat ik nu onzin praat, maar gaat dit sowieso wel werken? Ik weet niet hoe de programmatuur omgaat met sessies maar zelfs als "su" goed gaat, ben je dan nog steeds wel een superuser als je aan het tweede commando begint?

In de Android terminal zit je binnen een sessie, misschien dat dat uitmaakt.

Acties:
  • 0 Henk 'm!

  • ObAt
  • Registratie: Januari 2009
  • Laatst online: 12-09 13:59

ObAt

Loading...

Topicstarter
Ik krijg een melding dat Superuser rechten zijn toegekend, dat staat ook trouwens in de log van Superuser. Het lukt mij ook om bestanden te schrijven in de '/data/'-map, zonder Superuser-rechten is dit niet mogelijk.

Heb trouwens nog dit geprobeerd, maar helaas werkt het ook niet:

Java:
1
2
Process nv = Runtime.getRuntime().exec("/system/bin/chmod 777 /data/.nvmac.info");
nv.waitFor();

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG


Acties:
  • 0 Henk 'm!

  • Mental
  • Registratie: Maart 2000
  • Laatst online: 20-10-2020
Kan je geen sudo gebruiken ipv handmatig SU te gebruiken?
Kan trouwens ook zijn dat je door 2 verschillende statements in java te gebruiken uit je SU sessie knalt voor je 2e statement.

Doe anders iets als:
Runtime.getRuntime().exec("su && /system/bin/chmod 777 /data/.nvmac.info");

[ Voor 30% gewijzigd door Mental op 01-05-2012 14:14 ]


Acties:
  • 0 Henk 'm!

  • ObAt
  • Registratie: Januari 2009
  • Laatst online: 12-09 13:59

ObAt

Loading...

Topicstarter
Mental schreef op dinsdag 01 mei 2012 @ 14:13:
Kan je geen sudo gebruiken ipv handmatig SU te gebruiken?
Kan trouwens ook zijn dat je door 2 verschillende statements in java te gebruiken uit je SU sessie knalt voor je 2e statement.

Doe anders iets als:

[...]
'sudo' is geen commando op Android. Maar misschien wil dit helpen:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Process nv = Runtime.getRuntime().exec("su && /system/bin/chmod 777 /data/.nvmac.info");

                   try {
                        nv.waitFor();
                        File myFile = new File("/data/.nvmac.info");
                        myFile.createNewFile();
                        FileOutputStream fOut = new FileOutputStream(myFile);
                        OutputStreamWriter myOutWriter = 
                                                new OutputStreamWriter(fOut);
                        myOutWriter.append(TotalMacAddress);
                        myOutWriter.close();
                        fOut.close();
                        Toast.makeText(getBaseContext(),
                                "Nvmac done",
                                Toast.LENGTH_SHORT).show();
                    } catch (Exception e) {
                        Toast.makeText(getBaseContext(), e.getMessage(),
                                Toast.LENGTH_SHORT).show();
                    }



Trouwens, als ik de permissions van het bestand handmatig op 777 zet werkt het wel.

[ Voor 3% gewijzigd door ObAt op 01-05-2012 14:21 ]

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 17:07
Als je enige kennis van de shell hebt zou je moeten inzien dat su && commando niet werkt, aangezien su (indien succesvol) zelf een nieuwe shell start. Het commando erna wordt pas later, in de originele shell in de originele context uitgevoerd (indien de subshell met succes eindigt).

Probeer in plaats daarvan:
su -c '/system/bin/chmod 777 /data/.nvmac.info'

Acties:
  • 0 Henk 'm!

  • ObAt
  • Registratie: Januari 2009
  • Laatst online: 12-09 13:59

ObAt

Loading...

Topicstarter
Soultaker schreef op dinsdag 01 mei 2012 @ 14:36:
Als je enige kennis van de shell hebt zou je moeten inzien dat su && commando niet werkt, aangezien su (indien succesvol) zelf een nieuwe shell start. Het commando erna wordt pas later, in de originele shell in de originele context uitgevoerd (indien de subshell met succes eindigt).

Probeer in plaats daarvan:
su -c '/system/bin/chmod 777 /data/.nvmac.info'
Buiten het feit dat ik succesvol Superuserrechten krijg heb ik nog steeds een Permission Denied error. Hij chmod niet succesvol op een of andere manier. Ik vind het echt vreemd aangezien het in de terminal wel werkt.

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 17:07
Hoe weet je dan dat je succesvol superuserrechten krijgt?

Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 17:26

Patriot

Fulltime #whatpulsert

Soultaker schreef op dinsdag 01 mei 2012 @ 15:06:
Hoe weet je dan dat je succesvol superuserrechten krijgt?
su op android is via een omweg toch een soort van sudo, je moet iig toestemming geven voordat na een su-commando ook daadwerkelijk superuserrechten worden gegeven. Bovendien wordt er een log bijgehouden van de momenten waarop applicaties superuserrechten verkrijgen.

Acties:
  • 0 Henk 'm!

  • ObAt
  • Registratie: Januari 2009
  • Laatst online: 12-09 13:59

ObAt

Loading...

Topicstarter
Soultaker schreef op dinsdag 01 mei 2012 @ 15:06:
Hoe weet je dan dat je succesvol superuserrechten krijgt?
Wat Patriot zegt klopt, en op het moment als een applicatie Superuser-rechten krijgt dan komt er een Toast melding. Ook kan ik naar map schrijven die zonder Superuser-rechten niet beschrijfbaar is.

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 17:07
Heeft su op de Android dan wel een -c optie? Kun je eens su --help ofzo uitvoeren op de shell?

Acties:
  • 0 Henk 'm!

  • ObAt
  • Registratie: Januari 2009
  • Laatst online: 12-09 13:59

ObAt

Loading...

Topicstarter
Soultaker schreef op dinsdag 01 mei 2012 @ 16:31:
Heeft su op de Android dan wel een -c optie? Kun je eens su --help ofzo uitvoeren op de shell?
Superuser heeft inderdaad geen extra opties op android, in tegenstelling op andere OS'en.

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG


Acties:
  • 0 Henk 'm!

  • EddoH
  • Registratie: Maart 2009
  • Niet online

EddoH

Backpfeifengesicht

ObAt schreef op dinsdag 01 mei 2012 @ 17:42:
[...]


Superuser heeft inderdaad geen extra opties op android, in tegenstelling op andere OS'en.
oh?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 adb shell
# su -c 'ls'
debug
config
cache
default.prop
data
var
tmp
sdcard
acct
mnt
d
etc
dev
sys
proc
internalstorage
system
# exit


oftewel: dat ligt er maar net aan wat voor filesystem erop staat ;)

[ Voor 8% gewijzigd door EddoH op 01-05-2012 18:12 ]


Acties:
  • 0 Henk 'm!

  • ObAt
  • Registratie: Januari 2009
  • Laatst online: 12-09 13:59

ObAt

Loading...

Topicstarter
Hmm daar moet ik jou inderdaad toch gelijk ingeven! Ik wel benadrukken dat ik nog een 'noobje' ben op het gebied van Android programmeren ;)

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG


Acties:
  • 0 Henk 'm!

  • ObAt
  • Registratie: Januari 2009
  • Laatst online: 12-09 13:59

ObAt

Loading...

Topicstarter
Ik heb ergens iets gevonden wat misschien kan helpen.

Java:
1
2
3
4
5
6
7
8
9
10
public int chmod(File path, int mode) throws Exception {
  Class fileUtils = Class.forName("android.os.FileUtils");
  Method setPermissions =
      fileUtils.getMethod("setPermissions", String.class, int.class, int.class, int.class);
  return (Integer) setPermissions.invoke(null, path.getAbsolutePath(), mode, -1, -1);
}

...
chmod("/foo/bar/baz", 0755);
...


Ik weet alleen niet hoe ik deze code precies toe moet passen. Misschien kan iemand mij helpen.

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 17:07
Ten eerste: kun je niet direct die FIleUtils klasse uit de android.os package importeren?

Ten tweede: hiermee los je het fundamentele probleem niet op dat je Java applicatie onder een andere gebruiker draait, die geen rechten heeft op het bestand waarvan je de permissies probeert aan te passen. Anders hoefde je überhaupt su niet aan te roepen, natuurlijk.

[ Voor 65% gewijzigd door Soultaker op 05-05-2012 15:09 ]


Acties:
  • 0 Henk 'm!

  • ObAt
  • Registratie: Januari 2009
  • Laatst online: 12-09 13:59

ObAt

Loading...

Topicstarter
Met Superuser rechten heb je toch ook gelijk root rechten als ik mij niet vergis. Dan heb je toegang tot alle bestanden. Google wil dit natuurlijk niet omdat dit een ideale omstandigheid is voor virussen, daarom is android.os.FileUtitls ook niet meer ondersteunt en is al uit de SDK verdwenen. Ikzelf heb vrij weinig Java en Andorid ervaring dus ik zal niet echt weten hoe ik nou een bestand zou moeten beschrijven zonder schrijfrechten (Het bestand staat op chmod 0400), als ik het bestand handmatig op 777 zet dan werkt het programma namelijk wel goed.

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG


Acties:
  • 0 Henk 'm!

  • Thralas
  • Registratie: December 2002
  • Laatst online: 21-09 21:46
In de reference lees ik over jouw exec-call:

Executes the specified program in a separate native process.

Ik zie nergens expliciet vermeld dat 't aan een shell word gevoerd, dus dan kun je helemaal geen arguments meegeven op de manier dat jij dat probeert.

Probeer eens: public Process exec (String[] progArray)

Executes the specified command and its arguments in a separate native process.
Pagina: 1