8953n的user获取权限以及remount

本文详细介绍了如何对8953n设备进行解锁获取root权限,并提供了具体的步骤指导。同时,文章还讲解了如何禁用系统验证、关闭SELinux以及如何在system目录下进行文件推送。

  8953n的user 想要root的话 不太方便,

当需要push文件到system下时,需要执行如下步骤:

1.     先使用FDSS signature Unlock机台,通过此方式解锁机台,便能够获得root权限

(a).在fastboot下使用           fastboot_89xx getvar cpusn ,获得CPUID

(b).将该CPUID发给PM,说明需要unlock机台。PM会回传一个signature文件

(c).将该signature文件用       fastboot_89xx flash asus_unlock signature         ,即可unlock机台。

 

2.     此时开机便可以使用     adb root

3.     adb root之后,下命令  adb disable-verity,然后重启机台

4.     重启之后便可以使用     adb remount命令,可以adb push文件到system目录下


这里的matthew@matthew:/media/matt2/8953-N/out/host/linux-x86/bin$ ./adb disable-verity    //一定要用n的out下面的adb才行
                Verity already disabled on /system

还有要记得关selinux

1|ASUS_Z01F_1:/ # setenforce  0


在这期间还遇到了问题就是还是push不进去,于是看看目录的挂载情况

1|ASUS_Z01F_1:/ # cat proc/mounts

/dev/block/bootdevice/by-name/modem /firmware   vfat   ro,context=u:object_r:firmware_file:s0,relatime,uid=1000,gid=1000,fmask=0337,dmask=0227,codepage=437,iocharset=iso8859-1,shortname=lower,errors=remount-ro 0 0

原来是个ro也就是read only 所以需要重新挂载

ASUS_Z01F_1:/ # umount firmware/


ASUS_Z01F_1:/firmware #  mount -t vfat  -o rw /dev/block/bootdevice/by-name/modem /firmware  挂成rw就可以了


system里的fw主要在两个目录下

ASUS_Z01F_1:/system/etc/firmware # ls
Splendid        cmnlib.b02              cppf.b06      keymaster.b06        
ZS550KL         cmnlib.b03              cppf.mbn      keymaster.mdt        
a225_pfp.fw     cmnlib.b04              cppf.mdt      leia_pfp_470.fw      
a225_pm4.fw     cmnlib.b05              goodixfp.b00  leia_pm4_470.fw      
a225p5_pm4.fw   cmnlib.mdt              goodixfp.b01  nvm_tlv.bin          
a300_pfp.fw     cmnlib64.b00            goodixfp.b02  nvm_tlv_1.3.bin      
a300_pm4.fw     cmnlib64.b01            goodixfp.b03  nvm_tlv_2.1.bin      
a330_pfp.fw     cmnlib64.b02            goodixfp.b04  nvm_tlv_3.0.bin      
a330_pm4.fw     cmnlib64.b03            goodixfp.b05  nvm_tlv_3.2.bin      
a420_pfp.fw     cmnlib64.b04            goodixfp.b06  phone_ct             
a420_pm4.fw     cmnlib64.b05            goodixfp.mdt  rampatch_tlv.img     
a506_zap.b00    cmnlib64.mdt            hbtp          rampatch_tlv_1.3.tlv 
a506_zap.b01    cpp_firmware_v1_10_0.fw ice40.bin     rampatch_tlv_2.1.tlv 
a506_zap.b02    cpp_firmware_v1_1_1.fw  ifaata.b00    rampatch_tlv_3.0.tlv 
a506_zap.elf    cpp_firmware_v1_1_6.fw  ifaata.b01    rampatch_tlv_3.2.tlv 
a506_zap.mdt    cpp_firmware_v1_2_0.fw  ifaata.b02    widevine.b00         
a530_gpmu.fw2   cpp_firmware_v1_4_0.fw  ifaata.b03    widevine.b01         
a530_pfp.fw     cpp_firmware_v1_5_0.fw  ifaata.b04    widevine.b02         
a530_pm4.fw     cpp_firmware_v1_5_2.fw  ifaata.b05    widevine.b03         
a530v1_pfp.fw   cpp_firmware_v1_6_0.fw  ifaata.b06    widevine.b04         
a530v1_pm4.fw   cpp_firmware_v1_8_0.fw  ifaata.mdt    widevine.b05         
a530v2_seq.fw2  cppf.b00                keymaster.b00 widevine.b06         
a530v3_gpmu.fw2 cppf.b01                keymaster.b01 widevine.mbn         
a530v3_seq.fw2  cppf.b02                keymaster.b02 widevine.mdt         
a540_gpmu.fw2   cppf.b03                keymaster.b03 wlan                 
cmnlib.b00      cppf.b04                keymaster.b04 
cmnlib.b01      cppf.b05                keymaster.b05 




