Pytanie:
Jak naprawić błędy SELinux „avc: denied” podczas uruchamiania DNSCrypt jako skryptu init.d?
wellsaid
2019-02-07 06:09:54 UTC
view on stackexchange narkive permalink

Zainstalowałem nieoficjalną pamięć ROM z systemem operacyjnym 14.1 linii w moim telefonie i chcę domyślnie, aby podczas rozruchu używany był dnscrypt.

Oto co zrobiłem:

  1. Pobierz pliki binarne arm z: https://github.com/jedisct1/dnscrypt-proxy/releases
  2. Wciśnij dnscrypt-proxy do / system / xbin
  3. Wciśnij dnscrypt-proxy.toml do / etc / dnscrypt-proxy /
  4. Utworzono następujący skrypt: /etc/init.d/99dnscrypt

    # ! / system / bin / shlog -pi -t dnscrypt "Uruchamianie dnscrypt-proxy ..." dnscrypt-proxy -config /system/etc/dnscrypt-proxy/dnscrypt-proxy.toml &log -pi -t dnscrypt "Zmiana DNS za pomocą iptables ... "iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to-destination 127.0.0.1:53  
  5. Reboot

Teraz, jeśli uruchomię 99dnscrypt jako root z adb, działa to jak urok

Ale podczas rozruchu tak nie jest.

W logcat widzę ten błąd:

  02-07 01: 00: 22.369 267 267 I sysinit: Running /system/etc/init.d/99dnscrypt 02-07 01: 00: 22.54 0 275 275 I dnscrypt: Uruchamianie dnscrypt-proxy ... 02-07 01: 00: 22.878 278278 I dnscrypt: Zmiana dns za pomocą iptables ... 02-07 01: 00: 23.236 277 277 W dnscrypt-proxy: type = 1400 audit (0.0: 28): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 002-07 01: 00: 23.236 277 277 W dnscrypt -proxy: type = 1300 audit (0.0: 28): arch = 40000028 syscall = 281 per = 800008 success = no exit = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 274 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) ses = 4294967295 exe = "/ system / bin / dnscrypt-proxy" subj = u: r: sysinit: s0 key = (null) 02-07 01: 00: 24.238 277 277 W dnscrypt-proxy: type = 1400 audit (0.0: 45): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 0
