SELinux的问题

如题

场景1

在setenforce 0和配置了allow system_app self:udp_socket ioctl;后操作依然被denied,log信息如下:

08-07 10:49:20.149 4795 4795 I iwpriv: type=1400 audit(0.0:3457): avc: denied {ioctl} for path=”socket:[1607798]” dev=”sockfs” ino=1607798 ioctlcmd=8bfc scontext=u:r:system_app:s0 tcontext=u:r:system_app:s0 tclass=udp_socket permissive=1

这是由于ioctl的控制在底层划分得更细,需要允许对应ioctlcmd的操作。

具体方法是:

  1. 查找对应的ioctlcmd在ioctl_defines(system/sepolicy/public/ioctl_defines)中的定义,如上文的8bfc,对应的是SIOCIWFIRSTPRIV_1C
  2. 在对应的文件中加入如下的配置:
    allowxperm system_app self:udp_socket ioctl SIOCIWFIRSTPRIV_1C;

这样,在ioctl操作时,对应的ioctlcmd就会被允许了。

[参考]

不过还有一种更快的处理方法:

1
allow system_app self:udp_socket rw_file_perms;

ioctl直接改用rw_file_perms编译不报错,运行也不会有权限问题。

1
define(`rw_file_perms', `{ ioctl read getattr lock write append }')

This line defines the macros rw_file_perms which contains the permissions ioctl (for ioctl’s), read (read file), getattr (get attributes) and then lock, write and append.