Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp3374687ybi; Mon, 10 Jun 2019 09:10:24 -0700 (PDT) X-Google-Smtp-Source: APXvYqwgDov0FG2EHLSYPHPmcGx9WxBqH13Ds+f8/4t+pucz2MeIfhLqvJKRNOLwgsfKM9vAVQmz X-Received: by 2002:aa7:972a:: with SMTP id k10mr42678966pfg.116.1560183023890; Mon, 10 Jun 2019 09:10:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560183023; cv=none; d=google.com; s=arc-20160816; b=oUv5khSGdJFTOLHg07YuEO/dv2MN4QAcQcTuv+buqrtD3ly+cVnMJkyh2syM7rkvkK btjmWCJMZvAnxO549mhtYAyltbmQgbfWDt0NudIU12nNAnDHx5U5Vf6859BVabRAtbi0 JgfQjLd5aPfTgxHOqBWGZEeUGg8nNb1emMMODoid79M7QoWtJzGXzzu5sY+7JaaTsVR0 FLkRSCM+3kauodako1ZeBHgFWwHDjOi6+3wn3ap2nUKCNWXKxmnAkCI3vsGNw3iHl9OD GyVxqmRK2v45OCBPV0Ole2ftQLFwvFxnrc/63mH5fOcq0viGTjgMcHKQx7yUL+hISe/E INGg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=+FQvp18j6COabwnU6xY4vEVsxsM6gIlJCVHZu4T3Kvg=; b=mBdz5jw2Zr5+LhhjSeqT4d5X+3vmAEnETPYWBL9qOayEGtz/+zqieeWbySRUdrRBdQ CNXXexDm3VZKWycjFunz196UdfG0w+cho84pZDkDLxRhhD1AO0V4jPHdAixJo2scBhnZ qDvlG1yEzJaH45kRNsCKO5RK8jaoZPGIe71zYFPBPSc8oPBekSkDxzO2G7T7z+U8cLgd G2oqN3IGUUiowRqSxlPEYEJ4yUbvsDdhT2W1tfQb+s3LqAC/BZOjunPFvpGG/e7kApdD Ysv/A1RlfO5M6sNePlahj8Lu7oHh+Blhw8yP20bdh0gzpgu7kDBehDIsv7QUmcuBHWJS JXTA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@millerson.name header.s=mail header.b="ff/7EGsp"; spf=pass (google.com: best guess record for domain of selinux-refpolicy-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=selinux-refpolicy-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=millerson.name Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b2si9654552pls.93.2019.06.10.09.10.20; Mon, 10 Jun 2019 09:10:23 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of selinux-refpolicy-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@millerson.name header.s=mail header.b="ff/7EGsp"; spf=pass (google.com: best guess record for domain of selinux-refpolicy-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=selinux-refpolicy-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=millerson.name Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390202AbfFJOrr (ORCPT + 11 others); Mon, 10 Jun 2019 10:47:47 -0400 Received: from host89-222-249-147.netorn.net ([89.222.249.147]:35834 "EHLO mail.millerson.name" rhost-flags-OK-FAIL-OK-OK) by vger.kernel.org with ESMTP id S2389952AbfFJOrr (ORCPT ); Mon, 10 Jun 2019 10:47:47 -0400 X-Greylist: delayed 1606 seconds by postgrey-1.27 at vger.kernel.org; Mon, 10 Jun 2019 10:47:46 EDT DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=millerson.name; s=mail; h=MIME-Version:Message-Id:Date:Subject:To:From: user-agent:in-reply-to; bh=+FQvp18j6COabwnU6xY4vEVsxsM6gIlJCVHZu4T3Kvg=; b=ff /7EGsp2uKBxqvdicKZwTaIdNB8BlLWx6RyV99qHJMVTNKFdofvhQfbpTcmdc33EtEWpfZpI+Q7s7P lppj+3wFNyxgnha+mlC6AgJpX0xF20c7SeoWBWAb9W/rMlPbUgHhdmxj16tt71SUQCFhuft9ZkvIM L29e4YdCiM5wR78=; Received: from localhost ([127.0.0.1] helo=mail.millerson.name) by mail.millerson.name with esmtpsa id 1haLAQ-0006fL-BH (envelope-from ); Mon, 10 Jun 2019 17:20:59 +0300 Received: from alex-office-laptop.msad.rbkmoney.com ([2a04:4a00:5:966:a55:5884:e3f8:8906]) by mail.millerson.name with ESMTPSA id XoRdJkln/lwYZAAAXPwaFA (envelope-from ); Mon, 10 Jun 2019 17:20:57 +0300 From: Alexander Miroshnichenko To: selinux-refpolicy@vger.kernel.org Cc: Alexander Miroshnichenko Subject: [PATCH] add lldpd policy Date: Mon, 10 Jun 2019 17:20:05 +0300 Message-Id: <20190610142004.2719-1-alex@millerson.name> X-Mailer: git-send-email 2.21.0 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit X-GIT-Signature: 0e7d0faa8538c767d04f18df9baef3c7 X-Spam-Score: 0.9 (/) X-Spam-Status: No Sender: selinux-refpolicy-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux-refpolicy@vger.kernel.org New policy for lldpd ( http://vincentbernat.github.io/lldpd ). Signed-off-by: Alexander Miroshnichenko --- policy/modules/roles/sysadm.te | 4 + policy/modules/services/lldpd.fc | 9 ++ policy/modules/services/lldpd.if | 206 +++++++++++++++++++++++++++++++ policy/modules/services/lldpd.te | 80 ++++++++++++ 4 files changed, 299 insertions(+) create mode 100644 policy/modules/services/lldpd.fc create mode 100644 policy/modules/services/lldpd.if create mode 100644 policy/modules/services/lldpd.te diff --git a/policy/modules/roles/sysadm.te b/policy/modules/roles/sysadm.te index 8f891c83865f..ea4e06a29e30 100644 --- a/policy/modules/roles/sysadm.te +++ b/policy/modules/roles/sysadm.te @@ -595,6 +595,10 @@ optional_policy(` lldpad_admin(sysadm_t, sysadm_r) ') +optional_policy(` + lldp_admin(sysadm_t, sysadm_r) +') + optional_policy(` lockdev_role(sysadm_r, sysadm_t) ') diff --git a/policy/modules/services/lldpd.fc b/policy/modules/services/lldpd.fc new file mode 100644 index 000000000000..997a80a3baf9 --- /dev/null +++ b/policy/modules/services/lldpd.fc @@ -0,0 +1,9 @@ +/etc/lldpd.conf -- gen_context(system_u:object_r:lldpd_etc_t,s0) +/etc/lldpd.d(/.*)? gen_context(system_u:object_r:lldpd_etc_t,s0) + +/usr/sbin/lldpd -- gen_context(system_u:object_r:lldpd_exec_t,s0) +/usr/sbin/lldpcli -- gen_context(system_u:object_r:lldp_cli_exec_t,s0) + +/run/lldpd -d gen_context(system_u:object_r:lldpd_var_run_t,s0) +/run/lldpd(/.*)? gen_context(system_u:object_r:lldpd_var_run_t,s0) +/run/lldpd.pid -- gen_context(system_u:object_r:lldpd_var_run_t,s0) diff --git a/policy/modules/services/lldpd.if b/policy/modules/services/lldpd.if new file mode 100644 index 000000000000..f7030b1ead19 --- /dev/null +++ b/policy/modules/services/lldpd.if @@ -0,0 +1,206 @@ + +## policy for lldpd + +######################################## +## +## Execute lldpd_exec_t in the lldpd domain. +## +## +## +## Domain allowed to transition. +## +## +# +interface(`lldpd_domtrans',` + gen_require(` + type lldpd_t, lldpd_exec_t; + ') + + corecmd_search_bin($1) + domtrans_pattern($1, lldpd_exec_t, lldpd_t) +') + +######################################## +## +## Execute a domain transition to run lldpcli. +## +## +## +## Domain allowed to transition. +## +## +# +interface(`lldp_cli_domtrans',` + gen_require(` + type lldp_cli_t, lldp_cli_exec_t; + ') + + corecmd_search_bin($1) + can_exec($1, lldp_cli_exec_t) + domtrans_pattern($1, lldp_cli_exec_t, lldp_cli_t) +') + +######################################## +## +## Execute lldpcli in the lldp_cli domain, +## and allow the specified role +## the lldp_cli domain. +## +## +## +## Domain allowed to transition. +## +## +## +## +## Role allowed access. +## +## +# +interface(`lldp_cli_run',` + gen_require(` + type lldp_cli_t; + ') + + lldp_cli_domtrans($1) + role $2 types lldp_cli_t; +') + +###################################### +## +## Execute lldpd in the caller domain. +## +## +## +## Domain allowed access. +## +## +# +interface(`lldpd_exec',` + gen_require(` + type lldpd_exec_t; + ') + + corecmd_search_bin($1) + can_exec($1, lldpd_exec_t) +') + +######################################## +## +## Search lldpd conf directories. +## +## +## +## Domain allowed access. +## +## +# +interface(`lldpd_search_conf',` + gen_require(` + type lldpd_etc_t; + ') + + allow $1 lldpd_etc_t:dir search_dir_perms; + files_search_etc($1) +') + +######################################## +## +## Read lldpd conf files. +## +## +## +## Domain allowed access. +## +## +# +interface(`lldpd_read_conf_files',` + gen_require(` + type lldpd_etc_t; + ') + + allow $1 lldpd_etc_t:dir list_dir_perms; + read_files_pattern($1, lldpd_etc_t, lldpd_etc_t) + files_search_etc($1) +') + +######################################## +## +## Manage lldpd conf files. +## +## +## +## Domain allowed access. +## +## +# +interface(`lldpd_manage_conf_files',` + gen_require(` + type lldpd_etc_t; + ') + + manage_files_pattern($1, lldpd_etc_t, lldpd_etc_t) + files_search_etc($1) +') + +######################################## +## +## Create, read, write, and delete +## lldpd PID files. +## +## +## +## Domain allowed access. +## +## +# +interface(`lldpd_manage_pid_files',` + gen_require(` + type lldpd_var_run_t; + ') + + files_search_pids($1) + manage_files_pattern($1, lldpd_var_run_t, lldpd_var_run_t) + manage_dirs_pattern($1, lldpd_var_run_t, lldpd_var_run_t) +') + + +######################################## +## +## All of the rules required to administrate +## an lldpd environment +## +## +## +## Domain allowed access. +## +## +## +## +## Role allowed access. +## +## +## +# +interface(`lldp_admin',` + gen_require(` + type lldpd_t; + type lldpd_etc_t; + type lldpd_var_run_t; + ') + + allow $1 lldpd_t:process { signal_perms }; + ps_process_pattern($1, lldpd_t) + + tunable_policy(`allow_ptrace',` + allow $1 lldpd_t:process ptrace; + ') + + files_search_etc($1) + admin_pattern($1, lldpd_etc_t) + + files_search_pids($1) + admin_pattern($1, lldpd_var_run_t) + + lldp_cli_run($1, $2) +') diff --git a/policy/modules/services/lldpd.te b/policy/modules/services/lldpd.te new file mode 100644 index 000000000000..9a0f68dc4b7b --- /dev/null +++ b/policy/modules/services/lldpd.te @@ -0,0 +1,80 @@ +policy_module(lldpd, 1.0.0) + +######################################## +# +# Declarations +# + +type lldpd_t; +type lldpd_exec_t; +init_daemon_domain(lldpd_t, lldpd_exec_t) + +type lldp_cli_t; +type lldp_cli_exec_t; +init_system_domain(lldp_cli_t, lldp_cli_exec_t) +application_domain(lldp_cli_t, lldp_cli_exec_t) + +type lldpd_etc_t; +files_config_file(lldpd_etc_t) + +type lldpd_var_run_t; +files_pid_file(lldpd_var_run_t) +init_daemon_pid_file(lldpd_var_run_t, dir, "lldpd") +typealias lldpd_var_run_t alias lldp_sock_t; + +######################################## +# +# lldpd local policy +# +allow lldpd_t self:capability { chown dac_override fowner fsetid kill net_admin net_raw setgid setuid sys_chroot }; +allow lldpd_t self:process { fork signal_perms }; +allow lldpd_t self:fifo_file rw_fifo_file_perms; +allow lldpd_t self:unix_stream_socket { accept listen }; +allow lldpd_t lldp_sock_t:sock_file { create_sock_file_perms delete_sock_file_perms setattr }; +allow lldpd_t self:packet_socket create_socket_perms; + +lldp_cli_domtrans(lldpd_t) + +kernel_read_net_sysctls(lldpd_t) + +lldpd_read_conf_files(lldpd_t) + +lldpd_manage_pid_files(lldpd_t) +manage_sock_files_pattern(lldpd_t, lldpd_var_run_t, lldpd_var_run_t) +manage_lnk_files_pattern(lldpd_t, lldpd_var_run_t, lldpd_var_run_t) +files_pid_filetrans(lldpd_t, lldpd_var_run_t, {file dir sock_file}) + +domain_use_interactive_fds(lldpd_t) + +files_read_etc_files(lldpd_t) + +logging_send_syslog_msg(lldpd_t) + +miscfiles_read_localization(lldpd_t) + +sysnet_dns_name_resolve(lldpd_t) + +######################################## +# +# lldp_cli local policy +# +allow lldp_cli_t self:capability dac_override; +allow lldp_cli_t self:unix_dgram_socket { connect create }; +allow lldp_cli_t self:unix_stream_socket { connect create read write }; +allow lldp_cli_t self:process signal; + +allow lldp_cli_t lldpd_t:unix_stream_socket connectto; +allow lldp_cli_t lldpd_var_run_t:sock_file { read write }; + +lldpd_read_conf_files(lldp_cli_t) + +logging_send_syslog_msg(lldp_cli_t) + +files_dontaudit_read_etc_files(lldp_cli_t) + +miscfiles_read_localization(lldp_cli_t) + +domain_use_interactive_fds(lldp_cli_t) +userdom_use_user_ptys(lldp_cli_t) + +init_dontaudit_use_script_ptys(lldp_cli_t) -- 2.21.0