Android tmpfs 可由用户写入
Android tmpfs writable by user
在获得 root 权限的 Android 6.0.1 设备上,我想要一个用户可写的 tmpfs。我愿意:
mkdir /sdcard/test
su
mount -t tmpfs -o size=512m tmpfs /sdcard/test
#Note that the permissions of /sdcard/test have changed
chmod 0771 /sdcard/test
chown root:sdcard_rw /sdcard/test
exit
touch /sdcard/test/aa
挂载报告:
tmpfs /storage/emulated/0/test tmpfs rw,seclabel,relatime,size=524288k 0 0
但我得到:
touch: '/sdcard/test/aa': Permission denied
所以我无法以标准用户身份写入 /sdcard/test(通过 shell 或应用程序)。我究竟做错了什么?我也试过在 /data/ 中创建挂载,这是同样的问题。
编辑 1:
我已经在 Android 4.4 设备上试过了,它工作正常。所以,有些东西发生了变化,并在以后的版本中受到限制。我想知道 5.x 是否也受到影响。
编辑 2:
奇怪的是,mount报告了两次挂载点:
tmpfs /mnt/runtime/default/emulated/0/test tmpfs rw,seclabel,relatime,size=524288k 0 0
tmpfs /storage/emulated/0/test tmpfs rw,seclabel,relatime,size=524288k 0 0
编辑 3:
当我以用户身份执行文件 touch 时,内核报告如下:
[54484.588865] type=1400 audit(1452975001.917:150): avc: denied { write } for pid=30781 comm="touch" name="/" dev="tmpfs" ino=398770 scontext=u:r:shell:s0 tcontext=u:object_r:tmpfs:s0 tclass=dir permissive=0
"su -c setenforce 0" 解决了这个问题。参见 https://source.android.com/security/selinux/validate.html
在获得 root 权限的 Android 6.0.1 设备上,我想要一个用户可写的 tmpfs。我愿意:
mkdir /sdcard/test
su
mount -t tmpfs -o size=512m tmpfs /sdcard/test
#Note that the permissions of /sdcard/test have changed
chmod 0771 /sdcard/test
chown root:sdcard_rw /sdcard/test
exit
touch /sdcard/test/aa
挂载报告:
tmpfs /storage/emulated/0/test tmpfs rw,seclabel,relatime,size=524288k 0 0
但我得到:
touch: '/sdcard/test/aa': Permission denied
所以我无法以标准用户身份写入 /sdcard/test(通过 shell 或应用程序)。我究竟做错了什么?我也试过在 /data/ 中创建挂载,这是同样的问题。
编辑 1:
我已经在 Android 4.4 设备上试过了,它工作正常。所以,有些东西发生了变化,并在以后的版本中受到限制。我想知道 5.x 是否也受到影响。
编辑 2:
奇怪的是,mount报告了两次挂载点:
tmpfs /mnt/runtime/default/emulated/0/test tmpfs rw,seclabel,relatime,size=524288k 0 0
tmpfs /storage/emulated/0/test tmpfs rw,seclabel,relatime,size=524288k 0 0
编辑 3:
当我以用户身份执行文件 touch 时,内核报告如下:
[54484.588865] type=1400 audit(1452975001.917:150): avc: denied { write } for pid=30781 comm="touch" name="/" dev="tmpfs" ino=398770 scontext=u:r:shell:s0 tcontext=u:object_r:tmpfs:s0 tclass=dir permissive=0
"su -c setenforce 0" 解决了这个问题。参见 https://source.android.com/security/selinux/validate.html