02-07 01: 00: 24.238 277 277 W dnscrypt-proxy: type = 1300 audit (0.0: 45): arch = 40000028 syscall = 281 per = 800008 success = no exit = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) ses = 4294967295 exe = "/ system / bin / dnscrypt-proxy "subj = u: r: sysinit: s0 key = (null) 02-07 01: 00: 28.242 277 277 W dnscrypt-proxy: type = 1400 audit (0.0: 82): avc: denied {create } for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 002-07 01: 00: 28.242 277 277 W dnscrypt-proxy: type = 1300 audit (0.0: 82): arch = 40000028 syscall = 281 per = 800008 success = no exit = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (brak) ses = 4294967295 exe = "/ system / bin / dnscrypt-proxy" subj = u: r: sysinit: s0 key = (null) 02-07 01: 00: 29.233 277 277 W dnscrypt-proxy: type = 1400 audit (0.0: 94): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit : s0 tclass = udp_socket permissive = 002-07 01: 00: 29.233 277 277 W dnscrypt-proxy: type = 1300 audit (0.0: 94): arch = 40000028 syscall = 281 per = 800008 success = no exit = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) ses = 4294967295 exe = "/ system / bin / dnscrypt-proxy" subj = u: r: sysinit: s0 key = (null) 02-07 01: 00: 30.234 277 277 W dnscrypt-proxy: type = 1400 audit (0.0: 105 ): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 002-07 01: 00: 30.234 277 277 W dnscrypt-proxy: type = 1300 audyt (0,0: 105): arch = 40000028 syscall = 281 per = 800008 sukces = brak wyjścia = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) ses = 4294967295 exe = "/ system / bin / dnscrypt-proxy" subj = u: r: sysinit: s0 key = ( zero)
02-07 01: 00: 31.235 277 277 W dnscrypt-proxy: type = 1400 audit (0.0: 121): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 002-07 01: 00: 31.235 277 277 W dnscrypt-proxy: type = 1300 audit (0.0: 121): arch = 40000028 syscall = 281 per = 800008 success = no exit = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) ses = 4294967295 exe = "/ system / bin / dnscrypt-proxy" subj = u: r: sysinit: s0 key = (null) 02-07 01: 00: 32.236 277 277 W dnscrypt-proxy: type = 1400 audit (0.0: 145): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 002-07 01: 00: 32.236 277 277 W dnscrypt-proxy: type = 1300 audit ( 0,0: 145): arch = 40000028 syscall = 281 per = 800008 sukces = brak wyjścia = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) ses = 4294967295 exe = "/ system / bin / dnscrypt -proxy "subj = u: r: sysinit: s0 key = (null) 02-07 01: 00: 33.247 458 W dnscrypt-proxy: type = 1400 audit (0.0: 146): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 002-07 01: 00: 33.247 458 458 W dnscrypt-proxy: type = 1300 audit (0.0: 146): arch = 40000028 syscall = 281 per = 800008 sukces = brak wyjścia = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) ses = 4294967295 exe = "/ system / bin / dnscrypt-proxy" subj = u: r: sysinit: s0 key = (null) 02-07 01: 00: 34.248 458 458 W dnscrypt-proxy: type = 1400 audit (0.0: 147): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 0
02-07 01: 00: 34.248 458 458 W dnscrypt-proxy: type = 1300 audit (0.0: 147): arch = 40000028 syscall = 281 per = 800008 success = no exit = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) ses = 4294967295 exe = "/ system / bin / dnscrypt-proxy "subj = u: r: sysinit: s0 key = (null) 02-07 01: 00: 35.249 458 458 W dnscrypt-proxy: type = 1400 audit (0.0: 148): avc: denied {create } for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 002-07 01: 00: 35.249 458 458 W dnscrypt-proxy: type = 1300 audit (0.0: 148): arch = 40000028 syscall = 281 per = 800008 success = no exit = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (brak) ses = 4294967295 exe = "/ system / bin / dnscrypt-proxy" subj = u: r: sysinit: s0 key = (null) 02-07 01: 00: 36.250 458 458 W dnscrypt-proxy: type = 1400 audit (0.0: 149): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sys init: s0 tclass = udp_socket permissive = 002-07 01: 00: 36.250 458 458 W dnscrypt-proxy: type = 1300 audit (0.0: 149): arch = 40000028 syscall = 281 per = 800008 success = no exit = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) = 4294967295 exe = "/ system / bin / dnscrypt-proxy" subj = u: r: sysinit: s0 key = (null) 02-07 01: 00: 37.251 458 458 W dnscrypt-proxy: type = 1400 audit (0.0: 150): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 002-07 01: 00: 37.251 458 458 W dnscrypt-proxy: type = Audyt 1300 (0,0: 150): arch = 40000028 syscall = 281 per = 800008 sukces = brak wyjścia = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) ses = 4294967295 exe = "/ system / bin / dnscrypt-proxy" subj = u: r: sysinit: s0 key = (zero)
02-07 01: 00: 38.242 458 458 W dnscrypt-proxy: type = 1400 audit (0.0: 151): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 002-07 01: 00: 38.242 458 458 W dnscrypt-proxy: type = 1300 audit (0.0: 151): arch = 40000028 syscall = 281 per = 800008 success = no exit = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) ses = 4294967295 exe = "/ system / bin / dnscrypt-proxy" subj = u: r: sysinit: s0 key = (null) 02-07 01: 00: 39.244 458 458 W dnscrypt-proxy: type = 1400 audit (0.0: 152): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 002-07 01: 00: 39.244 458 458 W dnscrypt-proxy: type = 1300 audit ( 0,0: 152): arch = 40000028 syscall = 281 per = 800008 sukces = brak wyjścia = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) ses = 4294967295 exe = "/ system / bin / dnscrypt -proxy "subj = u: r: sysinit: s0 key = (null) 02-07 01: 00: 40.245 458 458 W dnscrypt-proxy: type = 1400 audit (0.0: 153): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 002-07 01: 00: 40.245 458 458 W dnscrypt-proxy: type = 1300 audit (0.0: 153): arch = 40000028 syscall = 281 per = 800008 sukces = brak wyjścia = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) ses = 4294967295 exe = "/ system / bin / dnscrypt-proxy" subj = u: r: sysinit: s0 key = (null) 02-07 01: 00: 41.246 458 458 W dnscrypt-proxy: type = 1400 audit (0.0: 154): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 0
02-07 01: 00: 41.246 458 458 W dnscrypt-proxy: type = 1300 audit (0.0: 154): arch = 40000028 syscall = 281 per = 800008 success = no exit = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) ses = 4294967295 exe = "/ system / bin / dnscrypt-proxy "subj = u: r: sysinit: s0 key = (null) 02-07 01: 00: 42.247 458 458 W dnscrypt-proxy: type = 1400 audit (0.0: 155): avc: denied {create } for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 002-07 01: 00: 42.247 458 458 W dnscrypt-proxy: type = 1300 audit (0.0: 155): arch = 40000028 syscall = 281 per = 800008 success = no exit = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (brak) ses = 4294967295 exe = "/ system / bin / dnscrypt-proxy" subj = u: r: sysinit: s0 key = (null) 02-07 01: 00: 43.248 458 458 W dnscrypt-proxy: type = 1400 audit (0.0: 156): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sys init: s0 tclass = udp_socket permissive = 002-07 01: 00: 43.248 458 458 W dnscrypt-proxy: type = 1300 audit (0.0: 156): arch = 40000028 syscall = 281 per = 800008 success = no exit = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) = 4294967295 exe = "/ system / bin / dnscrypt-proxy" subj = u: r: sysinit: s0 key = (null) 02-07 01: 00: 44.249 458 458 W dnscrypt-proxy: type = 1400 audit (0.0: 157): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 002-07 01: 00: 44.249 458 458 W dnscrypt-proxy: type = Audyt 1300 (0,0: 157): arch = 40000028 syscall = 281 per = 800008 success = no exit = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) ses = 4294967295 exe = "/ system / bin / dnscrypt-proxy" subj = u: r: sysinit: s0 key = (zero)
02-07 01: 00: 46.251 458 458 W dnscrypt-proxy: type = 1400 audit (0.0: 185): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 002-07 01: 00: 46.251 458 458 W dnscrypt-proxy: type = 1300 audit (0.0: 185): arch = 40000028 syscall = 281 per = 800008 success = no exit = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) ses = 4294967295 exe = "/ system / bin / dnscrypt-proxy" subj = u: r: sysinit: s0 key = (null) 02-07 01: 00: 47.252 458 458 W dnscrypt-proxy: type = 1400 audit (0.0: 186): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 002-07 01: 00: 47.252 458 458 W dnscrypt-proxy: type = 1300 audit ( 0,0: 186): arch = 40000028 syscall = 281 per = 800008 sukces = brak wyjścia = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) ses = 4294967295 exe = "/ system / bin / dnscrypt -proxy "subj = u: r: sysinit: s0 key = (null) 02-07 01: 00: 48.243 458 W dnscrypt-proxy: type = 1400 audit (0.0: 187): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 002-07 01: 00: 48.243 458 458 W dnscrypt-proxy: type = 1300 audit (0.0: 187): arch = 40000028 syscall = 281 per = 800008 sukces = brak wyjścia = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) ses = 4294967295 exe = "/ system / bin / dnscrypt-proxy" subj = u: r: sysinit: s0 key = (null) 02-07 01: 00: 49.254 458 458 W dnscrypt-proxy: type = 1400 audit (0.0: 188): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 0
02-07 01: 00: 49.254 458 458 W dnscrypt-proxy: type = 1300 audit (0.0: 188): arch = 40000028 syscall = 281 per = 800008 success = no exit = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) ses = 4294967295 exe = "/ system / bin / dnscrypt-proxy "subj = u: r: sysinit: s0 key = (null) 02-07 01: 00: 50.255 458 458 W dnscrypt-proxy: type = 1400 audit (0.0: 189): avc: denied {create } for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 002-07 01: 00: 50.255 458 458 W dnscrypt-proxy: type = 1300 audit (0.0: 189): arch = 40000028 syscall = 281 per = 800008 success = no exit = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (brak) ses = 4294967295 exe = "/ system / bin / dnscrypt-proxy" subj = u: r: sysinit: s0 key = (null) 02-07 01: 00: 51.256 458 458 W dnscrypt-proxy: type = 1400 audit (0.0: 190): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sys init: s0 tclass = udp_socket permissive = 002-07 01: 00: 51.256 458 458 W dnscrypt-proxy: type = 1300 audit (0.0: 190): arch = 40000028 syscall = 281 per = 800008 success = no exit = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) = 4294967295 exe = "/ system / bin / dnscrypt-proxy" subj = u: r: sysinit: s0 key = (null) 02-07 01: 00: 52.257 458 458 W dnscrypt-proxy: type = 1400 audit (0.0: 191): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 002-07 01: 00: 52.257 458 458 W dnscrypt-proxy: type = Audyt 1300 (0,0: 191): arch = 40000028 syscall = 281 per = 800008 success = no exit = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) ses = 4294967295 exe = "/ system / bin / dnscrypt-proxy" subj = u: r: sysinit: s0 key = (zero)
02-07 01: 00: 53.259 458 458 W dnscrypt-proxy: type = 1400 audit (0.0: 192): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 002-07 01: 00: 53.259 458 458 W dnscrypt-proxy: type = 1300 audit (0.0: 192): arch = 40000028 syscall = 281 per = 800008 success = no exit = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) ses = 4294967295 exe = "/ system / bin / dnscrypt-proxy" subj = u: r: sysinit: s0 key = (null) 02-07 01: 00: 54.260 458 458 W dnscrypt-proxy: type = 1400 audit (0.0: 193): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 002-07 01: 00: 54.260 458 458 W dnscrypt-proxy: type = 1300 audit ( 0,0: 193): arch = 40000028 syscall = 281 per = 800008 sukces = brak wyjścia = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) ses = 4294967295 exe = "/ system / bin / dnscrypt -proxy "subj = u: r: sysinit: s0 key = (null) 02-07 01: 00: 55.261 458 458 W dnscrypt-proxy: type = 1400 audit (0.0: 194): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 002-07 01: 00: 55.261 458 458 W dnscrypt-proxy: type = 1300 audit (0.0: 194): arch = 40000028 syscall = 281 per = 800008 sukces = brak wyjścia = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) ses = 4294967295 exe = "/ system / bin / dnscrypt-proxy" subj = u: r: sysinit: s0 key = (null) 02-07 01: 00: 56.262 458 458 W dnscrypt-proxy: type = 1400 audit (0.0: 195): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 0
02-07 01: 00: 56.262 458 458 W dnscrypt-proxy: type = 1300 audit (0.0: 195): arch = 40000028 syscall = 281 per = 800008 success = no exit = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) ses = 4294967295 exe = "/ system / bin / dnscrypt-proxy "subj = u: r: sysinit: s0 key = (null) 02-07 01: 00: 57.253 458 458 W dnscrypt-proxy: type = 1400 audit (0.0: 196): avc: denied {create } for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 002-07 01: 00: 57.253 458 458 W dnscrypt-proxy: type = 1300 audit (0.0: 196): arch = 40000028 syscall = 281 per = 800008 success = no exit = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (brak) ses = 4294967295 exe = "/ system / bin / dnscrypt-proxy" subj = u: r: sysinit: s0 key = (null) 02-07 01: 00: 58.254 458 458 W dnscrypt-proxy: type = 1400 audit (0.0: 197): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sys init: s0 tclass = udp_socket permissive = 002-07 01: 00: 58.254 458 458 W dnscrypt-proxy: type = 1300 audit (0.0: 197): arch = 40000028 syscall = 281 per = 800008 success = no exit = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) = 4294967295 exe = "/ system / bin / dnscrypt-proxy" subj = u: r: sysinit: s0 key = (null) 02-07 01: 00: 59.255 458 458 W dnscrypt-proxy: type = 1400 audit (0.0: 198): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 002-07 01: 00: 59.255 458 458 W dnscrypt-proxy: type = Audyt 1300 (0,0: 198): arch = 40000028 syscall = 281 per = 800008 success = no exit = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) ses = 4294967295 exe = "/ system / bin / dnscrypt-proxy" subj = u: r: sysinit: s0 key = (zero)
02-07 01: 01: 00.256 458 458 W dnscrypt-proxy: type = 1400 audit (0.0: 203): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 002-07 01: 01: 00.256 458 458 W dnscrypt-proxy: type = 1300 audit (0.0: 203): arch = 40000028 syscall = 281 per = 800008 success = no exit = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) ses = 4294967295 exe = "/ system / bin / dnscrypt-proxy" subj = u: r: sysinit: s0 key = (null) 02-07 01: 01: 01.257 458 458 W dnscrypt-proxy: type = 1400 audit (0.0: 204): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 002-07 01: 01: 01.257 458 458 W dnscrypt-proxy: type = 1300 audit ( 0,0: 204): arch = 40000028 syscall = 281 per = 800008 sukces = brak wyjścia = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) ses = 4294967295 exe = "/ system / bin / dnscrypt -proxy "subj = u: r: sysinit: s0 key = (null) 02-07 01: 01: 02.258 458 458 W dnscrypt-proxy: type = 1400 audit (0.0: 207): avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 002-07 01: 01: 02.258 458 458 W dnscrypt-proxy: type = 1300 audit (0.0: 207): arch = 40000028 syscall = 281 per = 800008 sukces = brak wyjścia = -13 a0 = 2 a1 = 80802 a2 = 0 a3 = b674a934 items = 0 ppid = 1 auid = 4294967295 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = (none) ses = 4294967295 exe = "/ system / bin / dnscrypt-proxy" subj = u: r: sysinit: s0 key = (null)  