ASUS_Z01F_1:/firmware/image # ls
adsp.b00     cmnlib64.b05 cpe_9335.b25 gptest.b03   qmpsecap.b05 venus.b00    
adsp.b01     cmnlib64.mdt cpe_9335.b26 gptest.b04   qmpsecap.b06 venus.b01    
adsp.b02     cpe_9335.b00 cpe_9335.b27 gptest.b05   qmpsecap.mdt venus.b02    
adsp.b03     cpe_9335.b01 cpe_9335.b28 gptest.b06   securemm.b00 venus.b03    
adsp.b04     cpe_9335.b02 cpe_9335.b29 gptest.mdt   securemm.b01 venus.b04    
adsp.b05     cpe_9335.b03 cpe_9335.b30 isdbtmm.b00  securemm.b02 venus.mdt    
adsp.b06     cpe_9335.b04 cpe_9335.b31 isdbtmm.b01  securemm.b03 wcnss.b00    
adsp.b07     cpe_9335.b05 cpe_9335.mdt isdbtmm.b02  securemm.b04 wcnss.b01    
adsp.b08     cpe_9335.b06 cppf.b00     isdbtmm.b03  securemm.b05 wcnss.b02    
adsp.b09     cpe_9335.b07 cppf.b01     isdbtmm.b04  securemm.b06 wcnss.b04    
adsp.b10     cpe_9335.b08 cppf.b02     isdbtmm.b05  securemm.mdt wcnss.b06    
adsp.b11     cpe_9335.b09 cppf.b03     isdbtmm.b06  smplap32.b00 wcnss.b09    
adsp.b12     cpe_9335.b10 cppf.b04     isdbtmm.mdt  smplap32.b01 wcnss.b10    
adsp.b13     cpe_9335.b11 cppf.b05     mdtp.b00     smplap32.b02 wcnss.b11    
adsp.mdt     cpe_9335.b12 cppf.b06     mdtp.b01     smplap32.b03 wcnss.b12    
cmnlib.b00   cpe_9335.b13 cppf.mdt     mdtp.b02     smplap32.b04 wcnss.mdt    
cmnlib.b01   cpe_9335.b14 dhsecapp.b00 mdtp.b03     smplap32.b05 widevine.b00 
cmnlib.b02   cpe_9335.b15 dhsecapp.b01 mdtp.b04     smplap32.b06 widevine.b01 
cmnlib.b03   cpe_9335.b16 dhsecapp.b02 mdtp.b05     smplap32.mdt widevine.b02 
cmnlib.b04   cpe_9335.b17 dhsecapp.b03 mdtp.b06     smplap64.b00 widevine.b03 
cmnlib.b05   cpe_9335.b18 dhsecapp.b04 mdtp.mdt     smplap64.b01 widevine.b04 
cmnlib.mdt   cpe_9335.b19 dhsecapp.b05 modem_pr     smplap64.b02 widevine.b05 
cmnlib64.b00 cpe_9335.b20 dhsecapp.b06 qmpsecap.b00 smplap64.b03 widevine.b06 
cmnlib64.b01 cpe_9335.b21 dhsecapp.mdt qmpsecap.b01 smplap64.b04 widevine.mdt 
cmnlib64.b02 cpe_9335.b22 gptest.b00   qmpsecap.b02 smplap64.b05 
cmnlib64.b03 cpe_9335.b23 gptest.b01   qmpsecap.b03 smplap64.b06 
cmnlib64.b04 cpe_9335.b24 gptest.b02   qmpsecap.b04 smplap64.mdt 



