【发布时间】:2017-11-10 01:35:11
【问题描述】:
我正在使用adb 在安卓设备上推送和拉取文件。
这些文件是我们的应用程序的配置和数据,在受限用户帐户上安装和使用。
设备用户主目录中有一个特殊的交换文件夹。 一个典型的文件夹布局(android 6+)如下:
/storage/emulated/0 // home dir of main device user
/storage/emulated/10 // home dir of restricted user
/storage/emulated/10/exchange // our file exchange dir
最近我们发现在运行 Android 6.0.1 的 Samsung Galaxy Tab S 上无法进行文件交换。
// Pushing to main user works just fine
$ ./adb push barfoo.txt /storage/emulated/0
[ ?] /storage/emulated/0/barfoo.txt: 0/?
// Pushing to restricted user does not work
$ ./adb push barfoo.txt /storage/emulated/10
adb: error: failed to copy 'barfoo.txt' to '/storage/emulated/10/barfoo.txt': Permission denied
在logcat的输出中我发现了以下线索:
audit : type=1400 msg=audit(1496849979.822:280): avc: denied { write } for pid=15762 comm="adbd" name="10" dev="sdcardfs" ino=130656 scontext=u:r:adbd:s0 tcontext=u:object_r:container_app_data_backend:s0:c522,c768 tclass=dir
audit : SEPF_SECMOBILE_6.0.1_0021
audit : type=1300 msg=audit(1496849979.822:280): arch=40000028 syscall=322 per=800008 success=no exit=-13 a0=ffffff9c a1=b6bc0fc8 a2=a00c1 a3=1b6 items=1 ppid=1 ppcomm=init pid=15762 auid=4294967295 uid=2000 gid=2000 euid=2000 suid=2000 fsuid=2000 egid=2000 sgid=2000 fsgid=2000 tty=(none) ses=4294967295 comm="adbd" exe="/sbin/adbd" subj=u:r:adbd:s0 key=(null)
audit : type=1307 msg=audit(1496849979.822:280): cwd="/"
audit : type=1302 msg=audit(1496849979.822:280): item=0 name="/storage/emulated/10/barfoo.txt" inode=130656 dev=00:17 mode=040771 ouid=0 ogid=1015 rdev=00:00 obj=u:object_r:container_app_data_backend:s0:c522,c768
audit : type=1327 msg=audit(1496849979.822:280): proctitle=2F7362696E2F61646264002D2D726F6F745F7365636C6162656C3D753A723A73753A7330
audit : type=1320 msg=audit(1496849979.822:280):
据我所知,有一些 SELinux 政策强制执行,阻止我推送文件。
有人能复制吗?有没有办法放松 SELinux 政策?您将如何交换文件?
【问题讨论】:
-
你试过用root推送吗?
-
我该怎么做?
sudo ./adb push ...没有任何区别。设备本身没有root。是否可以像通过 adb 调用意图一样以特定设备用户身份运行adb push? -
如果有root访问选项,请检查开发者选项。
-
谢谢。不幸的是,开发人员设置中没有这样的选项。 USB 调试已启用,调试授权已清除,我的机器已获得授权。 USB 模式设置为 MTP。 Mac 的 AndroidFileTransfer 应用程序使我能够将文件拖放到所需的文件夹中。也许我们应该通过 MTP 来实现我们的文件传输。
-
@lupz 我使用 adb 脚本将文件复制到我的设备,特别是因为我的 MTP 连接似乎阻止了我一半时间复制文件。