问题描述
尝试使用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环境进行操作。可以通过以下步骤实现:
- 安装并启用SU应用:在设备上安装一个具有root权限的应用(例如SuperSU),并在首次启动时授予root权限。
- 进入root shell:在终端模拟器中输入
su
命令,以root身份登录。
方案2:使用adb root
命令
另一种方法是先使用adb root
命令来使adb服务以root权限运行,然后再尝试使用adb push
命令。
- 打开终端模拟器:在设备上打开一个终端模拟器。
- 输入
adb root
命令:执行adb root
命令,使adb服务以root权限运行。 - 重新连接设备:使用
adb kill-server
和adb start-server
命令重启adb服务,然后重新连接设备。 - 使用
adb push
命令:再次尝试使用adb push
命令将文件推送到外部SD卡。
方案3:更改外部SD卡的组权限
如果上述方法均无效,可以尝试更改外部SD卡的组权限,使其与shell
用户所属的组匹配。
- 检查当前组权限:使用
ls -l /storage/extSdCard
命令查看当前目录的组权限。 - 更改组权限:将外部SD卡的组权限从
media_rw
更改为sdcard_rw
,使用命令chgrp sdcard_rw /storage/extSdCard -R
。 - 验证更改:再次使用
ls -l /storage/extSdCard
命令确认组权限已更改。 - 重新尝试:尝试使用
adb push
命令将文件推送到外部SD卡。
方案4:考虑SELinux影响
如果仍然无法解决问题,可能是SELinux策略限制了对外部SD卡的访问。可以尝试临时禁用SELinux或调整SELinux策略以允许ADB访问外部SD卡。
- 临时禁用SELinux:编辑
/system/build.prop
文件,将ro.boot.selinux=permissive
设置为ro.boot.selinux=enforcing
。 - 调整SELinux策略:使用SELinux策略编辑工具(如
seedit
)调整策略,允许ADB访问外部SD卡。
注意事项
- 在执行上述操作前,请确保已经创建了Nandroid备份,以防操作失误导致系统不稳定。
- 执行任何涉及root权限的操作时,请务必谨慎,以免造成设备损坏或数据丢失。
通过上述方法,应该能够解决使用ADB推送文件到外部SD卡时遇到的权限问题。
正文完