无法将文件推送到设备

时间:2017-06-08 11:05:47

标签: android adb selinux

我正在使用adb来推送和从Android设备中提取文件。 这些文件是我们的应用程序的配置和数据,在受限制的用户帐户上安装和使用。

device-users主目录中有一个特殊的exchange文件夹。 典型的文件夹布局(适用于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政策?你会怎么做才能交换文件?

1 个答案:

答案 0 :(得分:0)

您通过AndroidFileTransfer看到的文件实际上不在您尝试推送的路线中。

尝试adb push barfoo.txt sdcard/

如果您执行adb shellcd sdcard,我打赌您可以看到在AndroidFileTransfer中看到的相同文件。这是因为它们实际上是符号链接,虽然您本身没有sdcard,但这是使用的目录名称。