| # Copyright 2024 The ChromiumOS Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # TODO(b/202562855): Patch dns-proxy conf instead of forking. |
| description "DNS proxy daemon forked from `dns-proxy/init/dns-proxy.conf`" |
| author "chromeos-core-services@google.com" |
| |
| start on starting system-services |
| stop on stopping system-services |
| |
| respawn |
| respawn limit 3 5 |
| |
| # Do not respawn if the service is terminated on purpose. |
| normal exit 0 |
| |
| # Sacrifice before OOM panic. |
| oom score 0 |
| |
| # Minijail actually forks off the desired process. |
| expect fork |
| |
| script |
| # Start constructing minijail0 args... |
| args="" |
| |
| # Make sure minijail0 exits right away and won't block upstart. |
| args="${args} -i" |
| |
| # Create a cgroup namespace. |
| args="${args} -N" |
| |
| # Create a UTS namespace to isolate changes to the host / domain name. |
| args="${args} --uts" |
| |
| # Create an IPC namespace (isolate System V IPC objects/POSIX message queues). |
| args="${args} -l" |
| |
| # Remount /proc read-only (prevents any messing with it). |
| args="${args} -r" |
| |
| # Creates new, empty tmp directory (technically, mounts tmpfs). |
| args="${args} -t" |
| |
| # Prevent that execve gains privileges, required for seccomp filters. |
| args="${args} -n" |
| |
| # Apply seccomp policy. |
| args="${args} -S /usr/share/policy/dns-proxy-seccomp.policy" |
| |
| # Run as dns-proxy user and group. |
| args="${args} -u dns-proxy -g dns-proxy" |
| |
| # Run with root permissions so that the daemon can start sandboxed processes. |
| # Run with CAP_NET_BIND_SERVICE so that it can bind to default DNS port (53). |
| args="${args} -c cap_sys_admin,cap_net_bind_service=e" |
| |
| # Execute dns-proxy. |
| args="${args} /bin/dnsproxyd" |
| |
| # -e is not specified because the service needs to connect to servers. |
| |
| exec minijail0 ${args} |
| end script |