需要push的目录是

 adsp   cmnlib  cmnlib64  cpe_9335 cppf   dhsecapp  gptest  isdbtmm  keymaster  lksecapp  qmpsecap  securemm  smplap32  smplap64  venus  wcnss  widevine



关某些service的脚本如下

#!/bin/bash
adb root




adb shell stop thermal-engine
adb shell "echo 0 > /sys/module/msm_thermal/core_control/enabled"
#adb shell rmmod core_ctl
adb shell stop perfd
sleep 1
adb shell "echo 1 > /sys/devices/system/cpu/cpu1/online"
adb shell "echo 1 > /sys/devices/system/cpu/cpu2/online"
adb shell "echo 1 > /sys/devices/system/cpu/cpu3/online"
adb shell "echo 1 > /sys/devices/system/cpu/cpu4/online"
adb shell "echo 1 > /sys/devices/system/cpu/cpu5/online"
adb shell "echo 1 > /sys/devices/system/cpu/cpu6/online"
adb shell "echo 1 > /sys/devices/system/cpu/cpu7/online"
sleep 1
adb shell "echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"
adb shell "echo performance > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor"
adb shell "echo performance > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor"
adb shell "echo performance > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor"
adb shell "echo performance > /sys/devices/system/cpu/cpu4/cpufreq/scaling_governor"
adb shell "echo performance > /sys/devices/system/cpu/cpu5/cpufreq/scaling_governor"
adb shell "echo performance > /sys/devices/system/cpu/cpu6/cpufreq/scaling_governor"
adb shell "echo performance > /sys/devices/system/cpu/cpu7/cpufreq/scaling_governor"
# GPU performance mode
adb shell stop thermal-engine 
adb shell "echo 0 > /sys/class/kgsl/kgsl-3d0/bus_split" 
adb shell "echo performance > /sys/class/kgsl/kgsl-3d0/devfreq/governor" 
adb shell "echo 1 > /sys/class/kgsl/kgsl-3d0/force_bus_on" 
adb shell "echo 1 > /sys/class/kgsl/kgsl-3d0/force_rail_on" 
adb shell "echo 1 > /sys/class/kgsl/kgsl-3d0/force_clk_on" 
adb shell "echo 1000000 > /sys/class/kgsl/kgsl-3d0/idle_timer"