Jaka jest różnica między wykonaniem tego jako root po rozruchu a uruchomieniem z init.d? Masz pomysł, jak mogę to rozwiązać?

Z rootem masz wszystkie sepolicy zezwalające na reguły dostępu, takie jak `` zezwalaj na magisk * * * `z rootem Magisk.Jeśli chcesz uruchomić `dnscrypt` z kontekstem innym niż root (tutaj` sysinit`), musisz zdefiniować własne reguły sepolicy i ładować je przy każdym uruchomieniu.Lub po prostu ustaw SELinux na przyzwolenie do celów testowych.
Czy mógłbyś to rozwinąć?Jak to robię?Jak mogę to uczynić na stałe?
Jeden odpowiedź:
Irfan Latif
2019-02-11 00:31:49 UTC
view on stackexchange narkive permalink

Przepraszam, jeśli nie mogę podsumować obszernego tematu w krótkiej odpowiedzi :)

SELINUX I AVC DENIALS

Android jest oparty na jądrze Linuksa, które korzysta z Discretionary i Obowiązkowe kontrole dostępu (DAC, MAC) w celu ograniczenia dostępu do zasobów systemowych, takich jak pliki w określonym systemie plików. DAC zawiera klasyczne tryby plików UNIX RWX , właściciel / grupa lub UID / GID, rozszerzone atrybuty i listy kontroli dostępu. XATTR i ACL są rzadko używanymi atrybutami związanymi z systemem plików, chociaż MAC również używa XATTR. Użytkownik główny (UID: 0) to superużytkownik (administrator) w mechanizmie DAC, który może ominąć wszystkie kontrole uprawnień narzucone przez jądro. Aby sterowanie było bardziej precyzyjne, uprawnienia użytkownika root są dalej podzielone na podgrupy zwane możliwościami.

W MAC, SELinux i AppArmor są powszechnie używane mechanizmy obowiązkowej kontroli dostępu. W modelu SELinux każdy plik / proces jest oznaczony kontekstem, a reguły są zdefiniowane tak, aby umożliwić kontekstowi dostęp do drugiego.
Powiedzmy, że chcemy uruchomić polecenie ls z kontekstem my_process na pliku z kontekstem my_file , należy zdefiniować regułę zezwalającą na ten dostęp:

  Zezwól na mój_proces mój_plik plik {getattr odczyt otwórz}  

W przeciwnym razie dostęp zostanie zablokowany z powodu błędu takiego jak:

  avc: denied {open} for pid = ... comm = "ls" path = ... scontext = u: object_r: my_process: s0 tcontext = u: object_r: my_file: s0 tclass = file permissive = 0  

* Etykiety SELinux pliku można zmienić za pomocą chcon podczas gdy procesy można uruchamiać w danym kontekście za pomocą polecenia runcon . SELINUX NA ANDROIDzie

Android używa SELinux jako części swoich implementacji zabezpieczeń. Kiedy ROM jest kompilowany dla konkretnego urządzenia, definiowane są tysiące reguł SE Policy, aby umożliwić wszystkie możliwe pożądane dostępy. Te reguły są kompilowane do pliku binarnego / sepolicy , który jest umieszczony w katalogu głównym initramfs w boot.img . Ten plik jest ładowany podczas procesu wczesnego rozruchu przez init ; pierwszy proces, który uruchamia wszystkie inne procesy.
Init uruchamia również różne procesy / usługi w różnych kontekstach, jak zdefiniowano w ich plikach init * .rc.
Wszystkie etykiety systemu plików są przechowywane w wielu plikach zapisanych w rootfs lub w / system / etc / selinux / * _ contexts , / vendor / etc / selinux / * _ contexts itd. Te etykiety można przywrócić przez restorecon .

ROOTING AND SELINUX

Teraz, jeśli chcesz rozpocząć proces z innym kontekstem, który nie został wyraźnie dozwolony w SE Policy, potrzebujesz zdefiniować nowe zasady. Jednak w normalnych okolicznościach nie jest to możliwe, ponieważ DAC, MAC i możliwości razem nie pozwolą ci tego zrobić. Nadchodzi zrootowanie telefonu; weźmy przykład Magiska.
Magisk uruchamia demona jako usługę inicjującą, która pozwala każdemu nieuprzywilejowanemu procesowi poprosić o uprawnienia superużytkownika. Tak więc problem UID 0 i braku możliwości został rozwiązany. W celu rozwiązania problemu odmów SELinux, Magisk definiuje dwa nowe konteksty: magisk dla procesów i magisk_file dla systemu plików. Następnie definiowane są reguły zezwalające na wszystkie próby dostępu z / do tych kontekstów, a / sepolicy jest zastępowany zmodyfikowanym plikiem zasad. Odtąd żadne procesy działające z prawami Magisk nie będą mogły nic robić. To może być naprawdę niebezpieczne.

Przechodząc do pytania,
Zaczynasz proces z kontekstem u: r: sysinit: s0 co nie jest dozwolone w zasadach, aby uzyskać dostęp do wszystkich potrzebnych zasobów. Więc co możesz zrobić to:

OPCJA 1:
Uruchamiaj skrypty init.d z uprawnieniami roota i zapomnij o odmowach; DAC lub MAC. Na przykład Magisk wykonuje skrypty umieszczone w katalogach /data/adb/*.d podczas rozruchu.
Jednak zgodnie z powszechną praktyką procesy nie powinny otrzymywać niepotrzebnych uprawnień.

OPCJA 2:
Ustaw SELinux permissive:

  / system / bin / setenforce 0 # ORecho 0 > / sys / fs / selinux / egzekwuj  

Ale wyłącza SELinux dla całego urządzenia, co nie jest zalecane. Zamiast tego:

OPCJA 3:
Ustaw tylko sysinit na permissive :

  / sbin / supolicy --live 'permissive sysinit' # lub pozwól sysinit zrobić cokolwiek bez logowania odmów / sbin / supolicy --live 'allow sysinit * *'  

* supolicy jest częścią Magiska do manipulowania polityką SELinux. Możesz także użyć sepolicy-inject lub podobnego narzędzia.

Wszystkie powyższe rozwiązania są szybkim obejściem, ale jeśli nie chcesz zostawić niczego luźnego, śmiało.

OPCJA 4:
Możemy zdefiniować reguły SEPolicy dla kontekstu sysinit i zapisać to jako naszą domyślną politykę do załadowania bagażnik. Na przykład odmowa avc w twoim dzienniku:

  avc: denied {create} for scontext = u: r: sysinit: s0 tcontext = u: r: sysinit: s0 tclass = udp_socket permissive = 0 

można przekonwertować na regułę SEPolicy:

  allow sysinit sysinit udp_socket {create}  

sysinit to usługa inicjująca dodawana do niektórych niestandardowych ROM-ów, która wykonuje skrypty z /system/etc/init.d/ , ale nie jest to standardowa usługa AOSP i UID, GID, dodatkowe grupy , możliwości i konteksty SELinux, z którymi działa ta usługa, mogą się różnić na różnych urządzeniach.
A więc z bardziej ogólnej perspektywy, stwórzmy nową usługę init dnscrypt-proxy z wymaganym kontekstem i dodatkowo z pożądanym UID / GID / groups / Możliwościami, aby nadać najmniej wymagane uprawnienia.

JAK DODAĆ NIESTANDARDOWĄ USŁUGĘ INIT DO ANDROIDA?

  1. Umieść wykonywalny plik binarny w /system/xbin/dnscrypt-proxy

  2. Utwórz katalog / etc / dnscrypt-proxy , plik konfiguracyjny /etc/dnscrypt-proxy/dnscrypt-proxy.toml i opcjonalnie / etc / dnscrypt-proxy / blacklist.txt w razie potrzeby.

      listen_addresses = ['127.0.0.1:55'] [blacklist] blacklist_file = '/ system / etc / dnscrypt-proxy / blacklist.txt '[statyczny] [static.'cloudflare'] stempel = 'sdns: // AgcAAAAAAAAABzEuMC4wLjGgENk8mGSlIfMGXMOlIlCcKvq7AVgcrZxtjon911-ep0cg63Ul-I8NlFj4GplQGb_TTLiczclX57DvMV8Q-JdjgRgSZG5zLmNsb3VkZmxhcmUuY29tCi9kbnMtcXVlcnk  kod> 
  3. ol>
  • Używam tutaj portu 55, ponieważ w przeciwnym razie serwer dnsmasq nie nasłuchuje na zajętym porcie 53, gdy tethering jest włączony, co powoduje awarię punktu dostępu.
  • Funkcja prywatnego DNS (DoT) wprowadzona w Androidzie Pie nie używa portu 53. Aby wymusić dnscrypt-proxy , prywatny DNS powinien być wyłączony.
  1. Utwórz / etc / init / dnscrypt- proxy.rc .

      # define service service dnscrypt-proxy / system / bin / logwrapper / system / xbin / dnscrypt-proxy -config / system / etc / dnscrypt-proxy / dnscrypt-proxy.toml seclabel u: r: dns_crypt: s0 użytkownik 999 grupa 999 3003 wyłączone możliwości NET_BIND_SERVICE # uruchom dnscrypt-proxy po demonie netd we właściwości: init.svc.netd = uruchom start dnscrypt-proxy # przekieruj wszystkie zapytania DNS do dnscrypt -proxy on property: init.svc.dnscrypt-proxy = uruchomiony exec u: r: dns_crypt: s0 root root - / system / bin / iptables -w 60 -t nat -I OUTPUT -p udp --dport 53 -j DNAT --do 127.0.0.1:55 we właściwości: init.svc.dnscrypt-proxy = zatrzymane
    exec u: r: dns_crypt: s0 root root - / system / bin / iptables -w 60 -t nat -D OUTPUT -p udp --dport 53 -j DNAT --to 127.0.0.1:55  
  • Proces nie musi być uruchamiany jako root. Użyj nieuprzywilejowanego UID 999 lub innego UID, który nie jest używany przez system operacyjny Android.

  • Aby uzyskać dostęp do Internetu, proces musi odbywać się w grupie aid_inet (3003) lub mieć możliwość NET_RAW (utwórz gniazdo ) i powinien mieć możliwość NET_BIND_SERVICE ( bind to socket).

  • Jeśli używasz zapory (takiej jak AFWall +) do blokowania ruchu wychodzącego, musisz jawnie zezwolić na UID 999 przy każdym uruchomieniu:

      ~ # iptables -I OUTPUT -m owner --uid-owner 999 -j AKCEPTUJ  
  • Przekierowanie ruchu hostpot przez dnscrypt-proxy:

      ~ # iptables -t nat -I PREROUTING -p udp --dport 53 -j DNAT --to 127.0.0.1:55 ~ # echo -n 1 > / proc / sys / net / ipv4 / conf / all / route_localnet  
  1. Zdefiniuj Zasady SEPolicy:

      ~ # supolicy --live 'create dns_crypt' # create new context ~ # supolicy --live 'allow init dns_crypt process *' # pozwól initowi obsługiwać usługę ~ # supolicy --live 'allow dns_crypt dns_crypt * *' # zezwalaj na wzajemną miłość  

W ten sam sposób:

  # zezwalaj na dostęp do plików w / system zezwalaj na dns_crypt system_file katalog {otwórz odczyt} zezwalaj na dns_crypt system_file file {blokuj punkt wejścia execute_no_trans} # zezwalaj na tworzenie / łączenie się z gniazdami sieciowymi zezwalaj na węzeł dns_crypt tcp_socket {node_bind} zezwalaj na węzeł dns_crypt udp_socket {node_bind} zezwalaj na dns_crypt port tcp_socket {name_bind name_connect} zezwalaj na port dns_crypt udp_socket {name_bind} # zezwalaj na odczyt / proc i / dev system plików zezwalaj na dns_crypt proc_net file {open read} zezwalaj na dns_crypt proc_stat file {read}
allow dns_crypt properties_device dir {read} # zezwól na zapis do logcat, logowanie do pliku wymaga innych reguł AVC zezwól dns_crypt devpts chr_file {otwórz odczyt i zapis}  
  • To działa mnie na AEX Pie ROM. Jednak etykiety i konteksty mogą się nieznacznie różnić w różnych wersjach Androida i na różnych telefonach.

  • Do testowania możesz ustawić SELinux na zezwolenie podczas rozruchu, dodając tymczasowo linię do dnscrypt-proxy.rc file:

      ... ... on property: init.svc.netd = running exec u: r: magisk: s0 root root - / system / bin / setenforce 0 start dnscrypt-proxy ... ... ...  

    Następnie użyj dmesg , aby zobaczyć odmowy avc i zdefiniować dalsze reguły.

  1. Zapisz i wczytaj plik zasad.

      ~ # supolicy --save / etc / selinux / sepolicy  

Wprowadzanie na żywo dużej liczby reguł do polityki trwa dłużej. Ponieważ te reguły muszą być ładowane przy każdym uruchomieniu, zapisz je jako domyślny plik sepolicy.

  • Rozpakuj boot.img i zamień / sepolicy ze swoim. W ten sposób usługa będzie działać nawet wtedy, gdy telefon nie jest zrootowany .

  • Jednak jeśli nie chcesz aby zmodyfikować boot.img , możesz skorzystać z pomocy Magisk, aby załadować niestandardową politykę podczas rozruchu przed uruchomieniem usługi dnscrypt-proxy . Dzieje się tak dlatego, że nawet sam init nie może załadować żadnej niestandardowej polityki, gdy SELinux jest ustawiony jako wymuszający po załadowaniu domyślnej polityki.

      ... ... on property: init.svc.netd = uruchomiony exec u: r: magisk: s0 root root - / system / bin / load_policy / system / etc / selinux / sepolicy start dnscrypt-proxy ... ...  
  1. Ustaw uprawnienia i napraw konteksty:

      ~ # chmod 0755 / etc / dnscrypt-proxy / system / xbin / dnscrypt-proxy
    ~ # chmod 0644 /etc/init/dnscrypt-proxy.rc / etc / dnscrypt-proxy / * / etc / selinux / sepolicy ~ # restorecon -Rv / system / xbin / dnscrypt-proxy / etc / *  
  2. Uruchom ponownie.

Masz działającą nieszkodliwą, niewinnie wyglądającą usługę dnscrypt-proxy na swoim urządzeniu.

Cześć, to wygląda bardzo obiecująco!jednakże w moim romie (opartym na rodowym OS 14.1) dodanie /etc/init/dnscrypt-proxy.rc nie wydaje się uruchamiać procesu (uprawnienia do plików wydają się właściwe).Jak mogę zweryfikować jego działanie?Ponadto nie mam polecenia supolicy.
Na początku ustaw SELinux zezwalający na testowanie.Może być konieczne zdefiniowanie dodatkowych reguł AVC.Gdy wszystko będzie gotowe, przejdź do trybu wymuszania.`logwrapper` zapisuje w logcat Androida, więc możesz potwierdzić przez` logcat |grep dnscrypt`.`supolicy` pochodzi z Magisk.
Dzięki za całą pomoc, spróbuję, kiedy będę miał czas.W międzyczasie zainstalowałem Magisk i znalazłem ten moduł: https://github.com/Magisk-Modules-Repo/dnscrypt-proxy.Robi dokładnie to, co staramy się osiągnąć, prawda?
Wydaje się, że tak, ale nie spróbowałem.


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 4.0, w ramach której jest rozpowszechniana.
Loading...