使用ADB推送文件到extSdCard遇到权限问题的解决方法

9次阅读
没有评论

问题描述

尝试使用ADB将文件推送到其根过的三星S3手机的外部SD卡上,但是遇到了权限被拒绝的问题。具体表现为:

$ adb push file /storage/extSdCard
failed to copy file to '/storage/extSdCard/file': Permission denied

检查设备文件系统权限发现,外部SD卡的目录权限为drwxrwxr-x,并且shell用户不在media_rw组中。尝试使用chmod 777更改权限未成功。

解决方案

方案1:提升到root shell环境

由于权限问题可能与SELinux有关,建议首先尝试提升到root shell环境进行操作。可以通过以下步骤实现:

  1. 安装并启用SU应用:在设备上安装一个具有root权限的应用(例如SuperSU),并在首次启动时授予root权限。
  2. 进入root shell:在终端模拟器中输入su命令,以root身份登录。

方案2:使用adb root命令

另一种方法是先使用adb root命令来使adb服务以root权限运行,然后再尝试使用adb push命令。

  1. 打开终端模拟器:在设备上打开一个终端模拟器。
  2. 输入adb root命令:执行adb root命令,使adb服务以root权限运行。
  3. 重新连接设备:使用adb kill-serveradb start-server命令重启adb服务,然后重新连接设备。
  4. 使用adb push命令:再次尝试使用adb push命令将文件推送到外部SD卡。

方案3:更改外部SD卡的组权限

如果上述方法均无效,可以尝试更改外部SD卡的组权限,使其与shell用户所属的组匹配。

  1. 检查当前组权限:使用ls -l /storage/extSdCard命令查看当前目录的组权限。
  2. 更改组权限:将外部SD卡的组权限从media_rw更改为sdcard_rw,使用命令chgrp sdcard_rw /storage/extSdCard -R
  3. 验证更改:再次使用ls -l /storage/extSdCard命令确认组权限已更改。
  4. 重新尝试:尝试使用adb push命令将文件推送到外部SD卡。

方案4:考虑SELinux影响

如果仍然无法解决问题,可能是SELinux策略限制了对外部SD卡的访问。可以尝试临时禁用SELinux或调整SELinux策略以允许ADB访问外部SD卡。

  1. 临时禁用SELinux:编辑/system/build.prop文件,将ro.boot.selinux=permissive设置为ro.boot.selinux=enforcing
  2. 调整SELinux策略:使用SELinux策略编辑工具(如seedit)调整策略,允许ADB访问外部SD卡。

注意事项

  • 在执行上述操作前,请确保已经创建了Nandroid备份,以防操作失误导致系统不稳定。
  • 执行任何涉及root权限的操作时,请务必谨慎,以免造成设备损坏或数据丢失。

通过上述方法,应该能够解决使用ADB推送文件到外部SD卡时遇到的权限问题。

正文完