<think>在Android系统中,尤其是user版本(即非eng或userdebug版本),系统通常会有更严格的安全限制。直接使用`chmod 777`命令来修改文件或目录的权限,在user版本上可能会遇到权限被拒绝的问题。这是因为: 1. **安全策略限制**:Android系统基于Linux内核,但为了增强安全性,Android实现了SELinux(Security-Enhanced Linux)。在user版本上,SELinux通常处于强制模式(enforcing),它会限制应用程序和系统进程的权限,即使使用root权限,SELinux策略也可能阻止`chmod`操作。 2. **文件系统限制**:有些分区(如/system)在user版本上通常是只读挂载的,因此无法修改这些分区上的文件权限。 3. **root权限**:在user版本上,默认情况下设备是没有root权限的。因此,如果没有root权限,普通应用程序无法执行`chmod`命令。 ### 解决方法 如果你需要在user版本上修改文件权限,可以尝试以下方法: #### 1. 使用root权限 如果设备已经root,可以通过以下步骤: - 使用`su`命令获取root权限。 - 然后尝试执行`chmod`命令。 但是,即使有root权限,SELinux也可能阻止操作。因此,你可能需要临时禁用SELinux或修改SELinux策略。 **示例代码(在具有root权限的shell中执行):** ```java // 在Java代码中,可以通过Runtime执行shell命令 try { Process process = Runtime.getRuntime().exec("su"); DataOutputStream os = new DataOutputStream(process.getOutputStream()); // 执行命令 os.writeBytes("chmod 777 /path/to/your/file\n"); os.writeBytes("exit\n"); os.flush(); process.waitFor(); } catch (Exception e) { e.printStackTrace(); } ``` #### 2. 修改SELinux模式 如果SELinux阻止了操作,可以尝试将其设置为宽容模式(permissive): ```java try { Process process = Runtime.getRuntime().exec("su"); DataOutputStream os = new DataOutputStream(process.getOutputStream()); os.writeBytes("setenforce 0\n"); // 设置为permissive模式 os.writeBytes("chmod 777 /path/to/your/file\n"); os.writeBytes("exit\n"); os.flush(); process.waitFor(); } catch (Exception e) { e.printStackTrace(); } ``` 注意:在user版本上,设置SELinux为permissive可能也需要特定的内核支持,且重启后可能会恢复。 #### 3. 修改文件挂载为可读写 如果文件位于只读分区(如/system),需要先重新挂载该分区为可读写: ```java try { Process process = Runtime.getRuntime().exec("su"); DataOutputStream os = new DataOutputStream(process.getOutputStream()); os.writeBytes("mount -o rw,remount /system\n"); // 重新挂载/system为可读写 os.writeBytes("chmod 777 /system/path/to/file\n"); os.writeBytes("exit\n"); os.flush(); process.waitFor(); } catch (Exception e) { e.printStackTrace(); } ``` ### 注意事项 - 在user版本上进行这些操作可能会破坏系统的安全性,甚至导致系统不稳定。 - 修改系统分区的文件可能会影响OTA更新。 - 很多设备在user版本上无法获取root权限,因此上述方法可能不适用。 ### 替代方案 如果可能,避免修改系统文件权限。可以考虑将文件放在应用的数据目录(如`/data/data/your.package.name/`)下,这样应用本身就有权限读写,不需要使用`chmod`。 ### 结论 在Android user版本上使用`chmod 777`通常需要root权限,并且可能需要处理SELinux和文件系统挂载的问题。如果没有特殊需求,建议避免修改系统文件的权限。 §§相关问题§§: 1. 在Android中,如何检查一个文件或目录的当前权限? 2. SELinux在Android中起什么作用?如何查看SELinux的状态? 3. 在Android中,如何以编程方式获取root权限? 4. 修改Android系统分区(如/system)的文件有哪些风险?</think>在 Android 的 user 版本(非 root 设备)上直接使用 `chmod 777` 命令会遇到权限问题,原因如下: ### 问题原因 1. **权限限制**: - Android 系统基于 Linux 内核,普通应用权限受限于 `u:r:untrusted_app:s0` SELinux 上下文 - 普通应用无法修改 `/system`、`/vendor` 等受保护目录的权限 2. **SELinux 强制模式**: - User 版本默认启用 SELinux 强制模式(`enforcing`) - 即使拥有文件路径,SELinux 策略也会阻止权限修改 3. **文件系统只读挂载**: - 系统分区(如 `/system`)通常以只读方式挂载 - 需要先 remount 为读写模式才能修改权限 ### 解决方法 #### 方案 1:通过 ADB 临时修改(需 USB 调试) ```bash adb shell su mount -o rw,remount /system # 先 remount 为读写 chmod 777 /path/to/file mount -o ro,remount /system # 恢复只读 ``` #### 方案 2:代码实现(需 root 权限) ```java public void chmodWithRoot(String path) { try { Process process = Runtime.getRuntime().exec("su"); DataOutputStream os = new DataOutputStream(process.getOutputStream()); // Remount system as read-write os.writeBytes("mount -o rw,remount /system\n"); // Change permissions os.writeBytes("chmod 777 " + path + "\n"); // Remount system as read-only os.writeBytes("mount -o ro,remount /system\n"); os.writeBytes("exit\n"); os.flush(); process.waitFor(); } catch (Exception e) { e.printStackTrace(); } } ``` #### 方案 3:非 root 设备替代方案(仅限应用私有目录) ```java // 只能修改应用私有目录内的文件 File file = new File(getFilesDir(), "example.txt"); file.setReadable(true, false); // 全局可读 file.setWritable(true, false); // 全局可写 file.setExecutable(true, false); // 全局可执行 ``` ### 关键注意事项 1. **系统分区修改风险**: - 修改 `/system` 可能导致 OTA 更新失败 - 错误操作可能使设备变砖 2. **安全警告**: - `chmod 777` 会完全开放文件权限,存在严重安全隐患 - 生产环境应避免使用,仅限调试场景 3. **实际可行性**: - 非 root 设备无法修改系统文件权限 - 现代 Android 版本(10+)加强了分区保护
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值