From: serue@us.ibm.com (Serge E. Hallyn)
To: refpolicy@oss.tresys.com
Subject: [refpolicy] container policy interface
Date: Tue, 9 Dec 2008 17:33:11 -0600 [thread overview]
Message-ID: <20081209233311.GA31197@us.ibm.com> (raw)
In-Reply-To: <20081203203750.GA19949@us.ibm.com>
Quoting Serge E. Hallyn (serue at us.ibm.com):
> Hi,
>
> I've been playing a bit with creating LSM-protected containers.
> Attached here are first stabs at an SELinux policy module (against
> the refpolicy source with fedora 10) defining an interface
> to create containers. The .te and .fc files use the interface
> to create two containers, under /vs1 and /vs2. I've been
> testing with liblxc (*1) creating debian-based containers
> using debootstrap, on a fedora 10 host. It should work
> equally well for libvirt though. Quite simply, $1_exec_t
> is assigned to the container's /sbin/init, and used to
> transition to the container's own type. (So far I'm lazily
> using the devices whitelist cgroup to protect against device
> access)
>
> This interface is geared toward containers which have their
> own private chroot. Containers can also be made minimalist
> sharing read-only bind mounts of most of the fs. Such
> containers should probably have their own interface, but
> in any case I'm ignoring them for now.
>
> Perhaps for starters, I don't know if there is a precedent
> for this kind of interface. Would we want just the .if in
> the base policy, with the user writing custom .te and .fc
> files, based on the if, which they compile under /usr/share/selinux/?
>
> Anyway, I'm posting this to see how far we can go toward
> making something actually useful for the refpolicy.
Well, no responses, but in any case here's a slightly updated
.if file which is working for me atm.
thanks,
-serge
-------------- next part --------------
## <Summary> Interface for creating SELinux-protected containers. </summary>
###############################################################################
##
## Copyright (c) International Business Machines Corp., 2008
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
## the GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##
################################################################################
#######################################
## <summary>
## Create necessary types and rules for a container.
## </summary>
## <param name="container_name">
## <summary>
## base name for the container. For instance, if container name is
## vs1, then most container data will be of type vs1_t.
## </summary>
## </param>
interface(`container',`
gen_require(`
type proc_t;
role system_r;
role unconfined_r;
type unconfined_t;
type unconfined_devpts_t;
type staff_t;
type staff_devpts_t;
type fs_t;
type devpts_t;
type sysfs_t;
type inaddr_any_node_t;
type clock_device_t;
type tmpfs_t;
type port_t;
');
type $1_t;
type $1_exec_t;
domain_type($1_t);
role system_r types $1_t;
role unconfined_r types $1_t;
type $1_file_t;
files_type($1_file_t);
domain_entry_file($1_t, $1_exec_t);
domain_auto_trans(unconfined_t,$1_exec_t,$1_t)
domain_auto_trans(staff_t,$1_exec_t,$1_t)
allow unconfined_t $1_exec_t:file {read execute};
allow $1_t $1_exec_t:file {read execute entrypoint};
allow unconfined_t $1_t:dir create_dir_perms;
neverallow unconfined_t $1_t:file execute;
corecmd_exec_bin($1_t)
corecmd_exec_shell($1_t)
libs_exec_lib_files($1_t)
libs_use_ld_so($1_t)
term_create_pty($1_t,$1_file_t)
allow $1_t unconfined_devpts_t:chr_file {setattr rw_term_perms};
allow $1_t console_device_t:chr_file {setattr rw_chr_file_perms};
allow $1_t staff_devpts_t:chr_file rw_chr_file_perms;
allow $1_t self:capability sys_admin;
allow $1_t proc_t:filesystem mount;
allow $1_t device_t:filesystem mount;
allow $1_t device_t:dir { write setattr mounton add_name };
allow $1_t device_t:fifo_file { create rw_fifo_file_perms };
allow $1_t devpts_t:filesystem mount;
allow $1_t clock_device_t:chr_file read_chr_file_perms;
allow $1_t $1_file_t:file *;
allow $1_t $1_file_t:lnk_file *;
allow $1_t $1_file_t:chr_file *;
allow $1_t $1_file_t:blk_file *;
allow $1_t $1_file_t:sock_file *;
allow $1_t $1_file_t:fifo_file *;
allow $1_t $1_t:fifo_file *;
allow $1_t $1_file_t:socket *;
allow $1_t $1_file_t:dir *;
allow $1_t $1_t:process ~{setcurrent};
allow $1_t $1_t:capability ~{audit_write audit_control sys_module};
allow $1_t $1_t:fd *;
allow $1_t $1_t:socket *;
allow $1_t $1_t:tcp_socket *;
allow $1_t $1_t:udp_socket *;
# from audit2allow
storage_getattr_fixed_disk_dev($1_t)
corenet_tcp_bind_http_port($1_t)
corenet_tcp_connect_http_port($1_t)
corenet_tcp_sendrecv_http_port($1_t)
corenet_tcp_sendrecv_unspec_node($1_t)
corenet_tcp_bind_unspec_node($1_t)
kernel_read_ring_buffer($1_t)
kernel_read_network_state($1_t)
allow $1_t self:unix_dgram_socket create;
kernel_read_device_sysctls($1_t);
kernel_read_net_sysctls($1_t);
kernel_rw_net_sysctls($1_t);
kernel_read_system_state($1_t);
kernel_read_hotplug_sysctls($1_t);
kernel_read_kernel_sysctls($1_t);
sysnet_read_config($1_t)
logging_send_syslog_msg($1_t)
allow $1_t sysfs_t:filesystem mount;
dev_read_urand($1_t)
fs_mount_tmpfs($1_t)
fs_unmount_tmpfs($1_t)
fs_remount_tmpfs($1_t)
fs_manage_tmpfs_dirs($1_t)
allow $1_t tmpfs_t:file manage_file_perms;
dev_mount_usbfs($1_t)
files_mount_all_file_type_fs($1_t)
files_unmount_all_file_type_fs($1_t)
files_mounton_all_mountpoints($1_t)
fs_remount_xattr_fs($1_t)
fs_getattr_xattr_fs($1_t)
corenet_tcp_sendrecv_inaddr_any_node($1_t)
corenet_udp_sendrecv_inaddr_any_node($1_t)
corenet_raw_sendrecv_inaddr_any_node($1_t)
corenet_tcp_bind_inaddr_any_node($1_t)
corenet_udp_bind_inaddr_any_node($1_t)
corenet_tcp_bind_ssh_port($1_t)
corenet_tcp_connect_ssh_port($1_t)
corenet_tcp_sendrecv_ssh_port($1_t)
corenet_udp_bind_dhcpc_port($1_t);
term_use_all_terms($1_t)
dev_getattr_sysfs_dirs($1_t)
dev_getattr_usbfs_dirs($1_t)
dev_read_rand($1_t)
dev_read_urand($1_t)
kernel_sendrecv_unlabeled_association($1_t);
allow $1_t self:unix_dgram_socket {create read write ioctl sendto connect };
allow $1_t self:shm create_shm_perms;
allow $1_t self:sem create_sem_perms;
allow $1_t self:msgq create_msgq_perms;
allow $1_t self:packet_socket *;
allow $1_t self:rawip_socket *;
allow $1_t device_t:fifo_file rw_fifo_file_perms;
allow $1_t unlabeled_t:packet recv;
allow $1_t port_t:tcp_socket *;
')
next prev parent reply other threads:[~2008-12-09 23:33 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-12-03 20:37 [refpolicy] container policy interface Serge E. Hallyn
2008-12-09 23:33 ` Serge E. Hallyn [this message]
2008-12-10 15:38 ` Daniel J Walsh
2008-12-10 22:03 ` Serge E. Hallyn
2008-12-22 17:11 ` Serge E. Hallyn
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20081209233311.GA31197@us.ibm.com \
--to=serue@us.ibm.com \
--cc=refpolicy@oss.tresys.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.