blob: 1364b29607826ab899646ef53650a4cc61b35c94 [file] [log] [blame]
#!/bin/sh
# Copyright 2018 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Functions for configuring process management policies in the chromiumos LSM.
# Path to the securityfs file for configuring process management security
# policies in the chromiumos LSM (used for kernel version <= 4.4).
# TODO(mortonm): Remove this and the corresponding line in
# add_process_mgmt_policy when all devices have been updated/backported to get
# the SafeSetID LSM functionality.
CHROMIUMOS_PROCESS_MGMT_POLICIES="/sys/kernel/security/chromiumos\
/process_management_policies/add_whitelist_policy"
# Path to the securityfs file for configuring process management security
# policies in the SafeSetID LSM (used for kernel version >= 4.14).
SAFESETID_PROCESS_MGMT_POLICIES="/sys/kernel/security/safesetid\
/whitelist_policy"
# Project-specific process management policies. Projects may add policies by
# adding a file under /usr/share/cros/startup/process_management_policies/
# whose contents are one or more lines specifying a parent UID and a child UID
# that the parent can use for the purposes of process management. There should
# be one line for every UID-to-UID mapping that is to be put in the whitelist.
# Lines in the file should use the following format:
# <UID>:<UID>
#
# For example, if the 'shill' user needs to use 'dhcp', 'openvpn' and 'ipsec'
# and 'syslog' for process management, the file would look like:
# 20104:224
# 20104:217
# 20104:212
# 20104:202
configure_process_mgmt_security() {
local file policy
local accum=""
for file in /usr/share/cros/startup/process_management_policies/*; do
if [ -f "${file}" ]; then
while read -r policy; do
case "${policy}" in
# Ignore blank lines.
"") ;;
# Ignore comments.
"#"*) ;;
*)
if [ -e "${CHROMIUMOS_PROCESS_MGMT_POLICIES}" ]; then
printf "%s" "${policy}" > "${CHROMIUMOS_PROCESS_MGMT_POLICIES}"
else
accum="${accum}${policy}\n"
fi
;;
esac
done < "${file}"
fi
done
if [ -e "${SAFESETID_PROCESS_MGMT_POLICIES}" ]; then
printf "%b" "${accum}" > "${SAFESETID_PROCESS_MGMT_POLICIES}"
fi
}